多类API +端点Proto数据存储

时间:2014-09-29 21:06:52

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

将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])

1 个答案:

答案 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):
    ...

您跳过了示例中的这些行,但您声明的行为与我在此方案中遇到的行为相符。