Como criar um servidor da Web

Defina um servidor da Web que use a API ou APIs que você criou. O Cloud Endpoints Frameworks para Python implementa a interface de gateway do servidor da Web (WSGI, em inglês) padrão para rotear solicitações da sua API para os métodos no seu código.

Como sempre, é preciso criar um arquivo chamado app.yaml em que você configura o aplicativo do App Engine. Para definir o servidor da Web, faça alterações no arquivo app.yaml.

Para definir um servidor da Web:

  1. Crie um módulo Python, por exemplo, main.py e crie um objeto endpoints.api_server no nível superior:

    api = endpoints.api_server([EchoApi])

    O código api = endpoints.api_server([EchoApi]) cria um aplicativo WSGI que encaminha solicitações de API para os métodos na classe EchoAPI.

    Você pode fornecer uma lista de objetos remote.Service definidos quando você criou sua API para endpoints.api_server. Se você tiver uma API implementada em várias classes, o objeto remote.Service será uma coleção de classes conforme descrito em Como criar uma API implementada com várias classes.

    A criação de um módulo separado para o objeto endpoints.api_server depende de se você criou uma única API ou várias.

    • Se você tiver criado várias APIs (que usam várias subclasses remote.Service) definidas em vários arquivos, recomendamos que crie um módulo separado para o objeto endpoints.api_server para importar todos os arquivos de classe.

    • Se você criou uma única API, será possível adicionar o código endpoints.api_server necessário ao módulo em que a API é definida, já que não é necessário importar outras classes.

  2. No seu arquivo app.yaml, mapeie o servidor da Web que você acabou de criar para o local do Cloud Endpoints da seguinte maneira:

    handlers:
    # The endpoints handler must be mapped to /_ah/api.
    - url: /_ah/api/.*
      script: main.api
    
    

    em que main é o módulo do Python em que você definiu o objeto endpoints.api_server.

Como exibir sua API de um caminho diferente

Opcional: para exibir a API a partir de um caminho diferente, por exemplo, /api/:

  1. Modifique o decorador:

    @endpoints.api(name='echo', version='v1', base_path='/api/')
    
  2. Altere a seção handlers no arquivo app.yaml:

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

Como gerar registros no Endpoints Frameworks para Python

O Endpoints Frameworks para Python usa o módulo de registro padrão do Python para registrar informações sobre o status do aplicativo e o ciclo de vida da solicitação. Para saber mais sobre os registros do App Engine e sobre como visualizá-los, consulte Como ler e gravar registros de aplicativos na documentação do App Engine.

O módulo de geração de registros do Python fornece níveis de registros predefinidos. Em ordem crescente de gravidade, os níveis de registros são:

Nível de registro Descrição
DEBUG Fornece registros detalhados. Normalmente, esse nível só é definido ao solucionar um problema.
INFO O nível de registro padrão para o Endpoints Frameworks. Permite rastrear o progresso do aplicativo em um alto nível.
WARNING Alerta que algo inesperado ocorreu, mas o aplicativo consegue se recuperar e ser executado normalmente.
ERROR Alerta sobre um erro que pode causar perda de funcionalidade, mas o aplicativo ainda está em execução.
CRITICAL Alerta sobre um erro ou evento grave que pode encerrar o aplicativo.

Os loggers existem em uma hierarquia separada por pontos. Por exemplo, o logger endpoints.api_config é filho do logger endpoints. Essa hierarquia permite um controle preciso sobre quais registros são emitidos ou suprimidos. Normalmente, só são alterados os dois loggers raiz para o Endpoints Frameworks: endpoints e endpoints_management.

Habilitar a geração de registros DEBUG para o Endpoints Frameworks

Para evitar sobrecarregar o leitor de registro, o Endpoints Frameworks configura seus loggers para registrar apenas entradas de log com o nível INFO ou superior. Em qualquer momento depois de o Endpoints Frameworks ter sido importado para o módulo, é possível alterar o nível de registro da seguinte maneira:

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

O método setLevel define o nível mínimo de registro para o logger.