Eccezioni e codici di stato HTTP

Questa pagina elenca le eccezioni fornite dalla libreria endpoints, nonché i codici di stato HTTP supportati da Cloud Endpoints Frameworks.

In molte situazioni, ti consigliamo di utilizzare i codici di stato HTTP comuni per indicare il buon esito o il fallimento della richiesta API di un utente. Ad esempio, se un utente sta tentando di recuperare un'entità inesistente, potresti inviare un codice di stato HTTP 404 per indicare che non esiste alcuna entità con ID: entityId.

Puoi inviare codici di stato HTTP comuni lanciando un'eccezione fornita dalla libreria endpoints come segue:

throw new NotFoundException(user.getEmail());

Eccezione fornite da Endpoints Frameworks

Endpoints Frameworks fornisce le seguenti eccezioni, corrispondenti a codici di stato HTTP specifici:

Eccezione Codice di stato HTTP corrispondente
com.google.api.server.spi.response.BadRequestException HTTP 400
com.google.api.server.spi.response.UnauthorizedException HTTP 401
com.google.api.server.spi.response.ForbiddenException HTTP 403
com.google.api.server.spi.response.NotFoundException HTTP 404
com.google.api.server.spi.response.ConflictException HTTP 409
com.google.api.server.spi.response.InternalServerErrorException HTTP 500
com.google.api.server.spi.response.ServiceUnavailableException HTTP 503

Codici di stato HTTP supportati

I framework Cloud Endpoints supportano un sottoinsieme di codici di stato HTTP nelle risposte dell'API. La seguente tabella descrive i codici supportati.

Codici di stato HTTP Assistenza
HTTP 2xx In genere, HTTP 200 viene assunto dai framework di endpoint se il metodo API restituisce un valore corretto.
Se il tipo di risposta del metodo API è void o il valore restituito del metodo API è null, viene impostato HTTP 204.
HTTP 3xx I codici HTTP 3xx non sono supportati. L'utilizzo di codici HTTP 3xx comporta una risposta HTTP 404.
HTTP 4xx Sono supportati solo i seguenti codici HTTP 4xx:
  • 400
  • 401
  • 403
  • 404
  • 409
  • 410
  • 412
  • 413
Qualsiasi altro codice HTTP 4xx viene restituito come errore 404, ad eccezione di quanto segue:
  • 405 viene restituito come 501
  • 408 viene restituito come 503
Errori HTTP 5xx Tutti i codici di stato HTTP 5xx vengono convertiti in HTTP 503 nella risposta del client.

Creare classi di eccezione personalizzate

Se vuoi creare altre classi di eccezione per altri codici di stato HTTP, devi creare una sottoclasse di com.google.api.server.spi.ServiceException. Lo snippet seguente mostra come creare una classe di eccezione che rappresenti un codice stato HTTP 408:

import com.google.api.server.spi.ServiceException;

// Exceptions must inherit from ServiceException
public class RequestTimeoutException extends ServiceException {
  public RequestTimeoutException(String message) {
    super(408, message);
  }
}

Utilizzo di codici di stato HTTP non supportati

È possibile utilizzare codici di stato HTTP non presenti nell'elenco supportato precedente. Tieni presente che, se decidi di farlo, potrebbero esserci conseguenze indesiderate per le librerie client che accedono all'API. Per utilizzare codici di errore non supportati, crea la tua classe di eccezione, come descritto nella sezione precedente, e aggiungi un nuovo parametro di inizializzazione del servlet enableExceptionCompatibility a EndpointsServlet:

  <servlet>
    <servlet-name>com.google.api.server.spi.EndpointsServlet</servlet-name>
    <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
    <init-param>
      <param-name>services</param-name>
      <param-value>...</param-value>
    </init-param>
    <init-param>
      <param-name>enableExceptionCompatibility</param-name>
      <param-value>true</param-value>
    </init-param>
  </servlet>