I decoratori di Cloud Endpoints Frameworks per Python descrivono la configurazione dell'API, metodi, parametri e altri dettagli essenziali che definiscono le proprietà e il comportamento dell'endpoint.
Questa pagina descrive in dettaglio i decoratori disponibili. Per informazioni sull'utilizzo dei decoratori per creare l'API, consulta quanto segue:
Definizione dell'API (@endpoints.api
)
Puoi fornire diversi argomenti a @endpoints.api
per definire la tua API. Nella tabella seguente sono descritti gli argomenti disponibili:
Argomenti @endpoints.api | Descrizione | Esempio |
---|---|---|
allowed_client_ids |
Obbligatorio se l'API utilizza l'autenticazione. Elenco degli ID client autorizzati a richiedere token. Per saperne di più, consulta ID cliente e segmenti di pubblico consentiti. | allowed_client_ids=['1-web-apps.apps.googleusercontent.com','2-android-apps.apps.googleusercontent.com', endpoints.API_EXPLORER_CLIENT_ID ] |
api_key_required |
Facoltativo. Utilizzato per limitare l'accesso alle richieste che forniscono una chiave API. | api_key_required=True |
audiences |
Obbligatorio se la tua API richiede l'autenticazione e se supporti i client Android. Per i token ID Google, può trattarsi di un elenco di ID client per conto dei quali vengono richiesti i token. Se i token vengono emessi da fornitori di servizi di autenticazione di terze parti, come Auth0, deve essere un dizionario che mappa i nomi degli emittenti dell'autenticazione agli elenchi dei segmenti di pubblico. Per saperne di più, vedi ID cliente e segmenti di pubblico consentiti. | audiences=['1-web-apps.apps.googleusercontent.com'] o audiences={"auth0": ["aud-1.auth0.com", "aud-2.auth0.com"]} |
base_path |
Facoltativo. Utilizzato per pubblicare l'API dal percorso specificato. Se specifichi questo argomento, devi modificare anche la sezione handlers nel file app.yaml . |
Consulta Pubblicare l'API da un percorso diverso. |
canonical_name |
Facoltativo. Utilizzato per specificare un nome diverso o più leggibile per l'API nella libreria client. Questo nome viene utilizzato per generare i nomi nella libreria client; l'API di backend continua a utilizzare il valore specificato nella proprietà name .Ad esempio, se per l'API è impostato name su dfaanalytics, puoi utilizzare questa proprietà per specificare un nome canonico di DFA Group Analytics; le classi client generate conterranno quindi il nome DfaGroupAnalytics .Devi includere gli spazi pertinenti tra i nomi come mostrato; questi vengono sostituiti da lettere maiuscole o trattini bassi appropriati. |
canonical_name='DFA Analytics' |
description |
Una breve descrizione dell'API. Questo viene esposto nel servizio di rilevamento per descrivere l'API e, facoltativamente, può essere utilizzato anche per generare la documentazione come descritto in Generazione di librerie client. | description='Sample API for a simple game' |
documentation |
Facoltativo. L'URL in cui gli utenti possono trovare la documentazione su questa versione dell'API. Queste informazioni vengono visualizzate nella sezione "Scopri di più" di Explorer API. Evidenzia nella parte superiore della pagina Explorer API per consentire agli utenti di scoprire di più sul tuo servizio. | documentation='http://link_to/docs' |
hostname |
Il nome host dell'applicazione App Engine. Lo strumento a riga di comando di Endpoint Frameworks utilizza il valore specificato qui quando genera un documento Discovery o OpenAPI. Se non specifichi il nome host in questo campo, devi indicare il nome host nel campo application del file app.yaml oppure specificare l'ID progetto quando esegui il deployment dell'applicazione App Engine. |
hostname='your_app_id.appspot.com' |
issuers |
Facoltativo. Le configurazioni degli emittenti JWT personalizzati. Deve essere una mappatura del dizionario dai nomi degli emittenti agli oggetti endpoints.Issuer . |
issuers={"auth0": endpoints.Issuer("https://test.auth0.com", "https://test.auth0.com/.well-known/jwks.json")} |
name |
Obbligatorio. Il nome dell'API, che viene utilizzato come prefisso per tutti i metodi e i percorsi dell'API. Il valore name :
[a-z][a-z0-9]{0,39} , ovvero il nome deve iniziare con una lettera minuscola, il resto dei caratteri deve essere composto da lettere minuscole o numeri e la lunghezza massima è di 40 caratteri. |
name='yourApi' o name='yourapi' |
limit_definitions |
Facoltativo. Utilizzato per definire le quote per l'API. Consulta la sezione limit_definitions per ulteriori informazioni. | |
owner_domain |
Facoltativo. Il nome di dominio dell'entità proprietaria dell'API. Utilizzato insieme a owner_name per fornire suggerimenti per assegnare un nome corretto alla libreria client quando viene generata per questa API. Il percorso del pacchetto è il contrario di owner_domain e package_path , se fornito. Il valore predefinito è appid.apppost.com |
owner_domain='your-company.com' |
owner_name |
Facoltativo. Il nome della persona giuridica proprietaria dell'API. Utilizzati insieme a owner_domain per fornire suggerimenti per assegnare un nome corretto alla libreria client quando viene generata per questa API. |
owner_name='Your-Company' |
package_path |
Facoltativo. Viene utilizzato per definire ulteriormente l'ambito del "pacchetto" a cui appartiene questa API, con valori separati da / che specificano i raggruppamenti logici delle API.Ad esempio, se specifichi cloud/platform , il percorso della libreria client è impostato su cloud/platform/<ApiName> e il pacchetto della libreria client è impostato su cloud.plaform.<ApiName> . |
package_path='cloud/platform' |
scopes |
Se non viene fornito, il valore predefinito è l'ambito email (https://www.googleapis.com/auth/userinfo.email ), obbligatorio per OAuth. Se vuoi, puoi sostituire questo valore per specificare altri ambiti OAuth 2.0. Puoi anche eseguire l'override degli ambiti specificati qui per un determinato metodo API specificando ambiti diversi nel decorator @endpoints.method . Tuttavia, se definisci più di un ambito, tieni presente che il controllo dell'ambito viene superato se il token viene emesso per qualsiasi degli ambiti specificati. Per richiedere più ambiti, specifica una singola stringa con uno spazio tra ogni ambito. |
scopes=['ss0', 'ss1 and_ss2'] |
title |
Facoltativo. Il testo visualizzato in API Explorer come titolo dell'API ed esposto nei servizi di scoperta e directory. | title='My Backend API' |
version |
Obbligatorio. Specifica la versione di Cloud Endpoints. Questo valore viene visualizzato nel percorso dell'API. Se specifichi una stringa di versione compatibile con lo standard SemVer, nel percorso dell'API viene visualizzato solo il numero di versione principale quando esegui il deployment dell'API. Ad esempio, un'API denominata echo con versione 2.1.0 avrebbe un percorso simile a /echo/v2 . Se aggiorni l'API echo alla versione 2.2.0 ed esegui il deployment di una modifica compatibile con le versioni precedenti, il percorso rimane /echo/v2 . In questo modo puoi aggiornare il numero di versione dell'API quando apporti una modifica compatibile con le versioni precedenti senza interrompere i percorsi esistenti per i tuoi clienti. Tuttavia, se aggiorni l'API echo alla versione 3.0.0 (perché stai eseguendo il deployment di una modifica che provoca un errore), il percorso viene modificato in /echo/v3 . |
version='v1' o version='2.1.0' |
limit_definitions
Per definire le quote per la tua API,
specifica l'argomento facoltativo limit_definitions
per @endpoints.api
. A
configurare una quota, devi anche:
- Installa la versione 2.4.5 o successive della libreria Endpoints Frameworks.
- Aggiungi l'argomento
metric_costs
al decoratore del metodo per ogni metodo a cui vuoi applicare una quota.
Consulta Configurazione delle quote per tutti i passaggi necessari per impostare una quota.
Specifica un elenco di una o più istanze LimitDefinition
, simile al seguente:
quota_limits = [
endpoints.LimitDefinition(
"name",
"Display name",
limit)
]
Ogni istanza LimitDefinition
deve avere i seguenti valori:
Elemento | Descrizione |
---|---|
nome | Il nome del contatore di richieste API. In genere, si tratta del tipo di richiesta (ad esempio, "read-requests" o "write-requests") che identifica in modo univoco la quota. |
Nome visualizzato | Il testo visualizzato per identificare la quota sulla Scheda Quote nella sezione Endpoint > Servizi. Questo testo viene visualizzato anche per i consumatori della tua API nella pagina Quote di IAM e amministrazione e API e servizi. Il nome visualizzato deve contenere al massimo 40 caratteri. Per motivi di leggibilità, il testo "al minuto per progetto" viene aggiunto automaticamente al nome visualizzato nelle pagine Quote. Per mantenere la coerenza con i nomi visualizzati dei servizi Google elencati nella delle quote delle pagine visualizzate dai consumer della tua API, consigliamo quanto segue per nome visualizzato:
|
limite | Un valore intero che corrisponde al numero massimo di richieste al minuto per consumer progetto per la quota. |
Esempio
quota_limits = [ endpoints.LimitDefinition('read-requests', 'Read Requests', 1000), endpoints.LimitDefinition('list-requests', 'List Requests', 100), endpoints.LimitDefinition('write-requests', 'Write Requests', 50) ] @endpoints.api(name='bookstore', version='v1', limit_definitions=quota_limits)
ID client e segmenti di pubblico consentiti
Per l'autenticazione OAuth2, un token OAuth2 viene emesso per un ID client specifico,
il che significa che questo ID client può essere utilizzato per limitare l'accesso alle tue API.
Quando registri app per Android nella console Google Cloud,
devi creare un ID client. Questo ID client è quello che richiede un
token OAuth2 a Google a scopo di autenticazione. Quando l'API di backend è protetta
dall'autenticazione, un token di accesso OAuth2 viene inviato e aperto da Endpoints Frameworks
per App Engine, l'ID client viene estratto dal token e poi l'ID viene confrontato con l'elenco di ID client accettabili dichiarati dal backend
(l'elenco allowed_client_ids
).
L'elenco allowed_client_ids
deve essere composto da tutti
gli ID client ottenuti tramite la console Google Cloud per il tuo sito web,
Android,
e altre app client. Ciò significa che i client devono essere noti al momento della compilazione dell'API. Se specifichi un elenco vuoto, nessun client potrà accedere all'API.
Tieni presente che in ogni metodo API in cui vuoi verificare la corretta autenticazione,
devi chiamare endpoints.get_current_user()
.
Per ulteriori informazioni, consulta la sezione Autenticazione degli utenti.
Se utilizzi l'argomento allowed_client_ids
e vuoi testare le chiamate autenticate alla tua API utilizzando Explorer API, devi fornire l'ID client nell'elenco di allowed_client_ids
specificando la costante endpoints.API_EXPLORER_CLIENT_ID
. Tieni presente che se allowed_client_ids
contiene solo endpoints.API_EXPLORER_CLIENT_ID
e esegui il deployment dell'API, quest'ultima è ancora rilevabile e accessibile pubblicamente in Explorer API.
Informazioni sui segmenti di pubblico
L'elenco allowed_client_ids
protegge l'API di backend da client non autorizzati. Ma è necessaria ulteriore protezione per proteggere i clienti,
il token di autenticazione funziona solo per l'API di backend prevista. Per Android
questo meccanismo è l'argomento audiences
, in cui specifichi
l'ID client dell'API backend.
Tieni presente che quando crei un progetto della console Google Cloud, viene creato e denominato automaticamente un ID client predefinito per l'utilizzo da parte del progetto. Quando carichi la tua API di backend in App Engine, viene utilizzato questo ID client. Questo è il web indicato nell'autenticazione dell'API.
Emittente del token di autenticazione di terze parti
Se la tua applicazione accetta token di autenticazione che non sono token ID Google
e sono emessi da emittenti di terze parti, devi impostare correttamente gli argomenti audiences
e
issuers
in @endpoints.api
per fornire le informazioni sugli
emittenti di terze parti. Ad esempio:
@endpoints.api(
audiences={'auth0': ['aud-1.auth0.com', 'aud-2.auth0.com']},
issuers={'auth0': endpoints.Issuer('https://test.auth0.com',
'https://test.auth0.com/.well-known/jwks.json')})
class GreetingApi(remote.Service):
Definizione di un metodo API (@endpoints.method
)
Puoi impostare le impostazioni audiences
, scopes
e allowed_client_ids
per l'intera API utilizzando @endpoints.api
o per un metodo utilizzando @endpoints.method
. Se queste impostazioni sono specificate sia a livello di API che di
a livello di metodo, l'impostazione del metodo ha la precedenza.
Per creare un metodo nell'API, decora il metodo Python corrispondente con @endpoints.method
, fornendo gli argomenti per configurare l'utilizzo del metodo. Ad esempio, puoi specificare quale richiesta e risposta Message
classi da utilizzare.
Gli argomenti disponibili sono elencati nella seguente tabella:
@endpoints.method argomenti |
Descrizione | Esempio |
---|---|---|
allowed_client_ids |
Questa impostazione sostituisce l'attributo equivalente specificato in @endpoints.api . Per saperne di più, vedi ID cliente e segmenti di pubblico consentiti. |
['1-web-apps.apps.googleusercontent.com', '2-android-apps.apps.googleusercontent.com'] |
api_key_required |
Facoltativo. Utilizzato per limitare l'accesso alle richieste che forniscono una chiave API. | api_key_required=True |
audiences |
Sostituisce l'argomento equivalente specificato in @endpoints.api . Per saperne di più, vedi ID cliente e segmenti di pubblico consentiti. |
['1-web-apps.apps.googleusercontent.com'] |
metric_costs |
Facoltativo. Indica che il metodo ha un limite di quota. Questo è un dizionario con le seguenti coppie chiave-valore:
|
metric_costs={'read-requests': 1} |
http_method |
Il metodo HTTP da utilizzare. Se non imposti questa opzione, viene utilizzato 'POST' per impostazione predefinita. |
'GET' |
name |
Un nome alternativo per questo metodo. Il valore name :
|
'yourApi' |
path |
Il percorso URI per accedere a questo metodo. Se non lo imposti, viene utilizzato il nome del metodo Python. Se prevedi di aggiungere la gestione delle API, non includere una barra finale nel percorso. | 'yourapi/path' |
Classe Request Message |
La classe Google Protocol RPC Request Message da utilizzare nella chiamata al metodo. In alternativa, puoi indicare il nome della classe. |
YourRequestClass |
Classe Response Message |
La classe Google Protocol RPC Response Message da utilizzare nella chiamata al metodo. In alternativa, puoi fornire il nome del corso. |
YourResponseClass |
Utilizzo di ResourceContainer
per gli argomenti del percorso o della stringa di query
Se la richiesta contiene argomenti relativi a percorso o stringa di query, non puoi utilizzare una semplice
Message
corso come descritto in
Crea l'API.
Devi invece utilizzare una classe ResourceContainer
, come segue:
Definisci una classe
Message
che contenga tutti gli argomenti passati nel corpo della richiesta. Se il corpo della richiesta non contiene argomenti, non è necessario definire una classeMessage
: utilizza semplicementemessage_types.VoidMessage
. Ad esempio:Definisci un
ResourceContainer
con la classeMessage
che hai definito nel passaggio precedente come primo parametro. Specifica il percorso e la stringa di query nei parametri successivi. Ad esempio:dove il primo argomento è la classe
Message
per i dati nel corpo della richiesta etimes
è un numero previsto nel percorso o nella stringa di query che accompagna la richiesta.Fornisci
ResourceContainer
al metodo che gestisce la richiesta, nel il primo parametro che sostituisce la classeMessage
della richiesta che altrimenti sarebbe in quella località. Questo snippet mostra siaResourceContainer
siaendpoints.method
:Aggiungi il parametro
path
come mostrato per includere la tua API.Se
ResourceContainer
ha un argomento richiesto, è necessaria una richiesta del client includilo in una stringa di query (ad esempio,yourApi?times=2
) o Percorso dell'URL (ad es.yourApi/2
). Tuttavia, affinché l'API riceva valore di un argomento utilizzando il percorso dell'URL, devi anche aggiungere il nome dell'argomento a il percorso dell'API come mostrato per l'argomento{times}
inpath='yourApi/{times}
.