Le annotazioni di Endpoints Frameworks descrivono l'API la configurazione, i metodi, i parametri e altri dettagli fondamentali che definiscono le proprietà e il comportamento dell'endpoint.
Consulta Scrittura e annotazione del codice per informazioni sull'aggiunta di annotazioni utilizzando un progetto Maven. Gli elementi Maven App Engine Cloud Endpoints vengono forniti per creare e compilare un'API di backend e generare una libreria client.
L'annotazione che specifica la configurazione e il comportamento nell'intera API
(riguarda tutte le classi esposte nell'API e tutti i loro metodi esposti) è
@Api
Tutti i metodi pubblici, non statici e non bridge di una classe annotata con @Api
sono
esposte nell'API pubblica.
Se hai bisogno di una configurazione API speciale per un determinato metodo, puoi facoltativamente utilizzare @ApiMethod
per impostare la configurazione in base al metodo.
Configuri queste annotazioni impostando vari attributi, come mostrato nell'
le seguenti tabelle.
@Api
: annotazioni con ambito API
L'annotazione
@Api
configura l'intera API e si applica a tutti i metodi pubblici di una classe
salvo diversa indicazione da @ApiMethod
.
Per eseguire l'override di una determinata annotazione @Api
per una classe specifica all'interno di un'area,
un'API, consulta
@ApiClass
e
@ApiReference
.
Importazioni obbligatorie
Per utilizzare questa funzionalità, è necessaria la seguente importazione:
import com.google.api.server.spi.config.Api;
Attributi
Attributi @API | Descrizione | Esempio |
---|---|---|
audiences |
Obbligatorio se la tua API richiede l'autenticazione e se supporti i client Android. Per saperne di più, consulta ID cliente e segmenti di pubblico. | audiences = {"1-web-apps.apps.googleusercontent.com", "2-web-apps.apps.googleusercontent.com"} |
apiKeyRequired |
Facoltativo. Utilizzato per limitare l'accesso alle richieste che forniscono una chiave API. | apiKeyRequired = AnnotationBoolean.TRUE |
authenticators |
Obbligatorio se l'API si autentica utilizzando Firebase, Auth0 o account di servizio. Questo attributo non è obbligatorio se la tua API si autentica utilizzando token ID Google. Puoi impostare questa opzione a livello di API o a livello di singolo metodo. Impostalo su {EspAuthenticator.class} oppure puoi scrivere il tuo autenticatore personalizzato, come descritto in Interface Authenticator. |
authenticators = {EspAuthenticator.class} |
backendRoot |
Deprecato. Per pubblicare l'API da un percorso diverso, modifica url-pattern nella sezione EndpointsServlet nel file web.xml . |
<url-pattern>/example-api/*</url-pattern> |
canonicalName |
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 backend continua a utilizzare il valore specificato nella proprietà name .Ad esempio, se l'API name è impostata su dfaanalytics, potresti 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; questi vengono sostituiti da caratteri cammelli o trattini bassi appropriati. |
canonicalName = "DFA Analytics:" n |
clientIds |
Obbligatorio se l'API utilizza l'autenticazione. Elenco di ID client per i client autorizzati a richiedere i token. Per saperne di più, consulta ID cliente e segmenti di pubblico. | clientIds = {"1-web-apps.apps.googleusercontent.com", "2-android-apps.apps.googleusercontent.com"} |
defaultVersion |
Specifica se viene utilizzata una versione predefinita nel caso in cui non ne venga specificata nessuna nell'attributo version . |
defaultVersion = AnnotationBoolean.TRUE |
description |
Una breve descrizione dell'API. Viene esposto nel servizio di rilevamento per descrivere l'API e può essere utilizzato anche per generare documentazione. | description = "Sample API for a simple game" |
documentationLink |
L'URL in cui gli utenti possono trovare la documentazione relativa a questa versione dell'API. Questa informazione viene visualizzata nell'evidenziazione "Scopri di più" nella parte superiore della pagina di API Explorer per consentire agli utenti di conoscere il tuo servizio. | documentationLink = "http://link_to/docs" |
issuers |
Le configurazioni personalizzate dell'emittente JWT. | issuers = { @ApiIssuer(name = "auth0", issuer = "https://test.auth0.com/authorize", jwksUri = "https://test.auth0.com/.well-known/jwks.json") } |
issuerAudiences |
Segmenti di pubblico per singoli emittenti. | issuerAudiences = { @ApiIssuerAudience(name = "auth0", audiences = {"aud-1.auth0.com", "aud-2.auth0.com"}) } |
limitDefinitions |
Facoltativo. Utilizzato per definire le quote per l'API. Vedi @ApiLimitMetric . |
limitDefinitions = { @ApiLimitMetric(name = "read-requests", displayName = "Read requests", limit = 1000)} |
name |
Il nome dell'API, che viene utilizzato come prefisso per tutti i metodi e i percorsi dell'API. Il valore name :
name , viene utilizzato il valore predefinito myapi . |
name = "foosBall" |
namespace |
Configura lo spazio dei nomi per i client generati. Consulta @ApiNamespace . |
namespace=@ApiNamespace(ownerDomain="your-company.com", ownerName="YourCo", packagePath="cloud/platform" ) |
root |
Deprecato. Per pubblicare l'API da un percorso diverso, modifica url-pattern nella sezione EndpointsServlet nel file web.xml . |
<url-pattern>/example-api/*</url-pattern> |
scopes |
Se non viene specificato, il valore predefinito è l'ambito email (https://www.googleapis.com/auth/userinfo.email ), obbligatorio per OAuth. Se vuoi, puoi eseguire l'override di questa impostazione per specificare altri ambiti OAuth 2.0. Tuttavia, se definisci più di un ambito, tieni presente che il controllo dell'ambito viene superato se il token viene eseguito per qualsiasi degli ambiti specificati. Per richiedere più ambiti, deve essere specificato un singolo String con uno spazio tra ogni ambito. Per eseguire l'override degli ambiti specificati qui per un determinato metodo API, specifica ambiti diversi nell'annotazione @ApiMethod . |
scopes = {"ss0", "ss1 and_ss2"} |
title |
Il testo visualizzato in Explorer API come titolo dell'API e visibile nei servizi di rilevamento e directory. | title = "My Backend API" |
transformers |
Specifica un elenco di transformer personalizzati. Tieni presente che è preferibile un'annotazione alternativa (@ApiTransformer ). Questo attributo è stato sostituito da @ApiTransformer . |
transformers = {BazTransformer.class} |
version |
Specifica la versione dell'endpoint. Se non fornisci questo indirizzo, viene utilizzato il valore predefinito v1 . |
version = "v2" |
Annotazione di esempio@Api
Questa annotazione è posizionata prima della definizione della classe:
ID cliente e segmenti di pubblico
Per l'autenticazione OAuth2, viene emesso un token OAuth2 per un ID client specifico.
puoi utilizzare l'ID client per limitare l'accesso alle API.
Quando registri un'applicazione Android nella console Google Cloud,
devi creare un ID client. Questo ID client è quello che richiede un OAuth2
di Google ai fini dell'autenticazione. Quando l'API backend è protetta
per autorizzazione, un token di accesso OAuth2 viene inviato e aperto da Endpoints
l'ID client viene estratto dal token e poi l'ID viene confrontato con
elenco di ID client dichiarati accettabili dal backend (l'elenco clientIds
).
Se vuoi che l'API Endpoints autentichi i chiamanti, devi
per fornire un elenco di clientIds
a cui è consentito richiedere token. Questo elenco
dovrebbe essere composto da tutti gli ID cliente che hai ottenuto tramite
Console Google Cloud
per i tuoi client web o Android. Ciò significa che
i client devono essere noti
al momento della creazione dell'API. Se specifichi un elenco vuoto, {}
,
nessun client può accedere ai metodi protetti da Auth.
Se utilizzi l'attributo clientIds
e vuoi testare le chiamate autenticate alle
utilizzando l'Explorer API di Google, devi fornire il relativo ID client nel
elenco di clientIds
: il valore da utilizzare è
com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID
.
Informazioni sui segmenti di pubblico
L'elenco clientIds
protegge l'API di backend da client non autorizzati. Ma
è necessaria un'ulteriore protezione per proteggere i client in modo che il token di autenticazione
funziona solo per l'API backend prevista. Per i client Android, questo meccanismo è l'attributo audiences
, in cui specifichi l'ID client dell'API di backend.
Tieni presente che quando crei un progetto nella console Google Cloud, un client predefinito L'ID viene creato automaticamente e denominato per essere utilizzato dal progetto. Quando carichi l'API backend in App Engine, utilizza questo ID client. Questo è il ID client web menzionato in Autenticazione API.
@ApiMethod
: annotazioni con ambito a livello di metodo
L'annotazione
@ApiMethod
viene utilizzato per fornire una configurazione API diversa da quella predefinita fornita
@Api
o @ApiClass
annotazioni. Tieni presente che è facoltativo: tutti sono pubblici,
i metodi non statici e non bridge in una classe con un'annotazione @Api
sono
esposte nell'API, indipendentemente dal fatto che abbiano o meno un'annotazione @ApiMethod
.
Gli attributi in questa annotazione ti consentono di configurare i dettagli
di un singolo metodo API. Se lo stesso attributo viene specificato in @Api
e
@ApiMethod
, @ApiMethod
override.
Importazioni richieste
Per utilizzare questa funzionalità, sono necessarie le seguenti importazioni:
import com.google.api.server.spi.config.AnnotationBoolean;
import com.google.api.server.spi.config.ApiMethod;
import com.google.api.server.spi.config.ApiMethod.HttpMethod;
Attributi
Attributi @apiMethod | Descrizione | Esempio |
---|---|---|
apiKeyRequired |
Facoltativo. Utilizzato per limitare l'accesso alle richieste che forniscono una chiave API. | apiKeyRequired = AnnotationBoolean.TRUE |
audiences |
Forniscilo se vuoi eseguire l'override della configurazione in @API . Per saperne di più, consulta ID cliente e segmenti di pubblico. |
audiences = {"1-web-apps.apps.googleusercontent.com", "2-web-apps.apps.googleusercontent.com"} |
authenticators |
Obbligatorio se l'API esegue l'autenticazione tramite Firebase, Auth0 o account di servizio e non hai impostato questo attributo a livello di API. Questo attributo non è obbligatorio se la tua API si autentica utilizzando token ID Google. Impostalo su {EspAuthenticator.class} oppure puoi scrivere il tuo autenticatore personalizzato, come descritto in Interface Authenticator |
authenticators = {EspAuthenticator.class} |
clientIds |
Elenco di ID client per i client autorizzati a richiedere i token. Obbligatorio se l'API utilizza l'autenticazione. | clientIds = {"1-web-apps.apps.googleusercontent.com", "2-android-apps.apps.googleusercontent.com"} |
httpMethod |
Il metodo HTTP da utilizzare. Se non imposti questa opzione, viene scelto un valore predefinito in base al nome del metodo. | httpMethod = HttpMethod.GET |
issuerAudiences |
Forniscilo se vuoi eseguire l'override della configurazione in @Api . |
issuerAudiences = { @ApiIssuerAudience(name = "auth0", audiences = {"aud-1.auth0.com", "aud-2.auth0.com"}) } |
metricCosts |
Facoltativo. Indica che il metodo ha un limite di quota. Assegni l'annotazione @ApiMetricCost a metricCosts . Devi anche specificare l'attributo limitDefinitions per definire la quota nell'annotazione @Api . L'@ApiMetricCost annotazione prevede i seguenti attributi:
|
metricCosts = { @ApiMetricCost(name = read-requests", cost = 1) } |
name |
Il nome di questo metodo nella libreria client generata. Viene automaticamente preceduto dal nome dell'API per creare un nome univoco per il metodo. Il valore name :
name , viene utilizzato il valore predefinito myapi . |
name = "foosBall.list" |
path |
Il percorso dell'URI da utilizzare per accedere a questo metodo. Se non imposti questa opzione, viene utilizzato un percorso predefinito basato sul nome del metodo Java. Se prevedi di aggiungere la gestione delle API, non includere una barra finale nel percorso. | path = "foos" |
scopes |
Specifica uno o più ambiti OAuth 2.0, uno dei quali è obbligatorio per chiamare questo metodo. Se imposti scopes per un metodo, l'impostazione nell'annotazione @Api viene ignorata. Se definisci più di un ambito, tieni presente che il controllo dell'ambito viene superato se il token viene generato per qualsiasi degli ambiti specificati. Per richiedere più ambiti, specifica un singolo String con uno spazio tra ogni ambito. |
scopes = {"ss0", "ss1 and_ss2"} |
Esempio di annotazione @ApiMethod
Questa annotazione viene inserita prima della definizione del metodo all'interno di una classe:
I metodi che prendono un'entità come parametro devono usare HttpMethod.POST
(per le operazioni di inserimento) o HttpMethod.PUT
(per le operazioni di aggiornamento):
@Named
L'annotazione @Named
è obbligatoria per tutti i parametri di tipo non entità passati a
lato server. Questa annotazione indica il nome del parametro nel
che viene inserita qui. Un parametro non annotato con @Named
con l'intero oggetto della richiesta.
Importazioni obbligatorie
Per utilizzare questa funzionalità, sono necessarie le seguenti importazioni:
import javax.inject.Named;
Questo esempio mostra l'utilizzo di @Named
:
dove @Named
specifica che solo il parametro id
viene inserito
nella richiesta.
@ApiLimitMetric
Questa sezione descrive le annotazioni necessarie per definire quote per l'API. Consulta Configurazione delle quote per tutti i passaggi necessari per configurare una quota.
Assegni l'annotazione @ApiLimitMetric
a limitDefinitions
attributo del
Annotazioni con ambito API.
Devi inoltre aggiungere @ApiMetricCost
al
@ApiMethod
annotazioni
per ciascun metodo a cui vuoi applicare una quota.
Importazioni obbligatorie
Per utilizzare questa funzionalità, è necessaria la seguente importazione:
import com.google.api.server.spi.config.ApiLimitMetric;
Attributi
Attributi @ApiLimitMetric
|
Descrizione |
---|---|
nome | Il nome della quota. Tipicamente, si tratta del tipo di richiesta (ad esempio, "richieste di lettura" o "richieste di scrittura") che identifica in modo univoco la quota |
displayName | Il testo visualizzato per identificare la quota nella scheda Quote
su Endpoint > la pagina Servizi della console Google Cloud. 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 essere al massimo 40
caratteri. Ai fini della leggibilità, il testo "al minuto per progetto" sono aggiunto automaticamente al nome visualizzato nella scheda Quote pagine. Per mantenere la coerenza con i nomi visualizzati dei servizi Google elencati nella nelle pagine di quote visualizzate dai consumatori della tua API, ti consigliamo per il nome visualizzato:
|
limite | Un valore intero che corrisponde al numero massimo di richieste al minuto per progetto consumer per la quota. |
Esempio
limitDefinitions = {
@ApiLimitMetric(
name = "read-requests",
displayName = "Read requests",
limit = 1000),
@ApiLimitMetric(
name = "write-requests",
displayName = "Write requests",
limit = 50),
}
@ApiNamespace
La
@ApiNamespace
fa sì che le librerie client generate abbiano lo spazio dei nomi che
anziché un valore predefinito creato durante la generazione della libreria client.
Per impostazione predefinita, se non usi questa annotazione, lo spazio dei nomi utilizzato è
invertito di your-project-id.appspot.com
. In altre parole, il percorso del pacchetto
com.appspot.your-project-id.yourApi
.
Puoi modificare lo spazio dei nomi predefinito fornendo l'annotazione @ApiNamespace
all'interno dell'annotazione @Api
:
Imposta l'attributo ownerDomain
sul dominio della tua azienda e ownerName
sul nome della tua azienda, ad esempio your-company.com
. L'inverso
ownerDomain
viene utilizzato per il percorso del pacchetto: com.your-company.yourApi
.
Facoltativamente, puoi utilizzare l'attributo packagePath
per fornire ulteriori criteri di definizione dell'ambito.
Ad esempio, se imposti packagePath
su cloud
, il percorso del pacchetto utilizzato nella specifica
la libreria client è com.your-company.cloud.yourApi
. Puoi aggiungere altri valori
al percorso del pacchetto fornendo il delimitatore /
: packagePath="cloud/platform"
.
@Nullable
Questa annotazione indica che un parametro di un metodo è facoltativo (e
quindi un parametro di query). @Nullable
può essere utilizzato solo con @Named
parametri.
@ApiClass
In un
API multiclasse,
puoi usare @ApiClass
per specificare proprietà diverse per una determinata classe,
eseguendo l'override delle proprietà equivalenti nella configurazione @Api
. Consulta
Utilizzare @ApiClass
per le proprietà che possono differire tra le classi
per una descrizione completa dell'annotazione.
@ApiReference
In un'API multiclasse, puoi utilizzare @ApiReference
per fornire un metodo alternativo di ereditarietà delle annotazioni. Per una descrizione completa di questa annotazione, consulta Utilizzare l'eredità @ApiReference
.
@ApiResourceProperty
@ApiResourceProperty
fornisce il controllo su come le proprietà delle risorse vengono esposte nell'API.
Puoi utilizzarlo in un getter o un setter di proprietà per omettere la proprietà da una
risorsa API. Puoi anche utilizzarlo sul campo stesso, se è privato, per esporlo nell'API. Puoi utilizzare questa annotazione anche per modificare il nome di una proprietà in una risorsa API.
Importazioni obbligatorie
Per utilizzare questa funzionalità, sono necessarie le seguenti importazioni:
import com.google.api.server.spi.config.ApiResourceProperty;
import com.google.api.server.spi.config.AnnotationBoolean;
Attributi
Attributi @ApiResourceProperty | Descrizione | Esempio |
---|---|---|
ignored |
Se impostato su AnnotationBoolean.TRUE , la proprietà viene omessa. Se non è specificata o impostata su AnnotationBoolean.FALSE , la proprietà non viene omessa. |
@ApiResourceProperty(ignored = AnnotationBoolean.TRUE) |
name |
Se fornito, specifica il nome della proprietà da esporre nell'API. | @ApiResourceProperty(name = "baz") |
Esempio di lezione con @ApiResourceProperty
Lo snippet seguente mostra una classe con getter di proprietà annotati con
@ApiResourceProperty
:
Nello snippet di codice precedente, @ApiResourceProperty
viene applicato al getter getBin
per la proprietà bin
, con l'impostazione dell'attributo ignored
che indica a Endpoints Frameworks di omettere questa proprietà nella risorsa API.
@ApiResourceProperty
viene applicato anche al campo privato visible
, che
non ha getter o setter. L'utilizzo di questa annotazione espone il campo come
nella risorsa API.
Nello stesso snippet, viene applicato anche @ApiResourceProperty
a un getter diverso, getFoobar
, che restituisce un valore di proprietà
per la proprietà foobar
. L'attributo name
in questo
l'annotazione indica a Endpoints Frameworks di modificare il nome della proprietà in
la risorsa API. Il valore della proprietà non è cambiato.
Nello snippet di esempio precedente, la rappresentazione JSON di un oggetto Resp
è simile a questo:
{"baz": "foobar", "visible": "nothidden"}
@ApiTransformer
L'annotazione @ApiTransformer
personalizza il modo in cui un tipo viene esposto in Endpoints tramite
la trasformazione in un altro tipo e viceversa. (il trasformatore specificato
deve essere un'implementazione di com.google.api.server.spi.config.Transformer
.)
L'utilizzo dell'annotazione @ApiTransformer
in una classe è il modo migliore per specificare
un Transformer. Tuttavia, in alternativa puoi specificare
trasformatore nell'attributo transformer
dell'oggetto
@Api
.
Importazioni obbligatorie
Per utilizzare questa funzionalità, è necessaria la seguente importazione:
import com.google.api.server.spi.config.ApiTransformer;
Esempio di lezione con @ApiTransformer
Il seguente snippet mostra un corso annotato con @ApiTransformer
:
Questa classe viene trasformata dalla classe BarTransformer
.
Esempio di classe transformer di Endpoints
Lo snippet seguente mostra una classe Transformer di esempio denominata BarTransformer
.
Questo è il trasformatore a cui fa riferimento @ApiTransformer
nello snippet precedente:
Supponendo che esista un oggetto con una proprietà bar
di tipo Bar
, senza il
trasformatore precedente, l'oggetto è rappresentato come:
{"bar": {"x": 1, "y": 2}}
Con il trasformatore, l'oggetto è rappresentato come segue:
{"bar": "1,2"}