感谢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 回答
我相信这个问题只存在于dev_appserver中,因为我遇到了与你本地相同的问题但是一旦部署就可以正常工作了 .
我的 endpoints 服务的app.yaml如下所示:
一旦部署,为了打我的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所述 .