Reputation: 201
Error: ApiConfigurationError: Attempting to implement service echo, version v2, with multiple classes that are not compatible. See docstring for api() for examples how to implement a multi-class API.
Code:
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 if only: version='v1' (EchoApi)
ERROR if: version='v2' is added (EchoApi2)
ERROR CODE: ApiConfigurationError: Attempting to implement service echo, version v2, with multiple classes that are not compatible. See docstring for api() for examples how to implement a multi-class API.
Thank you.
Upvotes: 1
Views: 209
Reputation: 1143
This is the correct format for creating an API implemented with multiple classes:
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])
The documentation explains it: https://cloud.google.com/endpoints/docs/frameworks/python/create_api#creating_an_api_implemented_with_multiple_classes
Upvotes: 2