2017-01-21 53 views
1

錯誤: ApiConfigurationError:嘗試使用多個不兼容的類實現服務回顯版本v2。有關示例,請參閱api()的docstring以瞭解如何實現多類API。Google Cloud Endpoints V2多類API錯誤App引擎標準

代碼:

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

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

如果

ERROR:版本= 'V2' 增加(EchoApi2)

ERROR CODE :ApiConfigurationError:嘗試使用不兼容的多個類實現服務回顯版本v2。有關示例,請參閱api()的docstring以瞭解如何實現多類API。

謝謝。

回答

2

這是創建多類實現的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

相關問題