Criar um servidor Web

Tem de definir um servidor Web que use a API ou as APIs que criou. Os frameworks do Cloud Endpoints para Python implementam a interface de gateway do servidor Web (WSGI) padrão para encaminhar pedidos para a sua API para os métodos no seu código.

Tal como acontece com todas as aplicações executadas no App Engine, tem de criar um ficheiro denominado app.yaml no qual configura as definições da app do App Engine. Para definir o servidor Web, altere o ficheiro app.yaml.

Para definir um servidor Web:

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

    api = endpoints.api_server([EchoApi])

    O código api = endpoints.api_server([EchoApi]) cria uma aplicação WSGI que encaminha pedidos de API para os métodos na classe EchoAPI.

    Pode fornecer uma lista de objetos remote.Service (que definiu quando criou a sua API) para endpoints.api_server. Se tiver uma API implementada em várias classes, o seu objeto remote.Service é uma coleção de classes, conforme descrito em Criar uma API implementada com várias classes.

    Se cria um módulo separado para o objeto endpoints.api_server depende de ter criado uma única API ou várias APIs.

    • Se criou várias APIs (usando várias subclasses) definidas em vários ficheiros, recomendamos que crie um módulo separado para o objeto endpoints.api_server para poder importar todos os ficheiros de classe.remote.Service

    • Se criou uma única API, pode adicionar o código endpoints.api_server necessário ao módulo onde define a sua API, porque não precisa de importar outras classes.

  2. No ficheiro app.yaml, mapeie o servidor Web que acabou de criar para a localização do Cloud Endpoints da seguinte forma:

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

    onde main é o módulo Python no qual definiu o objeto endpoints.api_server.

Publicar a sua API a partir de um caminho diferente

Opcional: para publicar a sua 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 secção handlers no ficheiro app.yaml:

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

Registo no Endpoints Frameworks para Python

O Endpoints Frameworks para Python usa o módulo de registo Python padrão para registar informações sobre o estado da aplicação e o ciclo de vida do pedido. Para saber mais sobre os registos do App Engine e como os ver, reveja o artigo Ler e escrever registos de aplicações na documentação do App Engine.

O módulo de registo do Python oferece níveis de registo predefinidos. Por ordem crescente de gravidade, os níveis de registo são:

Nível de registo Descrição
DEBUG Fornece registos detalhados. Normalmente, só define este nível quando resolve um problema.
INFO O nível de registo predefinido para os frameworks de pontos finais. Permite-lhe acompanhar o progresso da aplicação a um nível elevado.
WARNING Avisa que ocorreu algo inesperado, mas a aplicação pode recuperar e continuar a ser executada normalmente.
ERROR Alerta para o facto de ter ocorrido um erro que pode causar alguma perda de funcionalidade, mas a aplicação continua a ser executada.
CRITICAL Alerta para o facto de ter ocorrido um erro ou um evento grave que pode fazer com que a aplicação seja encerrada.

Os registadores existem numa hierarquia separada por pontos. Por exemplo, o registador endpoints.api_config é um filho do registador endpoints. Esta hierarquia dá-lhe um controlo preciso sobre os registos que são emitidos ou suprimidos. Normalmente, só altera os dois registadores de raiz para os Frameworks de Endpoints: endpoints e endpoints_management.

Ative o registo DEBUG para os frameworks de endpoints

Para evitar sobrecarregar o leitor de registos, o Endpoints Frameworks define os respetivos registadores para registarem apenas entradas de registo com o nível de registo INFO ou superior. Em qualquer altura após a importação dos Frameworks de Endpoints para o seu módulo, pode alterar o nível do registo da seguinte forma:

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

O método setLevel define o nível de registo mínimo para o registador.