Используйте javascript gapi.client для выполнения моего пользовательского API Google

У меня есть служба, которая успешно развернута в конечных точках Google и доступна через браузер.

Теперь я пытаюсь загрузить клиентскую библиотеку javascript API Google для вызова своих служб с помощью javascript.

Насколько я знаю, я должен сделать это

gapi.client.load([MY_APP_NAME], 'v1', function() {
   var request = gapi.client.[API_NAME].[SERVICE_NAME].[METHOD]();
   request.execute(function(jsonResp, rawResp) {...});
   );

Но я всегда получаю исключение во время выполнения, жалующееся на то, что gapi.client.[MY_API_NAME] не определено. Я делаю то же самое с любым API Google (например, Plus), и все работает нормально. Например, если я загружу «плюс» API, у меня будет доступ к gapi.client.plus... и я смогу вызывать методы.

Я что-то упускаю? Все образцы и документы посвящены API сервисов Google, и мне не удалось найти образец для пользовательских API (тот, который пишут разработчики).

Я даже пробовал gapi.client.request с разными путями (абсолютный путь и относительный путь), но получаю ошибку 404 — Not Found в «статусе».

var request = gapi.client.request({'path':
'https://[APP_NAME].appspot.com/_ah/api/[SERVICE_NAME]/v1/[METHOD]'
, 'method': 'GET'});
request.execute(function(jsonResp, rawResp) {...});


var request = gapi.client.request({
'path':'/[SERVICE_NAME]/v1/[METHOD]',
'method': 'GET'});
request.execute(function(jsonResp, rawResp) {...});

person user2292916    schedule 15.08.2013    source источник


Ответы (1)


Проблема заключалась в отсутствующем параметре при вызове gapi.client.load().

Я посмотрел определение gapi.client.load по этой ссылке https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiclientload

gapi.client.load(name, version, callback)

что позже я узнал, не совсем правильно и отсутствует необязательный параметр (app_api_root_url).

gapi.client.load(name, version, callback, app_api_root_url)

Если app_api_root_url отсутствует, клиент загружается только для API службы Google (app_api_root_url, такой как https://myapp.appspot.com/_ah/api)

Более подробную информацию о том, как правильно использовать gapi.client.load(), можно найти по этой ссылке https://developers.google.com/appengine/docs/java/endpoints/consume_js

Как вы можете видеть в следующем фрагменте кода, у меня не было параметра ROOT, когда я вызывал gapi.client.load, и поэтому Google по умолчанию искал на собственном сервисном API и, очевидно, не смог найти мои API.

   var ROOT = 'https://your_app_id.appspot.com/_ah/api';

   gapi.client.load('your_api_name', 'v1', function() {

      var request = gapi.client.your_api_name.your_method_name();
      request.execute(function(jsonResp, rawResp) {
                        //do the rest of what you need to do
                      });

   }, ROOT);

ПРИМЕЧАНИЕ. your_app_id используется в параметре ROOT только для загрузки клиентского скрипта. После завершения загрузки у вас будет объект, названный в честь вашего API, а не вашего приложения. Этот объект подобен вашему классу Java (службы), и вы можете использовать его для прямого вызова методов.

person user2292916    schedule 15.08.2013