L'acronyme REST signifie REpresentational State Transfer, tandis que API signifie Application Programming Interface. Ensemble, ils font référence à une API REST. Une API REST est un service qui transfère les requêtes et les réponses entre deux systèmes logiciels, sur une architecture REST.
L'architecture REST crée des services Web accessibles via des URL à l'aide de l'un des quatre verbes de requête: POST, GET, PUT et DELETE. Ainsi, vous pourriez dire qu'une API REST est un logiciel qui vous permet de créer, lire, mettre à jour et supprimer des ressources via des URL.
Vous pouvez apprendre à créer une API REST à l'aide de Spring Boot.
Initialisation de l'application Spring Boot
La première chose que vous devriez faire est se familiariser avec les bases du printemps et configurez une application Spring Boot. Vous devrez cependant modifier les dépendances. En plus de la dépendance Web, vous devrez obtenir la dépendance Spring Data Java Persistent API (JPA) et le pilote de la base de données que vous avez l'intention d'utiliser (cette application utilisera MySQL).
Pour cette API REST, vous aurez besoin d'un contrôleur, d'un modèle et d'un référentiel. Ainsi, l'API REST aura la structure de fichiers suivante :
Création du modèle
La première classe que vous devrez créer est le modèle client, qui stocke la logique des données.
emballer com.onlineshopaholics.api.model ;
importer jakarta.persistance. Colonne;
importer jakarta.persistance. Entité;
importer jakarta.persistance. ValeurGénérée ;
importer jakarta.persistance. GénérationType ;
importer jakarta.persistance. Identifiant;
importer jakarta.persistance. Tableau;@Tableau(nom="client")
@Entité
publicclasseClient{
@Identifiant
@GeneratedValue(stratégie = GenerationType. AUTO)
privé ID entier ;@Colonne(nom="nom du client")
privé nom de chaîne ;privé Courriel de chaîne ;
public Entier getId(){
retour identifiant;
}publicannulerDéfinir l'identifiant(ID entier){
ce.id = identifiant ;
}public Chaîne obtenirNom(){
retour nom;
}publicannulersetName(nom de la chaîne){
ce.nom = nom ;
}public Chaîne getEmail(){
retour e-mail;
}
publicannulersetEmail(Chaîne e-mail){
ce.email = e-mail ;
}
}
À partir de la classe de clients ci-dessus, vous verrez que chaque client aura un identifiant, un nom et un e-mail. Vous remarquerez également plusieurs annotations qui servent à des fins différentes.
- @Entity: Déclare la classe de clients en tant qu'entité JPA. Cela signifie que JPA utilisera les champs de la classe pour créer des colonnes dans une base de données relationnelle.
- @Table: désigne le nom de la table qui sera mappée à la classe de modèle client.
- @Id: Désigne une propriété qui identifiera de manière unique l'entité dans la base de données.
- @GeneratedValue et @GenerationType: ces éléments fonctionnent ensemble pour spécifier une stratégie de génération automatique pour le champ auquel il est associé. Ainsi, le champ id générera automatiquement une valeur unique à chaque fois que vous créerez un nouveau client.
- @Column: désigne une propriété qui correspond à une colonne de la base de données. Ainsi, la propriété name correspondra à une colonne de nom de client dans la base de données.
Création du référentiel
Ce référentiel vous permettra d'interagir avec les données clients de la base de données.
emballer com.onlineshopaholics.api.repository ;importer org.springframework.data.repository. CrudRepository ;
importer com.onlineshopaholics.api.model. Client;
publicinterfaceRéférentiel clients'étendCrudRepository<Client, Entier>{}
Le référentiel client s'étend Spring's CrudRepositoy interface, en lui transmettant la classe de modèle Customer avec le type de l'identifiant unique de l'entité, Integer.
L'interface CrudRepository donne accès à plus de 10 opérations, y compris les méthodes CRUD génériques dont vous aurez besoin pour l'API REST. Ainsi, étant donné que le CrudRepository définit déjà les méthodes dont vous aurez besoin, il n'est pas nécessaire de les déclarer explicitement dans l'interface CustomerRepository.
Création du contrôleur
Le contrôleur vous permet de mettre à jour les données de votre base de données à l'aide du modèle et du référentiel.
emballer com.onlineshopaholics.api.controller ;importer java.util. Facultatif;
importer org.springframework.beans.factory.annotation. Câblage automatique ;
importer org.springframework.web.bind.annotation. DeleteMapping ;
importer org.springframework.web.bind.annotation. GetMapping ;
importer org.springframework.web.bind.annotation. CheminVariable ;
importer org.springframework.web.bind.annotation. post-mapping ;
importer org.springframework.web.bind.annotation. PutMapping ;
importer org.springframework.web.bind.annotation. RequestBody ;
importer org.springframework.web.bind.annotation. RequestMapping ;
importer org.springframework.web.bind.annotation. RequêteParam ;
importer org.springframework.web.bind.annotation. ResponseBody ;
importer org.springframework.web.bind.annotation. RestController ;
importer com.onlineshopaholics.api.model. Client;
importer com.onlineshopaholics.api.repository. Référentiel client ;
@RestController
@RequestMapping("/clients")
publicclasseClientContrôleur{
@Autowired
privé CustomerRepository customerRepository;
// créer un nouveau client
@PostMapping("/ajouter")
public Client ajouterNouveauClient(@RequestBody client nouveau client){
Utilisateur client = nouveau Client();
user.setName (newCustomer.getName());
user.setEmail (newCustomer.getEmail());
customerRepository.save (utilisateur);
retour utilisateur;
}
// afficher tous les clients
@GetMapping("Voir tout")
public@ResponseBodyItérablegetAllCustomers() {
retour customerRepository.findAll();
}
// afficher un client spécifique
@GetMapping("vue/{id}")
public FacultatifobtenirClient(@PathVariable identifiant entier) {
retour customerRepository.findById (id);
}
// mettre à jour un client existant
@PutMapping("/edit/{id}")
public Chaîne mise à jour( @RequestBody Customer updateCustomer, @PathVariable ID entier){
retour customerRepository.findById (id)
.map (client -> {
client.setName (updateCustomer.getName());
client.setEmail (updateCustomer.getEmail());
customerRepository.save (client);
retour"Les détails du client ont été mis à jour avec succès !";
}).orElseGet(() -> {
retour"Ce client n'existe pas";
});
}
// supprimer le client
@DeleteMapping("supprimer/{id}")
public Chaîne supprimer(@VariableChemin("identifiant")identifiant entier) {
customerRepository.deleteById (id);
retour"Le client a été supprimé avec succès !";
}
}
Le contrôleur ci-dessus équipe l'API REST avec des opérations CRUD, en utilisant cinq des CrudRepository
- @RestController: cette annotation a deux objectifs. Il marque une classe pour la découverte par l'analyse des composants. Il indique également à Spring d'écrire la valeur de retour pour toutes les méthodes de cette classe dans le corps de la réponse.
- @RequestMapping: définit le modèle de demande de base que le contrôleur gérera. Ainsi, ce contrôleur traitera toutes les demandes adressées à "/clients".
- @ResponseBody: permet à une méthode de renvoyer une entité entière.
- @RequestBody: permet de convertir le corps de la requête en objet.
- @RequestParam: permet d'isoler une propriété d'un objet.
- @PathVariable: vous permet de mapper une valeur de requête à un espace réservé. Il mappe l'ID donné à la méthode de suppression avec une valeur existante dans la base de données.
- @PostMapping: permet de créer des ressources.
- @GetMapping: vous permet de lire les données des ressources.
- @PutMapping: permet de mettre à jour les ressources.
- @DeleteMapping: permet de supprimer des ressources.
Connecter la base de données à votre application
Pour connecter une base de données à n'importe quelle application Spring, vous devrez utiliser le application.properties fichier sous le dossier des ressources. Ce fichier est initialement vide, vous pouvez donc le remplir avec les propriétés appropriées pour la base de données que vous avez l'intention d'utiliser. Cette application utilisera une base de données MySQL donc, le fichier application.properties contiendra les données suivantes :
spring.jpa.hibernate.ddl-auto=mise à jour
spring.jpa.open-in-view=false
spring.datasource.url=jdbc: mysql://${MYSQL_HOST: localhost}: 3306/onlineshopaholics
spring.datasource.username=racine
spring.datasource.password=mot de passe sécurisé
spring.datasource.driver-class-name=com.mysql.cj.jdbc. Conducteur
Les données ci-dessus montrent que cette application se connectera à une base de données MySQL appelée onlineshopaholics, avec un nom d'utilisateur "root" et "securepw" comme mot de passe. Votre prochaine étape consiste à créer la base de données et la table client dans MySQL.
Création de demandes
Il existe de nombreux outils que vous pouvez utiliser pour tester votre API REST. Postman est un outil de test d'API REST populaire, et vous pouvez l'utiliser pour tester l'API simple que vous avez créée. Après avoir créé la table MySQL et exécuté l'application Spring, vous pouvez lancer Postman et expérimenter les quatre verbes de requête.
Demande POST
Cette requête vous permettra de créer de nouveaux clients à l'aide de l'API REST. Pour compléter cette demande, vous devrez vous rendre dans la section des en-têtes de votre demande de publication et créer un nouvel en-tête (Content-Type). Vous devez définir la valeur de cet en-tête sur application/json, car vous allez créer de nouveaux clients à l'aide de JSON.
Dans le corps de la requête, vous devrez changer le type en raw et insérer votre JSON. Ensuite, vous devrez insérer l'URL du message :
L'envoi de la requête renverra la réponse suivante :
Vous pouvez voir que la demande a réussi et que le nouveau client a également un identifiant.
OBTENIR la requête
Maintenant que vous avez un client, vous pouvez le visualiser avec la requête get qui renvoie tous les clients :
Soit chaque client par identifiant :
Requête PUT
Vous pouvez mettre à jour Janet avec un nouveau nom de famille et une nouvelle adresse e-mail.
Supprimer la demande
Vous pouvez également supprimer Janet de la base de données.
Testez votre API Spring REST à l'aide de JUnit
Avec Spring Boot, vous pouvez tester n'importe quelle application (y compris les API REST) à l'aide du fichier de test de Spring. Les tests logiciels sont importants pour Spring Boot. Chaque application Spring initialisée utilise JUnit pour les tests et vous permet d'envoyer des requêtes à vos API REST.