1

Google エンドポイントに正常にデプロイされたサービスがあり、ブラウザからアクセスできます。

現在、Google API JavaScript クライアント ライブラリをロードして、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]は未定義です。任意の Google API (Plus など) でも同じことを行い、正常に動作します。たとえば、「plus」API をロードすると、gapi.client.plus... にアクセスでき、メソッドを呼び出すことができます。

何か不足していますか?すべてのサンプルとドキュメントは Google サービス API に関するもので、カスタム 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) {...});
4

1 に答える 1

10

問題は、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 がない場合、クライアントは Google サービス API 用にのみ読み込まれます ( https://myapp.appspot.com/_ah/apiなどの app_api_root_url ) 。

このリンクhttps://developers.google.com/appengine/docs/java/endpoints/consume_jsで、gapi.client.load() を適切に使用する方法の詳細を確認できます。

次のコードでわかるように、gapi.client.loadを呼び出すときにROOTパラメータがありませんでした。そのため、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 (サービス) クラスのようなもので、メソッドを直接呼び出すために使用できます。

于 2013-08-15T23:15:10.443 に答える