5

Google Cloud Endpoints の使用を開始しましたが、複数のサービス クラスを指定するときに問題が発生しています。これを機能させる方法はありますか?

ApiConfigurationError: Attempting to implement service myservice, version v1, with multiple classes that aren't compatible. See docstring for api() for examples how to implement a multi-class API.

これが、エンドポイント サーバーを作成する方法です。

AVAILABLE_SERVICES = [
  FirstService,
  SecondService
]

app = endpoints.api_server(AVAILABLE_SERVICES)

そして、すべてのサービスクラスについて、私はこれを行っています:

@endpoints.api(name='myservice', version='v1', description='MyService API')
class FirstService(remote.Service):
...

@endpoints.api(name='myservice', version='v1', description='MyService API')
class SecondService(remote.Service):
...

これらのそれぞれは完全に個別に機能しますが、それらを組み合わせたときにそれらを機能させる方法がわかりません.

どうもありがとう。

4

5 に答える 5

6

正しい方法は、apiオブジェクトを作成し、collection

api_root = endpoints.api(name='myservice', version='v1', description='MyService API')

@api_root.collection(resource_name='first')
class FirstService(remote.Service):
  ...


@api_root.collection(resource_name='second')
class SecondService(remote.Service):
  ...

リソース名がメソッド名の前に挿入されるので、使用できます

  @endpoints.method(name='method', ...)
  def MyMethod(self, request):
    ...

それ以外の

  @endpoints.method(name='first.method', ...)
  def MyMethod(self, request):
    ...

これを API サーバーに入れる:

このオブジェクトは で装飾されapi_rootたクラスと同等であるため、単純にリストに含めることができます。例えば:remote.Serviceendpoints.apiendpoints.api_server

application = endpoints.api_server([api_root, ...])
于 2013-04-25T23:01:06.347 に答える
2

私が間違っていなければ、各サービスに異なる名前を付けて、それぞれに特定の「アドレス」で両方にアクセスできるようにする必要があります。

@endpoints.api(name='myservice_one', version='v1', description='MyService One API')
class FirstService(remote.Service):
...

@endpoints.api(name='myservice_two', version='v1', description='MyService Two API')
class SecondService(remote.Service):
...
于 2013-04-23T10:22:02.550 に答える
1

2 つのクラスに実装された単一の API を正常にデプロイできました。次のスニペットを使用して試すことができます (Googleドキュメントからほぼ直接):

an_api = endpoints.api(name='library', version='v1.0')

@an_api.api_class(resource_name='shelves')
class Shelves(remote.Service):
...

@an_api.api_class(resource_name='books', path='books')
class Books(remote.Service):
...

APPLICATION = endpoints.api_server([an_api],
                               restricted=False)
于 2014-01-24T11:45:33.850 に答える