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 に答える