GAEプロジェクトでクラウドエンドポイントを使い始めましたが、サーバーでAPIが更新されないという問題が発生しています。
しかし、デプロイしても何も変わりません。
さらに調査すると、URLエンドポイントの更新例が示されています: https://myapp.appspot.com/_ah/api/myapp/v1/foo/list
しかし、ロードされたクライアントAPIはまだ正しくありません。例:gapi.client.load( 'myapp'、 'v1'、callback、url); gapi.client.myapp.foo.list();
呼び出しをfoo/listからfoo/list2に変更した場合、残りのURLは更新されますが、apiパッケージは更新されません。
私は人々が遭遇する可能性のある2つのケースをカバーしようとします:
Google API Explorer Webアプリは積極的にキャッシュするため、クライアントの変更を確認するには、APIサーバー側を更新するときに、キャッシュをクリアするか、強制的に更新する必要があります。
展開に問題がある場合は、デバッグ時に2つの場所を確認する必要があります。
デプロイ後、管理ログ( https://appengine.google.com/adminlogs?&app_id=s~YOUR-APP-ID )を確認してください。アプリケーションコードが正常にデプロイされると、次のメッセージが表示されます。
Completed update of a new default version
その後すぐに、次のように表示されます。
Successfully updated API configuration
このメッセージがAPI構成の更新に失敗したことを示している場合は、再度デプロイする必要があります。上記のエラーが続く場合は、バグを通知する必要があります。 API構成に関するメッセージが表示されない場合は、パス/_ah/spi/.*
がルーティング構成で明示的に指定されていることを確認する必要があります(Pythonの場合はapp.yaml
、Javaの場合はweb.xml
)。
デプロイ後、アプリケーションログ( https://appengine.google.com/logs?&app_id=s~YOUR-APP-ID )を確認してください。デプロイが完了すると、GoogleのAPIインフラストラクチャがアプリケーションの/_ah/spi/BackendService.getApiConfigs
にリクエストを送信して、API構成(JSONとして)をGoogleのAPIインフラストラクチャに登録し、検出に関連するすべての構成を作成できるようにします。このリクエストが200で完了しない場合、GoogleのAPIインフラストラクチャには登録するものがないため、APIの変更は表示されません。
302
へのリクエストに対して常に/_ah/spi/BackendService.getApiConfigs
リダイレクトを取得している場合は、ユーザー(または生成されたAPI構成)がhttp:
をプロトコルとして使用する「bnsアダプター」を指定しているためです。 APIルートですが、web.xml
を通るパスが安全であるためには、app.yaml
(Java)または/_ah/spi
(Python)が必要です。これにより、プロトコルとしてhttp:
を使用するリクエストが(302
を使用して)プロトコルとしてhttps:
を使用して同じページにリダイレクトされます。これは、Experimentalに進む前に、Trusted Testerフォーラムで 議論 でした。
これが私に起こったことです。
ローカルホストでエンドポイントをテストしましたが、正常に機能しました。
エンドポイントをappspotにデプロイしましたが、リクエストを送信すると、ブラウザーに「見つかりません」というメッセージが表示されました。
そこで、ログを調べて、エンドポイントにリクエストを送信すると、ファビコンファイルに404httpエラーコードが表示されました。そして事実上、私はそのファイルをデプロイに入れるのを忘れていました。
そこで、ファビコンファイルを使用して戦争を再デプロイすると、404 httpコードが消え、エンドポイントはappspotでも正常に機能しました。
これはばかげているように聞こえるかもしれませんが、それは私が経験したことです。 (英語が下手であることをお詫びします)
Web.xmlに次の情報が含まれていない状態でアプリを初めてアップロードすると、次のことに気付きました。
<security-constraint>
<web-resource-collection>
<url-pattern>/_ah/spi/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
その後、bnsアダプタはhttpとして設定されます。後で上記を追加すると、/ _ ah/spi /BackendService.getApiConfigsで302httpコードを取得し、エンドポイントが更新されません。
そのため、/ _ ah/spiでhttpsを使用しないように戻し、エンドポイントを更新しています。エンドポイントが更新されていないことを確認した場合は、/ _ ah/spi /のsslの最初の構成に戻ると思います。
ヨー。
また、新しいバージョンをデプロイした後、古いAPIディスカバリドキュメントを取得していました。GAEが新しいバージョンの提供を開始するまでに数分かかりました。
同じ問題が発生し、管理ログやその他のログなどを確認しましたが、それでもAPIが最新バージョンに更新されていませんでした。
そこで、最後に書いたメソッドのAPIコードをチェックインすることにしました(Java 7)で書いています)。GAEは次のようなステートメントが好きではないことがわかりました。
if (!blocked){ .... }
私はそれを次のように切り替えました:
if (blocked == false) { ... }
そしてそれは魅力のように機能しました。そのため、GAEはその外観から、新しいAPIメソッドをスキャンし、一部のショートカットを受け入れません。
同じエラーが発生しました 見つかりません (404エラーコード)このURLを使用してAPIを呼び出していたとき
https:// MY_APP_ID.appspot.com/_ah/api/MY_SERVICE/v1/user
私はすべてを試し、最終的に削除して修正しました 発見 からのファイル WEB-INF とだけ保持 MY_SERVICE-v1.api その後、APIを再デプロイしました。今は問題なく動作します。