Creazione di un server web

Devi definire un web server che utilizzi l'API o le API che hai creato. Cloud Endpoints Frameworks per Python implementa l'interfaccia gateway server web (WSGI) standard per indirizzare le richieste alla tua API ai metodi nel tuo codice.

Come per ogni applicazione eseguita su App Engine, devi creare un file denominato app.yaml in cui configurare le impostazioni dell'app App Engine. Per definire il server web, apporta modifiche al file app.yaml.

Per definire un server web:

  1. Crea un modulo Python, ad esempio main.py, e crea un oggetto endpoints.api_server di primo livello:

    api = endpoints.api_server([EchoApi])

    Il codice api = endpoints.api_server([EchoApi]) crea un'applicazione WSGI che indirizza le richieste API ai metodi della classe EchoAPI.

    Puoi fornire un elenco di oggetti remote.Service (che hai definito quando hai creato l'API) per endpoints.api_server. Se hai un'API implementata in più classi, l'oggetto remote.Service è una raccolta di classi come descritto in Creazione di un'API implementata con più classi.

    La creazione di un modulo separato per l'oggetto endpoints.api_server dipende dalla creazione di una singola API o di più API.

    • Se hai creato più API (utilizzando più sottoclassi remote.Service) definite in più file, ti consigliamo di creare un modulo separato per l'oggetto endpoints.api_server in modo da poter importare tutti i file di classe.

    • Se hai creato una singola API, puoi aggiungere il codice endpoints.api_server richiesto al modulo in cui definisci l'API perché non devi importare altre classi.

  2. Nel file app.yaml, mappa il server web che hai appena creato nella posizione di Cloud Endpoints nel seguente modo:

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

    dove main è il modulo Python in cui hai definito l'oggetto endpoints.api_server.

Gestione dell'API da un percorso diverso

(Facoltativo) Per pubblicare l'API da un percorso diverso, ad esempio /api/:

  1. Modifica il decoratore:

    @endpoints.api(name='echo', version='v1', base_path='/api/')
    
  2. Modifica la sezione handlers nel file app.yaml:

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

Logging in Endpoints Frameworks per Python

Endpoints Frameworks per Python utilizza il modulo di logging Python standard per registrare informazioni su lo stato dell'applicazione e il ciclo di vita delle richieste. Per scoprire di più sui log di App Engine e su come visualizzarli, consulta Lettura e scrittura dei log delle applicazioni nella documentazione di App Engine.

Il modulo di logging Python fornisce livelli di log predefiniti. In ordine crescente di gravità, i livelli di log sono:

Livello di log Descrizione
DEBUG Fornisce log dettagliati. In genere, questo livello viene impostato solo durante la risoluzione di un problema.
INFO Il livello di log predefinito per Endpoints Frameworks. Consente di tracciare l'avanzamento della richiesta a livello generale.
WARNING Ti avvisa che si è verificato un problema imprevisto, ma l'applicazione può ripristinarsi e continuare a funzionare normalmente.
ERROR Ti avvisa che si è verificato un errore che potrebbe causare una perdita di funzionalità, ma l'applicazione è ancora in esecuzione.
CRITICAL Ti avvisa che si è verificato un errore o un evento grave che potrebbe causare l'arresto dell'applicazione.

I logger esistono in una gerarchia separata da punti. Ad esempio, il logger endpoints.api_config è un elemento figlio del logger endpoints. Questa gerarchia ti consente di controllare con precisione quali log vengono emessi o eliminati. In genere, modifica solo i due logger radice per Endpoints Frameworks: endpoints e endpoints_management.

Attiva la registrazione di DEBUG per Endpoints Frameworks

Per evitare di sovraccaricare il lettore di log, Endpoints Frameworks imposta i propri logger in modo che registrino solo le voci di log con il livello di log INFO o superiore. In qualsiasi momento dopo l'importazione di Endpoints Frameworks nel modulo, puoi modificare il livello di log nel seguente modo:

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

Il metodo setLevel imposta il livello di log minimo per il logger.