Tipi di parametri e tipi restituiti supportati

Questa pagina elenca i tipi di dati che puoi utilizzare come tipi di parametri API nel percorso o parametri di ricerca per i metodi di un'API di backend e i tipi che puoi utilizzare come tipi di ritorno dei metodi o tipi di corpo della richiesta.

Tipi supportati per i parametri di percorso e query

Di seguito sono riportati i tipi supportati per percorso e parametro di query:

  • java.lang.String
  • java.lang.Boolean e boolean
  • java.lang.Integer e int
  • java.lang.Long e long
  • java.lang.Float e float
  • java.lang.Double e double
  • java.util.Date
  • com.google.api.server.spi.types.DateAndTime
  • com.google.api.server.spi.types.SimpleDate
  • Qualsiasi enum
  • Qualsiasi array o java.util.Collection dei tipi elencati qui. Gli array o le raccolte di altri tipi non sono supportati.

Per specificare un parametro come percorso o parametro di query, annota il parametro con @Named. Ad esempio:

public Resource get(@Named("id") int id) { … }

Parametri del percorso

I parametri del percorso sono i parametri del metodo inclusi nella proprietà path dell'annotazione @ApiMethod. Se path non è specificato, tutti i parametri non annotati con @Nullable o @DefaultValue vengono aggiunti automaticamente al percorso come parametri del percorso. Ad esempio:

public Resource get(@Named("id") int id) { … }

Per aggiungere manualmente un parametro a path, includi il nome del parametro tra i segni {} nel percorso. I parametri aggiunti manualmente a path non possono essere annotati con @Nullable o @DefaultValue. Ad esempio:

@ApiMethod(path = "resources/{id}")
public Resource get(@Named("id") int id) { … }

I parametri di ricerca

I parametri di query sono i parametri del metodo non inclusi nella proprietà path dell'annotazione @ApiMethod. Tieni presente che i parametri facoltativi, ovvero quelli annotati con @Nullable o @DefaultValue, non vengono mai aggiunti automaticamente a path, quindi diventano automaticamente parametri di ricerca se non viene specificato alcun path. Ad esempio:

public Resource get(@Named("id") @Nullable int id) { … }

Se path è specificato, puoi rendere parametri come parametri di ricerca non includendoli in path. Ad esempio:

@ApiMethod(path = "resources")
public Resource get(@Named("id") int id) { … }

Tipi inseriti

I tipi inseriti sono quelli che ricevono un trattamento speciale da parte di Cloud Endpoints Frameworks. Se un tipo di questo tipo viene utilizzato come parametro del metodo, non viene reso parte dell'API. ma viene compilato da Endpoint Framework.

I tipi inseriti sono i seguenti:

  • com.google.appengine.api.users.User
  • javax.servlet.http.HttpServletRequest
  • javax.servlet.ServletContext

Tipi di entità

Nella documentazione di Endpoints Frameworks, i tipi di entità sono sinonimi di Java Bean. Le classi definite per l'utilizzo nell'API devono:

  • Avere un costruttore pubblico che non accetta argomenti.
  • Controlla l'accesso alle proprietà private utilizzando getter e setter. Inoltre, ogni setter deve utilizzare un solo parametro.

In genere i tipi di entità implementano anche Serializable, ma questo non è un requisito per l'utilizzo di Endpoints Frameworks.

Non utilizzare l'annotazione @Named per i parametri del tipo di entità.

Il corpo della richiesta

Quando passi un tipo di entità come parametro in un metodo, le proprietà nel tipo di entità vengono mappate ai campi JSON nel corpo della richiesta. I metodi devono contenere un solo parametro del tipo di entità. Ad esempio:

public Resource set(Resource resource) { … }

In un metodo puoi includere parametri di tipo non entità e un parametro di tipo di entità. Ad esempio:

@ApiMethod(name = "echo")
public Message echo(Message message, @Named("n") @Nullable Integer n) { … }

Nell'esempio precedente, le proprietà nel parametro message sono mappate ai campi JSON nel corpo della richiesta. L'annotazione @Nullable indica che il parametro n è facoltativo, perciò viene passato come parametro di query.

L'oggetto risposta

Il valore restituito dal metodo deve essere uno dei seguenti:

  • Un tipo di entità
  • Un tipo generico
  • CollectionResponse (com.google.api.server.spi.response.CollectionResponse) o una sottoclasse di CollectionResponse

I campi JSON nell'oggetto risposta sono mappati dalle proprietà nel valore restituito.

Effetto di @ApiTransformer sui tipi

Se utilizzi @ApiTransformer, devi sapere in che modo il tipo viene influenzato dalla trasformazione.

@ApiTransformer e tipi di parametri

Quando viene utilizzato un @ApiTransformer, il fatto che il parametro del metodo risultante sia considerato un tipo di parametro dipende dal risultato della trasformazione, non dal tipo originale. Se un tipo viene trasformato in un tipo di parametro, il parametro del metodo viene considerato un parametro API e deve essere annotato con @Named.

@ApiTransformer e tipi di entità

Allo stesso modo, il fatto che un parametro del metodo o un tipo restituito venga considerato o meno un tipo di entità dipende dal risultato della trasformazione, non dal tipo originale. Se un tipo viene trasformato in un tipo di entità, può essere utilizzato come tipo restituito e, se usato come parametro del metodo, non può essere annotato con @Named poiché è considerato un tipo di entità.

@ApiTransformer e tipi inseriti

I tipi inseriti non sono interessati da un valore @ApiTransformer. Un parametro del metodo viene considerato un tipo inserito solo se il tipo originale non trasformato è un tipo inserito.