3

テストに使用するモバイル デバイスで実行されている Android アプリから、ローカルの開発マシンでホストされている Cloud Endpoints API にアクセスしたいと考えています。

私のデバイスは IP アドレスで私の開発マシンにアクセスできます。--host=192.1.168.101 を App Engine ランチャーに渡し、ローカルの App Engine インスタンスが IP アドレスにバインドされるようにしました。192.168.1.101 から App Engine インスタンスにアクセスできますが、アプリが API 呼び出しを行うと 404 が返されます。

http://192.168.1.101:9080/_ah/api/explorer/に行くと自分の API が表示されないことに気付きました。にリダイレクトしhttps://developers.google.com/apis-explorer/#p/ます。使用するhttp://localhost:9080/_ah/api/explorer/と、意図したとおりに API を表示できます。ホストとして IP アドレスを使用すると、Cloud Endpoints が機能しないようです。

/etc/hosts ファイルを変更するためにデバイスを root 化したくありません。App Engine インスタンスを localhost 以外のホスト名にバインドできないため、これを変更しても解決しない可能性があります。

これは私の app.yaml 構成です:

application: my-server
version: 1
runtime: python27
threadsafe: true
api_version: 1

handlers:
# Endpoints handler
- url: /_ah/spi/.*
  script: services.application

- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.app
4

3 に答える 3

3

特定の IP にバインドしましたが、0.0.0.0 (使用可能なすべての IP) にバインドすることもできます。これは、maven appengine プラグインを使用していて、IP が変更されるたびに pom.xml ファイルを更新したくない場合に便利です。

次に、同じネットワーク上にあり、マシン間で接続できることを確認します。私は通常、ConnectBot を使用して、ローカルで実行するために定義した IP アドレスとポートへの telnet セッションを開いてテストします。これにより、ファイアウォールが問題を引き起こしていないことが保証されます。

最後に、API のルート URL を調整してコードを更新します。IP アドレスが 192.168.1.100 でポートが 8080 の場合、次のようになります。

Helloworld.Builder helloWorld = new Helloworld.Builder(AppConstants.HTTP_TRANSPORT,
    AppConstants.JSON_FACTORY, credential);
helloWorld.setRootUrl("http://192.168.1.100:8080/_ah/api/");
于 2013-09-06T22:54:57.133 に答える
1

生成されたソース コード (通常は、API 名にちなんで名付けられたファイルTictactoe.java) では、DEFAULT_ROOT_URLを に設定する必要がありますhttp://192.168.1.101:9080/_ah/api/。この URL をブラウザにロードしても、役に立つものは何も提供されません。むしろ、API リクエストへのパスのベースですhttp://192.168.1.101:9080/_ah/api/tictactoe/v1/board

デバイスが (ローカル ネットワーク経由で) ローカル サーバーに正しく接続されていることを確認するには http://192.168.1.101:9080/_ah/api/explorer/、デバイス ブラウザーから読み込みます。

于 2013-09-06T21:11:24.210 に答える
0

問題は IP アドレスとは関係ありませんでした。API メソッド デコレーターにパスを含める必要がありました。

@endpoints.method(HelloRequest, HelloResponse, name='helloworld', path='test', http_method='GET')
    def helloworld(self, request):
于 2013-09-07T18:57:43.723 に答える