Crear la API con Cloud Endpoints Frameworks para Python
Organízate con las colecciones
Guarda y clasifica el contenido según tus preferencias.
Una API es un servicio de llamada a procedimiento remoto (RPC) que proporciona métodos remotos a los que pueden acceder clientes externos. Cada API de backend consta de una clase de servicio RPC que hereda de la clase ProtoRPC remote.Service y de uno o varios métodos. Cuando defines un método, también debes definir clases Message para las solicitudes que llegan a ese método y las respuestas que devuelve.
Una clase Message realiza una función de asignación para que los datos entrantes se puedan extraer y proporcionar correctamente al método de servicio, o bien se puedan proporcionar correctamente a la respuesta saliente.
Si una solicitud tiene argumentos de ruta o de cadena de consulta, se usa una clase ResourceContainer en lugar de una clase Message para la asignación.
Por último, debes decorar la clase de servicio de la API y los métodos de clase, así como definir clases Message para las solicitudes y las respuestas.
Crear la API
En el siguiente procedimiento se muestra cómo decorar el código para crear una API implementada en una sola clase. Si tienes una API de varias clases, consulta Crear una API implementada con varias clases.
Consulta la sección Decoradores para obtener información detallada sobre todos los decoradores disponibles.
Ten en cuenta que el nombre de tu API y el nombre de tu clase de servicio no tienen por qué ser el mismo. El número de versión se aplica a la versión de la API. El valor que introduzcas formará parte de la ruta de la URL de tu API. Para obtener más información sobre las versiones, consulte Gestión de versiones de la API.
Determina qué datos espera tu método de la solicitud y qué datos se devuelven, y crea una clase Message para el cuerpo de la solicitud y el cuerpo de la respuesta:
classEchoRequest(messages.Message):message=messages.StringField(1)classEchoResponse(messages.Message):"""A proto Message that contains a simple string field."""message=messages.StringField(1)ECHO_RESOURCE=endpoints.ResourceContainer(EchoRequest,n=messages.IntegerField(2,default=1))
Ten en cuenta que, si no aparece ningún argumento en el cuerpo de la solicitud, como en una solicitud GET
, puedes omitir la clase Message de la solicitud y usar simplemente el valor message_types.VoidMessage.
Si tu solicitud tiene argumentos de ruta o de cadena de consulta, sustituye tu clase Message por un ResourceContainer adecuado.
Para obtener información completa sobre cómo formar y usar las clases Message, consulta la documentación de las clases Message de solicitud y respuesta de Google Protocol RPC.
Crea el método de tu API y decóralo con
@endpoints.method:
@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",)defecho(self,request):
Si tu solicitud tiene datos de ruta o de cadena de consulta, sustituye el tipo de mensaje de solicitud por un ResourceContainer adecuado.
Añade el código para servir tu API, tal como se describe en el artículo sobre cómo crear un servidor web.
[[["Es fácil de entender","easyToUnderstand","thumb-up"],["Me ofreció una solución al problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Es difícil de entender","hardToUnderstand","thumb-down"],["La información o el código de muestra no son correctos","incorrectInformationOrSampleCode","thumb-down"],["Me faltan las muestras o la información que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-11 (UTC)."],[[["\u003cp\u003eAn API is an RPC service with remote methods accessible to external clients, requiring a service class that subclasses \u003ccode\u003eremote.Service\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eEach API method needs \u003ccode\u003eMessage\u003c/code\u003e classes defined for both incoming requests and outgoing responses to properly map data, though these \u003ccode\u003eMessage\u003c/code\u003e classes are not part of the exposed API.\u003c/p\u003e\n"],["\u003cp\u003eIf requests have path or query string arguments, a \u003ccode\u003eResourceContainer\u003c/code\u003e class should be used instead of a simple \u003ccode\u003eMessage\u003c/code\u003e class for data mapping.\u003c/p\u003e\n"],["\u003cp\u003eTo create an API, you must decorate a subclass of \u003ccode\u003eremote.Service\u003c/code\u003e with \u003ccode\u003e@endpoints.api\u003c/code\u003e, define \u003ccode\u003eMessage\u003c/code\u003e or \u003ccode\u003eResourceContainer\u003c/code\u003e classes for requests and responses, and decorate the method with \u003ccode\u003e@endpoints.method\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eThe API's name and version, specified in the \u003ccode\u003e@endpoints.api\u003c/code\u003e decorator, are incorporated into the API's URL path, allowing for version management.\u003c/p\u003e\n"]]],[],null,["# Creating the API using Cloud Endpoints Frameworks for Python\n\nAn API is a remote procedure call (RPC) service that provides remote\nmethods accessible to external clients. Each backend API consists of an RPC\nservice class that subclasses the\n[`ProtoRPC remote.Service`](/appengine/docs/python/tools/protorpc) class, and\none or more methods. When you define a method, you must also define\n[`Message` classes](/appengine/docs/python/tools/protorpc#Working_with_Messages)\nfor the requests coming into that method and the responses returned by it.\nA `Message` class performs a mapping function so the incoming data can be\nextracted and supplied to the service method properly, or supplied properly to\nthe outgoing response.\n| **Note:** The `Message` classes aren't part of the exposed API, so clients don't need to know about them.\n\nIf a request has path or query string arguments, you use a\n[`ResourceContainer`](/endpoints/docs/frameworks/python/decorators-reference#using_resourcecontainer_for_path_or_query_string_arguments)\nclass for the mapping, instead of a simple `Message` class.\n\nFinally, you need to decorate the API service class and class methods, and you\nneed to define `Message` classes for the requests and responses.\n\nCreating the API\n----------------\n\nThe following procedure shows how to decorate your code to create an API\nimplemented in a single class. If you have a multi-class API, see\n[Creating an API implemented with multiple classes](/endpoints/docs/frameworks/python/create-multi-class-api).\nSee\n[Decorators](/endpoints/docs/frameworks/python/decorators-reference)\nfor detailed information about all the available decorators.\n\nTo create an API:\n\n1. Add the following required imports:\n\n import endpoints\n from endpoints import message_types\n from endpoints import messages\n from endpoints import remote\n\n2. Define a subclass of `remote.Service` and decorate it with `@endpoints.api`:\n\n @endpoints.api(name=\"echo\", version=\"v1\")\n class EchoApi(remote.Service):\n\n Notice that your API name and the name of your service class don't need to\n be the same. The version number applies to the version of the API. The value\n that you enter becomes part of the path in the URL to your API. For more\n information on versions, see\n [Handling API versioning](/endpoints/docs/frameworks/python/handling-api-versioning).\n3. Determine what data your method expects from the request and what data is\n returned, and create a\n [`Message` class](/appengine/docs/python/tools/protorpc#Working_with_Messages)\n for the request body and response body:\n\n class EchoRequest(messages.Message):\n message = messages.StringField(1)\n\n\n class EchoResponse(messages.Message):\n \"\"\"A proto Message that contains a simple string field.\"\"\"\n\n message = messages.StringField(1)\n\n\n ECHO_RESOURCE = endpoints.ResourceContainer(\n EchoRequest, n=messages.IntegerField(2, default=1)\n )\n\n Note that if no arguments appear in the request body, such as in a `GET`\n request, you can omit the `Message` class for the request and simply use the\n value `message_types.VoidMessage`.\n\n If your request has path or query string arguments, replace\n your `Message` class with an appropriate\n [`ResourceContainer`](#using_resourcecontainer_for_path_or_query_string_arguments).\n\n For complete information on forming and using `Message` classes, see the\n documentation for the\n [Google Protocol RPC](/appengine/docs/python/tools/protorpc)\n response and request `Message` classes.\n4. Create the method for your API, and decorate it with\n `@endpoints.method`:\n\n @endpoints.method(\n # This method takes a ResourceContainer defined above.\n ECHO_RESOURCE,\n # This method returns an Echo message.\n EchoResponse,\n path=\"echo\",\n http_method=\"POST\",\n name=\"echo\",\n )\n def echo(self, request):\n\n If your request has path or query string data, replace the request message\n type with an appropriate\n [`ResourceContainer`](/endpoints/docs/frameworks/python/decorators-reference#using_resourcecontainer_for_path_or_query_string_arguments).\n5. Add the code to serve your API, as described in\n [Creating a web server](/endpoints/docs/frameworks/python/api_server).\n\nWhat's next\n-----------\n\n- [Creating an API implemented with multiple classes](/endpoints/docs/frameworks/python/create-multi-class-api)\n- [Decorators](/endpoints/docs/frameworks/python/decorators-reference)"]]