感谢asamarin我已经能够弄清楚如何在同一个谷歌应用引擎中获得不同的端点(参见Using Google endpoints in different modules of the same app)。
但我无法使其发挥作用(至少在开发服务器上,我并没有尝试将其推向云端)。我有两个模块:module1和module2,每个模块运行一个独立的api(使用google端点)。 在每个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需要花费很多时间才能找到与模块1完全相同的API,除非我点击它时,它无法找到方法。
< / LI>我和Postman玩了一下,看看在木头下发生了什么,发现两次调用localhost:8080 / _ah / api / discovery / v1 / apis和localhost:8081 / _ah ...返回相同的信息,discoveryRestUrl
为localhost:8080 / _ah / api / discovery / v1 / apis / module1 / v0 / rest。这很有趣,你会承认。
我做错了吗?只有开发服务器不能处理具有多个服务的端点吗?
感谢您的帮助
答案 0 :(得分:0)
我相信这个问题只存在于dev_appserver中,因为我在本地遇到了同样的问题但是一旦部署就可以正常工作。
我的端点服务的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
因此,对于您提供的代码,您需要点击的端点为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实例中运行每个端点模块,如注意到here。不可否认,我没有让它完全在本地工作,因为当我尝试这样做时,我收到有关我的数据存储被锁定的错误,但我相信应该可以解决这个问题here。