Crear un servidor web

Debes definir un servidor web que use la API o las APIs que hayas creado. Cloud Endpoints Frameworks para Python implementa la interfaz estándar Web Server Gateway Interface (WSGI) para enrutar las solicitudes a tu API hacia los métodos de tu código.

Al igual que con cualquier aplicación que se ejecute en App Engine, debes crear un archivo llamado app.yaml en el que configures los ajustes de tu aplicación de App Engine. Para definir el servidor web, debes hacer cambios en el archivo app.yaml.

Para definir un servidor web, sigue estos pasos:

  1. Crea un módulo de Python, por ejemplo main.py, y crea 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 dirige las solicitudes de la API a los métodos de la clase EchoAPI.

    Puedes proporcionar una lista de objetos remote.Service (que definiste al crear tu API) a endpoints.api_server. Si tienes una API implementada en varias clases, tu objeto remote.Service es una colección de clases, tal como se describe en Crear una API implementada con varias clases.

    Si creas un módulo independiente para el objeto endpoints.api_server, dependerá de si has creado una o varias APIs.

    • Si has creado varias APIs (con varias subclases remote.Service) que se definen en varios archivos, te recomendamos que crees un módulo independiente para el objeto endpoints.api_server para poder importar todos los archivos de clase.

    • Si has creado una sola API, puedes añadir el código endpoints.api_server necesario al módulo en el que definas tu API, ya que no tienes que importar ninguna otra clase.

  2. En el archivo app.yaml, asigna el servidor web que acabas de crear 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 has definido el objeto endpoints.api_server.

Servir tu API desde una ruta diferente

Opcional: Para servir tu API desde otra ruta, por ejemplo, /api/, haz lo siguiente:

  1. Modificar el decorador:

    @endpoints.api(name='echo', version='v1', base_path='/api/')
    
  2. Cambia la sección handlers del archivo app.yaml:

    handlers:
    - url: /api/.*
      script: main.api
    

Registro en Endpoints Frameworks para Python

Endpoints Frameworks para Python usa el módulo de registro estándar de Python para registrar información sobre el estado de la aplicación y el ciclo de vida de las solicitudes. Para obtener más información sobre los registros de App Engine y cómo verlos, consulta el artículo Leer y escribir registros de aplicaciones de la documentación de App Engine.

El módulo de registro de Python proporciona niveles de registro predefinidos. Los niveles de registro, ordenados de menor a mayor gravedad, son los siguientes:

Nivel de registro Descripción
DEBUG Proporciona registros detallados. Normalmente, solo se define este nivel cuando se está solucionando un problema.
INFO Nivel de registro predeterminado de Endpoints Frameworks. Te permite hacer un seguimiento del progreso de la aplicación a un nivel general.
WARNING Te avisa de que ha ocurrido algo inesperado, pero la aplicación puede recuperarse y seguir funcionando con normalidad.
ERROR Te avisa de que se ha producido un error que puede provocar la pérdida de algunas funciones, pero la aplicación sigue ejecutándose.
CRITICAL Te avisa de que se ha producido un error o un evento grave que puede provocar que la aplicación se cierre.

Los registradores se organizan en una jerarquía separada por puntos. Por ejemplo, el registrador endpoints.api_config es un elemento secundario del registrador endpoints. Esta jerarquía te permite controlar con precisión qué registros se emiten o se suprimen. Normalmente, solo se cambian los dos registradores raíz de Endpoints Frameworks: endpoints y endpoints_management.

Habilitar el registro de DEBUG para Endpoints Frameworks

Para evitar sobrecargar el lector de registros, Endpoints Frameworks configura sus registradores para que solo registren entradas de registro con el nivel de registro INFO o superior. En cualquier momento después de importar Endpoints Frameworks en tu módulo, puedes cambiar el nivel de registro de la siguiente manera:

import logging
logging.getLogger('endpoints').setLevel(logging.DEBUG)
logging.getLogger('endpoints_management').setLevel(logging.DEBUG)

El método setLevel define el nivel de registro mínimo del registrador.