将API类分成多个文件时,API资源管理器会为所有资源显示相同的请求定义。
因此,基于下面显示的结构(我很抱歉,如果它太长了),在API资源管理器中, my_api.api_a.test 和 my_api.api_b.test 显示相同的属性 attr_b ,这是api_server列表定义中的最后一个属性。如果我更改它并将ApiA放在最后,则两种方法都会显示 attr_a 。
知道我做错了什么
# model/model_a.py
class A(EndpointsModel):
attr_a = ndb.StringProperty()
# model/model_b.py
class B(EndpointsModel):
attr_b = ndb.StringProperty()
# api/__init__.py
my_api = endpoints.api(name='my_api', version='v1')
# api/api_a.py
@my_api.api_class(resource_name='api_a')
class ApiA(remote.Service):
@A.method(name='test', ...)
...
# api/api_b.py
@my_api.api_class(resource_name='api_b')
class ApiB(remote.Service):
@B.method(name='test', ...)
...
# services.py
from api import my_api
application = endpoints.api_server([ApiA, ApiB])
还试图定义api_server,如下所示,但根本没有用。
application = endpoints.api_server([my_api])
答案 0 :(得分:2)
当实际的方法名称(不是装饰器中的名称)在不同的api类中相同时,我注意到类似的问题(可能是端点 - 原型数据存储库中的错误)。
不能工作:
class ApiA(remote.Service):
@A.method(...)
def test(self, model):
...
class ApiB(remote.Service):
@B.method(...)
def test(self, model):
...
使用:
class ApiA(remote.Service):
@A.method(...)
def test_a(self, model):
...
class ApiB(remote.Service):
@B.method(...)
def test_b(self, model):
...
您跳过了示例中的这些行,但您声明的行为与我在此方案中遇到的行为相符。