Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Debes definir un servidor web que use las API que creaste.
Los marcos de trabajo de Cloud Endpoints para Python enrutan las solicitudes a tu API hacia los métodos en tu código mediante la implementación de la Interfaz de puerta de enlace del servidor web (WSGI) estándar.
Como ocurre con todas las aplicaciones que se ejecutan en App Engine, debes crear un archivo llamado app.yaml en el que establezcas la configuración de tu aplicación de App Engine. Para definir el servidor web, realiza los cambios que se describen a continuación a tu archivo app.yaml.
Para definir un servidor web:
Crea un módulo de Python, por ejemplo, main.py, y un objeto endpoints.api_server en el nivel superior:
api=endpoints.api_server([EchoApi])
El código api = endpoints.api_server([EchoApi]) crea una aplicación WSGI que enruta las solicitudes a la API hacia los métodos de la clase EchoAPI.
Puedes proporcionarle a endpoints.api_server una lista de objetos remote.Service (que definiste cuando creaste tu API ). Si tienes una API que se implementó en varias clases, entonces tu objeto remote.Service es una colección de clases, como se describe en Crear una API implementada con varias clases.
La necesidad de crear un módulo separado para el objeto endpoints.api_server depende de que hayas creado una sola API o múltiples.
Si creaste múltiples API (con más de una subclase remote.Service) definidas en múltiples archivos, te recomendamos que crees un módulo separado para el objeto endpoints.api_server de forma que puedas importar todos los archivos de clase.
Si creaste una sola API, puedes agregar el código endpoints.api_server necesario al módulo en el que defines tu API porque no necesitas importar ninguna otra clase.
En tu archivo app.yaml, asigna el servidor web que creaste a la ubicación de Cloud Endpoints de la siguiente manera:
handlers:# The endpoints handler must be mapped to /_ah/api.-url:/_ah/api/.*script:main.api
donde main es el módulo de Python en el que definiste el objeto endpoints.api_server.
Entrega tu API desde una ruta diferente
Opcional: Para entregar tu API desde una ruta diferente, por ejemplo, /api/, haz lo siguiente:
Cambia la sección handlers en el archivo app.yaml:
handlers:-url:/api/.*script:main.api
Registro en los marcos de trabajo de Endpoints para Python
Los marcos de trabajo de Endpoints para Python registran la información sobre el estado de la aplicación y el ciclo de vida de las solicitudes con el módulo de registro estándar de Python. Para obtener más información sobre los registros de App Engine y cómo acceder a ellos, consulta Leer y escribir registros de aplicación en la documentación de App Engine.
El módulo de registro de Python proporciona niveles de registro predefinidos. En orden ascendente de gravedad, los niveles de registro son los siguientes:
Nivel de registro
Descripción
DEBUG
Proporciona registros detallados. Por lo general, solo configuras este nivel cuando solucionas un problema.
INFO
El nivel predeterminado para los marcos de trabajo de Endpoints. Te permite registrar el progreso de la aplicación en un nivel alto.
WARNING
Te alerta cuando ocurre algo inesperado, pero la aplicación puede recuperarse y seguir ejecutándose normalmente.
ERROR
Te alerta cuando ocurre un error que puede causar pérdida de funcionalidad, pero la aplicación sigue ejecutándose.
CRITICAL
Te alerta cuando ocurre un evento o error grave que puede causar que se cierre la aplicación.
Los registradores siguen una jerarquía separada por puntos. Por ejemplo, el registrador endpoints.api_config es un secundario de endpoints. Esta jerarquía te otorga controles precisos sobre los registros que se emiten o se suprimen. Por lo general, solo cambias los dos registradores raíz de los marcos de trabajo de Endpoints: endpoints y endpoints_management.
Habilitar el registro de DEBUG para los marcos de trabajo de Endpoints.
Con el fin de evitar la sobrecarga del lector de registros, los marcos de trabajo de Endpoints configuran sus registradores para que solo almacenen las entradas de registro con nivel INFO o superior. Luego de que los marcos de trabajo de Endpoints se importen a tu módulo, puedes cambiar el nivel de registro en cualquier momento de la siguiente manera:
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (UTC)"],[[["\u003cp\u003eA web server must be defined within the \u003ccode\u003eapp.yaml\u003c/code\u003e file to route requests to your API's methods using the Web Server Gateway Interface (WSGI).\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eendpoints.api_server\u003c/code\u003e object, created in a Python module like \u003ccode\u003emain.py\u003c/code\u003e, functions as a WSGI application that routes API requests, with the option to include multiple \u003ccode\u003eremote.Service\u003c/code\u003e objects if you have a multi-class API.\u003c/p\u003e\n"],["\u003cp\u003eIn the \u003ccode\u003eapp.yaml\u003c/code\u003e file, you must map the web server to the Cloud Endpoints location, by setting the url handler to \u003ccode\u003e/_ah/api/.*\u003c/code\u003e or a different path if configured, and link the script to the module where \u003ccode\u003eendpoints.api_server\u003c/code\u003e was defined.\u003c/p\u003e\n"],["\u003cp\u003eEndpoints Frameworks for Python employs the standard Python logging module, with levels ranging from \u003ccode\u003eDEBUG\u003c/code\u003e to \u003ccode\u003eCRITICAL\u003c/code\u003e, defaulting to \u003ccode\u003eINFO\u003c/code\u003e, and can be modified using the \u003ccode\u003esetLevel\u003c/code\u003e method for loggers like \u003ccode\u003eendpoints\u003c/code\u003e and \u003ccode\u003eendpoints_management\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["# Creating a web server\n\nYou must define a web server that uses the\n[API or APIs you have created](/endpoints/docs/frameworks/python/create_api).\nCloud Endpoints Frameworks for Python implements the standard\n[Web Server Gateway Interface](https://wsgi.readthedocs.io/)\n(WSGI) to route requests to your API to the methods in your code.\n\nAs with every application that runs on App Engine, you must create a file\ncalled [`app.yaml`](/appengine/docs/standard/python/config/appref) in which you\nconfigure your App Engine app's settings. To define the web server,\nyou make changes to your `app.yaml` file.\n\nTo define a web server:\n\n1. Create a Python module, for example `main.py`, and create an\n `endpoints.api_server` object at the top-level:\n\n api = endpoints.api_server([EchoApi])\n\n The code `api = endpoints.api_server([EchoApi])` creates a WSGI application\n that routes API requests to the methods in the `EchoAPI` class.\n\n You can provide a list of `remote.Service` objects (which you defined when\n you [created your API](/endpoints/docs/frameworks/python/create_api)) to\n `endpoints.api_server`. If you have an API that is implemented in several\n classes, then your `remote.Service` object is a collection of classes as\n described in [Creating an API implemented with multiple\n classes](/endpoints/docs/frameworks/python/create-multi-class-api).\n\n Whether you create a separate module for the `endpoints.api_server` object\n depends on whether you created a single API or multiple APIs.\n - If you created multiple APIs (using multiple `remote.Service`\n subclasses) that are defined in multiple files, then we recommend that\n you create a separate module for the `endpoints.api_server` object so\n that you can import all the class files.\n\n - If you created a single API, you can add the required\n `endpoints.api_server` code to the module where you define your API\n because you don't need to import any other classes.\n\n | **Warning:** if your code doesn't call `endpoints.api_server`, you will get a deployment failure when you try to deploy.\n2. In your `app.yaml` file, map the web server you just created to\n the Cloud Endpoints location as follows:\n\n handlers:\n # The endpoints handler must be mapped to /_ah/api.\n - url: /_ah/api/.*\n script: main.api\n\n where `main` is the Python module you in which you defined the\n `endpoints.api_server` object.\n\nServing your API from a different path\n--------------------------------------\n\nOptional: To serve your API from a different path, for example `/api/`:\n\n1. Modify the decorator:\n\n @endpoints.api(name='echo', version='v1', base_path='/api/')\n\n2. Change the `handlers` section in the `app.yaml` file:\n\n handlers:\n - url: /api/.*\n script: main.api\n\nLogging in Endpoints Frameworks for Python\n------------------------------------------\n\nEndpoints Frameworks for Python uses the\n[standard Python logging module](https://docs.python.org/2/library/logging.html)\nto log information about\nthe application's status and request lifecycle. To learn more about\nApp Engine logs and how to view them, review\n[Reading and writing application logs](/appengine/docs/standard/python/logs#writing_application_logs)\nin the App Engine documentation.\n\nThe Python logging module provides predefined log levels. In increasing order\nof severity, the log levels are:\n\nLoggers exist in a dot-separated hierarchy. For example, the logger\n`endpoints.api_config` is a child of the logger `endpoints`. This hierarchy\ngives you precise control over which logs are emitted or suppressed. Typically,\nyou only change the two root loggers for Endpoints Frameworks:\n`endpoints` and `endpoints_management`.\n\n### Enable `DEBUG` logging for Endpoints Frameworks\n\nTo avoid overloading the log reader, Endpoints Frameworks sets its\nloggers to only record log entries with the `INFO` log level or higher. At any\ntime after Endpoints Frameworks has been imported into your module,\nyou can change the log level as follows: \n\n import logging\n logging.getLogger('endpoints').setLevel(logging.DEBUG)\n logging.getLogger('endpoints_management').setLevel(logging.DEBUG)\n\nThe `setLevel` method sets the minimum log level for the logger."]]