首页 文章

无法让Google endpoints 在多种服务上运行

提问于
浏览
1

感谢asamarin我已经能够弄清楚如何在同一个谷歌应用引擎中获得不同的 endpoints (参见Using Google endpoints in different modules of the same app) .

但我不能让它工作(至少在开发服务器上,我没有尝试将其推向 Cloud 端) . 我有两个模块:module1和module2,每个模块运行一个独立的api(使用google endpoints ) . 在每个moduleX / main.py中我有这个代码:

import endpoints
from protorpc import remote

# ... some code

@endpoints.api(name="moduleX", version='v0') # X being 1 or 2 obviously
class ModuleX(remote.Service):

# ... definition of the different methods

api = endpoints.api_server([ModuleX])

当我使用两个相应的模块yaml文件运行dev_appserver.py时,它们启动良好(localhost上的module1:8080,localhost上的module2:8081) .

问题出现了:

  • localhost:8080 / _ah / api / explore效果很好,我可以用不同的方法看到我的module1 API

  • localhost:8081 / _ah / api / explore需要looooong时间然后找到与module1完全相同的API,除非我点击它时,它找不到方法 .

我在木头下发现了两次调用localhost:8080 / _ah / api / discovery / v1 / apis和localhost:8081 / _ah ...返回相同的信息 discoveryRestUrl 是localhost:8080 / _ah / API /发现/ V1 /的API /模块1 / V0 /休息 . 你承认这很有趣 .

难道我做错了什么 ?是否只有开发服务器不处理具有多个服务的 endpoints ?

谢谢你的帮助

1 回答

  • 0

    我相信这个问题只存在于dev_appserver中,因为我遇到了与你本地相同的问题但是一旦部署就可以正常工作了 .

    我的 endpoints 服务的app.yaml如下所示:

    runtime: python27
    threadsafe: true
    api_version: 1
    service: <module-name>
    
    handlers:
    - url: /_ah/spi/.*
      script: my_script.api
    
    libraries:
    - name: pycrypto
      version: 2.6
    - name: endpoints
      version: 1.0
    

    一旦部署,为了打我的api我发送请求 https://<module-name>-dot-<project-name>.appspot.com/_ah/api

    所以对于你给出的代码,你需要命中的 endpoints 是 https://<module-name>-dot-<project-name>.appspot.com/_ah/api/<moduleX>/v0/<method> 注意 <module-name> 在app.yaml中定义, <moduleX><method> 将在 my_script.api 的python代码中声明 .

    为了在dev_appserver上本地工作,我认为你需要在自己的dev_appserver实例中运行每个 endpoints 模块,如here所述 . 诚然,我没有让它在本地完全工作,因为当我尝试这样做时,我得到关于我的数据存储被锁定的错误,但我认为应该可以解决这个问题,如here所述 .

相关问题