Creazione dell'API utilizzando Cloud Endpoints Frameworks per Python
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Un'API è un servizio di chiamata di procedura remota (RPC) che fornisce metodi remoti accessibili a client esterni. Ogni API di backend è costituita da una classe di servizio RPC che eredita la classe ProtoRPC remote.Service e da uno o più metodi. Quando definisci un metodo, devi anche definire le
classi Message
per le richieste in entrata e le risposte restituite.
Una classe Message esegue una funzione di mappatura in modo che i dati in entrata possano essere
estratti e forniti correttamente al metodo del servizio o forniti correttamente alla
risposta in uscita.
Se una richiesta ha argomenti del percorso o della stringa di query, utilizza una classe
ResourceContainer
per la mappatura, anziché una semplice classe Message.
Infine, devi decorare la classe del servizio API e i metodi della classe e definire le classi Message per le richieste e le risposte.
Creazione dell'API
La seguente procedura mostra come decorare il codice per creare un'API
implementata in una singola classe. Se hai un'API multicluster, consulta la sezione
Creazione di un'API implementata con più classi.
Consulta la sezione
Decoratori
per informazioni dettagliate su tutti i decoratori disponibili.
Tieni presente che il nome dell'API e il nome della classe di servizio non devono
essere uguali. Il numero di versione si applica alla versione dell'API. Il valore
che inserisci diventa parte del percorso nell'URL della tua API. Per ulteriori
informazioni sulle versioni, consulta
Gestione del controllo delle versioni dell'API.
Determina i dati che il tuo metodo si aspetta dalla richiesta e i dati restituiti e crea una
classe Message
per il corpo della richiesta e il corpo della risposta:
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))
Tieni presente che se nel corpo della richiesta non sono presenti argomenti, ad esempio in una richiesta GET, puoi omettere la classe Message per la richiesta e utilizzare semplicemente il valore message_types.VoidMessage.
Se la tua richiesta ha argomenti di percorso o stringa di query, sostituisci
la classe Message con un
ResourceContainer appropriato.
Per informazioni complete sulla formazione e sull'utilizzo delle classi Message, consulta la documentazione relativa alle classi di richiesta e risposta Message del protocollo RPC di Google.
Crea il metodo per la tua API e decoralo 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):
Se la richiesta contiene dati di percorso o stringa di query, sostituisci il tipo di messaggio di richiesta con un ResourceContainer appropriato.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-04 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)"]]