SPRING DATA REST: VELOCITA' ED EFFICACIA PER LE APPLICAZIONI WEB

Spring Data REST si basa sul progetto Spring Data e semplifica la creazione di servizi Web REST che si connettono ai repository di Spring Data, il tutto utilizzando HAL(Hypertext Application Language) come tipo di ipermedia guida. L'idea alla base è quella di eliminare gran parte del lavoro manuale solitamente associato a tali attività semplificando l'implementazione delle funzionalità CRUD di base per le applicazioni Web.

Per il nostro codice di esempio, abbiamo bisogno delle seguenti dipendenze Maven:

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter</artifactid>
</dependency>
<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-data-rest</artifactid>
</dependency>
<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-data-jpa</artifactid>
</dependency>
<dependency>
    <groupid>com.h2database</groupid>
    <artifactid>h2</artifactid>
</dependency>

Il punto di partenza dell'intera applicazione è sicuramente l'entità sulla quale si intende costruire i metodi CRUD. Nell' esempio modelliamo una classe User con attributi nome, cognome ed email:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String firstname;
    private String lastname;
    private String email;
    
    // standard getters and setters
}
Una volta creato il nostro POJO, provvediamo a creare il repository, ossia l'interfaccia delegata a performare tutte le operazioni di lettura e scrittura sull'entità User:
@RepositoryRestResource(collectionResourceRel = "users", path = "custom-users")
public interface UserRepository extends PagingAndSortingRepository {
    Optional<User> findByEmail(@Param("email") String email);
}
L'annotazione @RepositoryRestResource è opzionale: qualora la si ometta, Spring creerà automaticamente per noi un endpoint "/users" corrispondente all'entità. Per solo scopo illustrativo, ho deciso di sovrascrivere il comportamento di base con un path custom, per l'appunto "/custom-users".

Il gioco è fatto: runnando l'applicazione in corrispondenza della porta 8080(sempre che non si sia modificato il comportamento di default di Spring) si avrà un JSON di risposta del tipo:
{
  "_links" : {
    "users" : {
      "href" : "http://localhost:8080/users{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile"
    }
  }
}
Oltre all' endpoint users - il quale fornisce già le opzioni di paginazione ed ordinamento - vi è anche l'endpoint profile che, invece, fornisce informazioni descrittive dell'applicazione.

Qualora provassimo ad invocare uno dei due endpoint sopra citati, la risposta che otterremo sarebbe del tipo application/hal+json. Come detto nelle prime righe di questo articolo, Spring Data Rest si avvale del formato HAL, ossia di un formato in grado di connettere, "linkare" le risorse delle nostre API in modo veloce e consistente, costruendo delle APIs "auto-documentate".

Concludo l'articolo fornendo il link al repository Github ufficiale di progetto nel quale potete trovare maggiori dettagli sul tema:


Comments

Popular posts from this blog

AGGIORNAMENTO INVESTIMENTI 2° TRIMESTRE 2024

AGGIORNAMENTO INVESTIMENTI 1° TRIMESTRE 2024

HO COMPRATO UNO XIOAMI 14 ULTRA