Questo progetto mostra come implementare un servizio rest attraverso Spring Boot seguendo le linee guida canoniche. Vengono affrontati:
Le 4 operazione della persistenza Create, Read, Update e Delete (CRUD) sono mappate rispettivamente sui seguenti 4 metodi HTTP:
- POST
- GET
- PUT
- DELETE
Per implementare un servizio basta creare un controller annotandolo con @RestController
annotando i vari metodi come in com.mdev.restws.br.controller.AppController
.
Relativamente alle Create la richiesta porta all'interno del body l'entità da aggiungere in formato JSON. La Read può essere effettuata in due modalità differenti: per singolo oggetto o per tutte le entità. Nel primo caso, generalmente, la risorsa è richiesta passando l'identificativo tramite una variabile all'interno dell'url, nel secondo caso invece senza alcuna variabile. L'operazione di Update prevede che sia presente all'interno del body l'entità modificata e all'interno dell'url l'identificativo della stessa. La Delete prevede che l'identificativo dell'entità da cancellare sia passato all'interno dell'url.
Ogni metodo HTTP prevede risposte ben definite come riportato in tabella:
Operazione | Metodo | Success Code | Success Header | Success Body | Failure |
---|---|---|---|---|---|
Create | POST | 201 - Created | location: {url-risorsa-creata} | - | Fallimento Create |
Read | GET | 200 - Success | - | entità richiesta/e | Fallimento Read |
Update | PUT | 200 - Success | - | - | Fallimento Update |
Delete | DELETE | 200 - Success | - | - | Fallimento Delete |
Nel caso di fallimento di una create è buona norma rispondere con i codici di errore:
- 400 Bad Request nel caso in cui vi siano errori di validazione o risultino violati i vincoli di integrità.
- 401 Unauthorized nel caso di errori di autenticazione.
- 500 Internal Server Error in tutti gli altri casi.
Nel caso di fallimento di una read è buona norma rispondere con i codici di errore:
- se la richiesta è effettuata per singola risorsa:
- 401 Unauthorized nel caso di errori di autenticazione.
- 404 Not Found nel caso in cui all'identificativo passato come parametro non sia associata nessuna risorsa.
- 500 Internal Server Error in tutti gli altri casi.
- altrimenti:
- 401 Unauthorized nel caso di errori di autenticazione.
- 500 Internal Server Error in tutti gli altri casi.
In aggiunta a quanto riportato in Fallimento Create si aggiunge:
- 404 Not Found nel caso in cui all'identificativo passato come parametro non sia associata nessuna risorsa.
Nel caso di fallimento di una Delete è buona norma rispondere con i codici di errore:
- 401 Unauthorized nel caso di errori di autenticazione.
- 404 Not Found nel caso in cui all'identificativo passato come parametro non sia associata nessuna risorsa.
- 500 Internal Server Error in tutti gli altri casi.
Per uniformare la gestione delle eccezzioni è buona norma:
- Standardizzare il formato delle risposte d'errore (vedi
com.mdev.restws.br.dto.ExceptionResponse
). - Estendere la classe
org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler
e procedere com incom.mdev.restws.br.controller.ResponseEntityExceptionController
.