如何从移动设备访问本地Cloud Endpoints API

时间:2013-09-06 06:20:26

标签: google-app-engine google-cloud-endpoints

我想从我用于测试的移动设备上运行的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地址作为主机不能使用云端点。

我宁愿不让我的设备更改其/ etc / hosts文件。更改这可能不是一个解决方案,因为我无法将我的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

3 个答案:

答案 0 :(得分:3)

您绑定到您的特定IP,但作为提醒,您还可以绑定到0.0.0.0(所有可用的IP)。如果您使用maven appengine插件并且不想在IP更改时更新pom.xml文件,这很方便。

接下来,确保您位于同一网络上,并且可以在这些计算机之间进行连接。我通常使用ConnectBot进行测试,方法是将telnet会话打开到您为本地运行定义的IP地址和端口。这将确保您的防火墙不会导致问题。

最后,通过调整API的根网址来更新代​​码。如果您的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/");

答案 1 :(得分: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/

答案 2 :(得分:0)

问题与IP地址无关。我需要在我的API方法装饰器中包含一个路径:

@endpoints.method(HelloRequest, HelloResponse, name='helloworld', path='test', http_method='GET')
    def helloworld(self, request):