【问题标题】:Google Cloud Endpoints V2 multi-class API error App Engine StandardGoogle Cloud Endpoints V2 多类 API 错误 App Engine Standard
【发布时间】:2017-01-21 04:29:56
【问题描述】:

错误: ApiConfigurationError:尝试使用不兼容的多个类实现服务回显,版本 v2。有关如何实现多类 API 的示例,请参阅 api() 的文档字符串。

代码:

import logging
import endpoints
from protorpc import message_types
from protorpc import messages
from protorpc import remote

class EchoRequest(messages.Message):
   content = messages.StringField(1)

class EchoResponse(messages.Message):
    content = messages.StringField(1)

ECHO_RESOURCE = endpoints.ResourceContainer(
    EchoRequest, n=messages.IntegerField(2, default=1))

@endpoints.api(name='echo', version='v1',description='description')
class EchoApi(remote.Service):

  @endpoints.method(
    # This method takes a ResourceContainer defined above.
    ECHO_RESOURCE,
    # This method returns an Echo message.
    EchoResponse,
    path='echo',
    http_method='POST',
    name='echo')

  def echo(self, request):
    logging.info("echo1"+ str(request.content))
    output_content = ' '.join([request.content] * request.n)
    return EchoResponse(content=output_content)

@endpoints.api(name='echo', version='v2', description='description2')
class EchoApi2(remote.Service):

  @endpoints.method(
    # This method takes a ResourceContainer defined above.
    ECHO_RESOURCE,
    # This method returns an Echo message.
    EchoResponse,
    path='echo',
    http_method='POST',
    name='echo')

  def echo(self, request):
    logging.info("echo2" + str(request.content))
    output_content = ' '.join([request.content] * request.n)
    return EchoResponse(content=output_content)

api = endpoints.api_server([EchoApi, EchoApi2])

如果只有:版本='v1' (EchoApi)

ERROR if: version='v2' is added (EchoApi2)

错误代码:ApiConfigurationError:尝试使用不兼容的多个类实现服务回显,版本 v2。有关如何实现多类 API 的示例,请参阅 api() 的文档字符串。

谢谢。

【问题讨论】:

    标签: python google-app-engine google-cloud-endpoints


    【解决方案1】:

    这是创建使用多个类实现的 API 的正确格式:

    import logging
    import endpoints
    from protorpc import message_types
    from protorpc import messages
    from protorpc import remote
    
    class EchoRequest(messages.Message):
       content = messages.StringField(1)
    
    class EchoResponse(messages.Message):
        content = messages.StringField(1)
    
    ECHO_RESOURCE = endpoints.ResourceContainer(
        EchoRequest, n=messages.IntegerField(2, default=1))
    
    echo_collection = endpoints.api(name='echo', version='v1', description='description')
    
    @echo_collection.api_class(resource_name='echo1')
    class EchoApi1(remote.Service):
    
      @endpoints.method(
        # This method takes a ResourceContainer defined above.
        ECHO_RESOURCE,
        # This method returns an Echo message.
        EchoResponse,
        path='echo',
        http_method='POST',
        name='echo')
    
      def echo(self, request):
        logging.info("echo1"+ str(request.content))
        output_content = ' '.join([request.content] * request.n)
        return EchoResponse(content=output_content)
    
    @echo_collection.api_class(resource_name='echo2')
    class EchoApi2(remote.Service):
    
      @endpoints.method(
        # This method takes a ResourceContainer defined above.
        ECHO_RESOURCE,
        # This method returns an Echo message.
        EchoResponse,
        path='echo',
        http_method='POST',
        name='echo')
    
      def echo(self, request):
        logging.info("echo2" + str(request.content))
        output_content = ' '.join([request.content] * request.n)
        return EchoResponse(content=output_content)
    
    api = endpoints.api_server([echo_collection])
    

    文档解释它:https://cloud.google.com/endpoints/docs/frameworks/python/create_api#creating_an_api_implemented_with_multiple_classes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2014-06-28
      相关资源
      最近更新 更多