Introduction à Spring Data REST

Introduction à Spring Data REST

1. Vue d'ensemble

Cet article explique les bases deSpring Data REST et montre comment l'utiliser pour créer une API REST simple.

En général, Spring Data REST repose sur le projet Spring Data et facilite la création de services Web REST basés sur l'hypermédia qui se connectent à des référentiels Spring Data, tous utilisant HAL comme type d'hypermédia.

Cela supprime une grande partie du travail manuel généralement associé à ce type de tâches et simplifie la mise en œuvre des fonctionnalités de base de CRUD pour les applications Web.

2. Dépendances Maven

Les dépendances Maven suivantes sont requises pour notre application simple:


    org.springframework.boot
    spring-boot-starter


    org.springframework.bootspring-boot-starter-data-rest

    org.springframework.boot
    spring-boot-starter-data-jpa


    com.h2database
    h2

Nous avons décidé d'utiliser Spring Boot pour cet exemple, mais Spring classique fonctionnera également correctement. Nous avons également choisi d'utiliser la base de données intégrée H2 afin d'éviter toute configuration supplémentaire, mais l'exemple peut être appliqué à n'importe quelle base de données.

3. Rédaction de l'application

Nous allons commencer par écrire un objet de domaine pour représenter un utilisateur de notre site web:

@Entity
public class WebsiteUser {

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

    private String name;
    private String email;

    // standard getters and setters
}

Chaque utilisateur a un nom et un email, ainsi qu'un identifiant généré automatiquement. Nous pouvons maintenant écrire un simple référentiel:

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends PagingAndSortingRepository {
    List findByName(@Param("name") String name);
}

Il s'agit d'une interface qui vous permet d'effectuer diverses opérations avec les objetsWebsiteUser. Nous avons également défini une requête personnalisée qui fournira une liste d'utilisateurs basée sur un nom donné.

L'annotation@RepositoryRestResource est facultative et est utilisée pour personnaliser le point de terminaison REST. Si nous décidions de l'omettre, Spring créerait automatiquement un point de terminaison à «/websiteUsers» au lieu de «/users».

Enfin, nous écrirons unSpring Boot main class to initialize the application standard:

@SpringBootApplication
public class SpringDataRestApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringDataRestApplication.class, args);
    }
}

C'est ça! Nous avons maintenant une API REST entièrement fonctionnelle. Jetons-y un coup d'œil en action.

4. Accéder à l'API REST

Si nous exécutons l'application et accédons àhttp://localhost:8080/ dans un navigateur, nous recevrons le JSON suivant:

{
  "_links" : {
    "users" : {
      "href" : "http://localhost:8080/users{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile"
    }
  }
}

Comme vous pouvez le voir, un point de terminaison «/users» est disponible et il a déjà les options «?page», «?size» et «?sort».

Il existe également un point de terminaison standard «/profile», qui fournit des métadonnées d'application. Il est important de noter que la réponse est structurée de manière à respecter les contraintes du style d'architecture REST. Plus précisément, il fournit une interface uniforme et des messages auto-descriptifs. Cela signifie que chaque message contient suffisamment d'informations pour décrire comment traiter le message.

Il n'y a pas encore d'utilisateurs dans notre application, donc aller àhttp://localhost:8080/users afficherait simplement une liste vide d'utilisateurs. Utilisons curl pour ajouter un utilisateur.

$ curl -i -X POST -H "Content-Type:application/json" -d '{  "name" : "Test", \
"email" : "[email protected]" }' http://localhost:8080/users
{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

Jetons également un coup d’œil aux en-têtes de réponse:

HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Location: http://localhost:8080/users/1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked

Vous remarquerez que le type de contenu renvoyé est «application/hal+json». HAL est un format simple qui offre un moyen cohérent et facile de créer un lien hypertexte entre les ressources de votre API. L'en-tête contient également automatiquement l'en-têteLocation, qui est l'adresse que nous pouvons utiliser pour accéder à l'utilisateur nouvellement créé.

Nous pouvons maintenant accéder à cet utilisateur àhttp://localhost:8080/users/1

{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

Vous pouvez également utiliser curl ou tout autre client REST pour émettre des demandes PUT, PATCH et DELETE. Il est également important de noter que Spring Data REST suit automatiquement les principes de HATEOAS. HATEOAS est l'une des contraintes du style d'architecture REST, et cela signifie que l'hypertexte doit être utilisé pour trouver votre chemin dans l'API.

Enfin, essayons d’accéder à la requête personnalisée que nous avons écrite précédemment et de trouver tous les utilisateurs portant le nom «test». Cela se fait en allant àhttp://localhost:8080/users/search/findByName?name=test

{
  "_embedded" : {
    "users" : [ {
      "name" : "test",
      "email" : "[email protected]",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/users/1"
        },
        "websiteUser" : {
          "href" : "http://localhost:8080/users/1"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/search/findByName?name=test"
    }
  }
}

5. Conclusion

[.iframe-fluid] ## Ce didacticiel a présenté les bases de la création d'une API REST simple avec Spring Data REST. L'exemple utilisé dans cet article se trouve dans lesGitHub project liés.