0

将 API 类分成多个文件时,API 资源管理器会为所有资源显示相同的请求定义。

因此,基于下面显示的结构(如果太长,我深表歉意),在 API 资源管理器中,my_api.api_a.testmy_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])
4

1 回答 1

2

当不同的 api 类中的实际方法名称(不是装饰器中的名称)相同时,我注意到类似的问题(这可能是 endpoints-proto-datastore 库中的错误)。

不起作用:

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

您在示例中跳过了这些行,但您陈述的行为与我在这种情况下遇到的情况相匹配。

于 2014-09-29T21:42:18.243 回答