Introduction: Cet article vous aidera à créer un service de repos simple à l'aide de Spring Boot.
Tu apprends
Le service de repos utilisé dans ce tutoriel
Dans ce tutoriel, nous créerons trois services en utilisant les méthodes URI et HTTP appropriées:
@GetMapping ("/ Students / {StudentID} / Cours"): Vous pouvez interroger des cours qu'un étudiant spécifique s'est inscrit par l'utilisation de la méthode de demande et de l'échantillon URI / Student / Student1 / Cours.
@GetMapping ("/ Students / {StudentID} / Courses / {CourseID}"): Vous pouvez utiliser la méthode de demande Get et exemple URI / Student / Student1 / Courses / Course1 pour obtenir un cours spécifique pour un étudiant spécifique.
@Postmapping ("/ étudiants / {StudentId} / Cours"): Vous pouvez enregistrer un cours pour les étudiants en envoyant une demande de poste à UURI / Students / Student1 / Courses
Outils dont vous aurez besoin
Exemple de code de projet Maven complet complet
Notre référentiel GitHub contient tous les exemples de code - https://github.com/in28Minutes/in28Minutes.github.io/tree/master/code-zip-files
Service de repos avec des tests d'unité et d'intégration
Site Web-SpringBootRestServices-SimplerestServices withunitandIntegrationtests.zip
Qu'est-ce que le repos?
REST signifie transfert d'état de représentation. REST Spécifie un ensemble de contraintes architecturales. Tout service qui remplit ces conditions est appelé un service Restful.
Cinq conditions importantes pour le service Web RESTful:
Modèle de maturité de Richardson
Le modèle de maturité de Richardson est utilisé pour identifier le niveau de maturité du service Web RESTful. Voici les différents niveaux et caractéristiques:
Niveau 0: Exposez les services Web de savon dans le style de repos. Les opérations exposées utilisent le service REST (http: // server / getPosts, http: // server / deleteposts, http: // server / dothis, http: // server / dothat, etc.).
Niveau 1: Utilisez le bon URI (utilisant le nom) pour exposer la ressource. Par exemple: http: // serveur / comptes, http: // serveur / comptes / 10. Cependant, la méthode HTTP n'est pas utilisée.
Niveau 2: La ressource utilise la méthode URI + HTTP correcte. Par exemple, pour mettre à jour un compte, vous devez faire un put. Créez un compte et vous faites un message. URI ressemble à des messages / 1 / commentaires / 5 et des comptes / 1 / amis / 1.
Niveau 3: Hateoas (Hypermedia comme moteur de l'état d'application). Vous pouvez non seulement comprendre les informations demandées, mais aussi la prochaine action possible que les consommateurs de services peuvent prendre. Lorsque vous demandez des informations sur un utilisateur de Facebook, le service de repos peut retourner les détails de l'utilisateur et les informations sur la façon d'obtenir ses messages récents, comment obtenir ses commentaires récents et comment récupérer une liste de ses amis.
Utilisez la méthode de demande appropriée
Utilisez toujours la méthode HTTP. Les meilleures pratiques pour chaque méthode HTTP sont les suivantes:
Obtenez: rien ne doit être mis à jour. Il doit être idempotent (le même résultat est appelé plusieurs fois). Code de retour possible 200 (OK) + 404 (non trouvé) + 400 (mauvaise demande)
POST: De nouvelles ressources doivent être créées. Idéalement, retournez JSON et lien vers des ressources nouvellement créées. Utilisez le même code de retour chaque fois que possible. Aussi: le code de retour 201 (créé) est possible.
PUT: Mettez à jour les ressources connues. Par exemple: mettez à jour les détails du client. Code de retour possible: 200 (OK)
Supprimer: utilisé pour supprimer les ressources.
Structure du projet
La capture d'écran suivante montre la structure du projet que nous créerons.
Quelques détails:
Créer un service de repos à l'aide de Spring Initizr Boot
La création d'un service de repos avec Spring Initizr est un morceau de gâteau très facile. Nous utiliserons Spring Web MVC comme framework de couche Web.
Spring initializr http://start.spring.io/ est un excellent outil pour bootstrap la création de projets de démarrage Spring.
Comme indiqué dans la figure ci-dessus, les étapes suivantes doivent être effectuées
Démarrer le printemps initializr et sélectionner ce qui suit
Sélectionnez com.in28Minutes.springboot comme groupe
Sélectionnez les services étudiants comme artefact
Sélectionnez les dépendances suivantes
Cliquez pour générer le projet.
Importez le projet dans Eclipse. Fichier -> Import -> Projets Maven existants.
Si vous souhaitez connaître tous les fichiers de ce projet, vous pouvez continuer à lire.
Implémentation de la couche commerciale d'application
Toutes les applications nécessitent des données. Nous utiliserons ArrayList, qui est un magasin de données en mémoire, plutôt que d'interagir avec une base de données réelle.
Un étudiant peut suivre plusieurs cours. Le cours a un identifiant, un nom, une description et une liste des étapes pour terminer le cours. L'étudiant a une carte d'identité, un nom, une description et une liste de cours auxquels il est actuellement inscrit. Studentservice fournit les méthodes publiques suivantes
Liste publique RetrieVeAlLsTudents () - Récupérer les détails de tous les étudiants
Public Student RetrieVEstedent (String StudentID) - Récupérez les détails spécifiques des élèves
Récupation de liste publique (String StudentID) - Recherchez tous les cours que les étudiants s'inscrivent à
Récupération de cours publics (String StudentId, String CourseID) - Récupérer les détails d'un cours spécifique pour lequel un étudiant s'est inscrit
Cours public AddCourse (String StudentID, cours de cours) - Ajouter des cours aux étudiants existants
Veuillez vous référer aux fichiers suivants pour mettre en œuvre le service d'étudiant de la classe de service et le cours de classe de modèle et l'élève.
Ajouter plusieurs services de repos
REST Service StudentController expose plusieurs services Get.
package com.in28minutes.springboot.controller; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation.getmapping; org.springframework.web.bind.annotation.restController; import com.in28minutes.springboot.model.course; import com.in28Minutes.springboot.service.studentService; @restControllerPublic StudentController {@AutowiredPrivatePrivate StudentSisvice StudentService; @GetMapping ("/ Students / {StudentID} / Courses") Liste publique <Course> RetrieVECoursesSForStudent (@PathVariable StudentID) {return Studentservice.RetrierieCourses (StudentId);} @ getMapping ("" Students / {StudentId} / Course / {CourseID} ") String StudentID, @ Pathvariable String CourseID) {return Studerservice.RetrieVecourse (StudentId, CourseID);}}Utilisez Postman pour effectuer un service Get
Nous lancerons une demande à http: // localhost: 8080 / étudiants / étudiant1 / cours / cours1 pour tester le service. La réponse est la suivante.
{"id": "Course1", "Name": "Spring", "Description": "10 étapes", "Steps": ["Learn Maven", "Importer Project", "premier exemple", "deuxième exemple"]}L'image ci-dessous montre comment nous exécutons le service Get Postman - mon outil préféré pour exécuter le service de repos.
Ajouter un service de repos
Lorsque la création de ressources est réussie, le service de poste doit renvoyer le statut créé (201).
@PostMapping ("/ Students / {StudentId} / Courses") Réponse publique <Void> RegisterStudentForCoursee (@Pathvariable String StudentID, @Requestbody Course NewCourse) {Course Course = StudentService.AddCourse (StudentId, NewCourse); if (cours == NULL) RETOUR Responsentity.NoContent (). ServleturiComponentsBuilder.FromCurrentRequest (). Path ("/ {id}"). BuildAndExpand (Course.getId ()). TOURI (); return Responsentity.Created (emplacement) .build ();}Exécuter le service de post-repos
L'exemple de demande est indiqué ci-dessous. Il contient tous les détails des étudiants qui s'inscrivent au cours.
{"Name": "Microservices", "Description": "10 étapes", "étapes": ["Apprenez à briser les choses", "automatiser l'enfer de tout", "amusez-vous"]}L'image suivante montre comment nous exécutons le service postal à partir de Postman - mon outil préféré pour exécuter le service de repos. Assurez-vous d'aller à l'onglet Body et de sélectionner RAW. Sélectionnez JSON dans le menu déroulant. Copiez la demande ci-dessus au corps.
L'URL que nous utilisons est http: // localhost: 8080 / étudiants / étudiant1 / cours.
Exemple de code complet
pom.xml
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><Modelversion>4.0.0</Modelversion><groupid>com.in28minutes.springboot</groupid><artifactid > Student-Services </ ArfactId> <Dersion> 0.0.1-Snapshot </DERNIERDS> <Packaging> Jar </packaging> <name> Student-Services </name> <D, description> Demo Projet pour Spring Boot </Scription> <parent> <ProupId> org.springFramework.boot </prôdId> <ArtifActid> Spring-Boot-Starter-Parent </ ArtifactId> <DERVIONDATION> 1.4.4.release </ version> <RelativePath /> <! - Lookup Parent de Repository -> </parent> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reportting.outputencoding> utf-8 </project.reportting.outputencoding> <java.version> 1.8 </java.version> Dependency> <ProupId> org.springframework.boot </prôdId> <Artifactid> printemps-boot-starter-actuator </ artifactid> </peedency> <dependency> <prouprid> org.springframework.boot </proupId> <ptetifactid> printemps-boot-starter-web </ artifactid> Dependency> <Dependency> <GroupId> org.springFramework.boot </proupId> <ArtifActid> Spring-Boot-Devtools </ ArtifactId> <POPE> runtime </cope> </pedency> <Dedency> <proupId> org.springframework.boot </proupId> <ArtifActid> Spring-boot-boot- Starter-Test </Retifactid> <ccope> Test </cope> </Dependency> </ Dependuces> <Duild> <Glugins> <Glugin> <GroupId> Org.SpringFramework.boot </prouprid> </prigin> </gluns> </dudiy> </ Project>
src / main / java / com / in28Minutes / Springboot / Controller / StudentController.java
import java.net.uri; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.http.Responseentity; import org.springframework.web.bind.annotation.getmappant; org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.postmapping; import org.springframework.web.bind.annotation.requestbody org.springframework.web.servlet.support.servleturicocomponentsbuilder; import com.in28minutes.springboot.model.course; import com.in28minutes.springboot.service.studentService; @RestControllerPublic StudentController {@Autowiredprice StudentService; @getMapping ("/ Students / {StudentID} / Courses") Liste publique <Course> RetrieVECourstForStudent (@PathVariable StudentID) {return Studentservice.RerieVecourses (StudentID);} @ getMapping ("" Students / {StudentId} / Cours / {CourseID} ") Public Course RetrievedETeTail StudentID, @ Pathvariable String CourseID) {return StudentsService.Retrierieecourse (StudentId, CourseID);} @ Postmapping ("/ Students / {StudentID} / Courses") Public Responsentity <Void> RegistreStudentForCourse (@PathVariable String StudentID, @requestbody Coursewecourse) {cours de cours = stumerservice.addoursecourse (Studentid, newCourse) {cours de cours = StudentService.addoursecourse (StudentId, newCourse); NULL) RETOUR Responsentity.NoContent (). Build (); URI Location = ServleturiComponentsBuilder.FromCurrentRequest (). Path ("/ {id}"). BuildAndexpand (Course.getId ().}}src / main / java / com / in28Minutes / Springboot / Model / Course.java
Importer java.util.list; cours de classe publique {ID de chaîne privée; nom de chaîne privée; description de la chaîne privée; liste privée <string> étapes; // nécessaire par causation par: com.fasterxml.jackson.databind.jsonmappingException: // ne peut pas construire une instance de com.in28minutes.springboot. Constructeur ou créateur, ou peut-être avoir besoin d'ajouter / activer // type d'informations?) Cours public () {} Cours public (String id, nom de chaîne, chaîne Description, liste <String> étapes) {super (); this.id = id; this.name = name; this.description = description; this.steps = étapes;} public string getID () {return id;} public Void SetId (String id) {that) getDescription () {return Description;} public String getName () {return name;} public list <string> getSteps () {return étapes;} @ overRidepublic String toString () {return string.format ("cours [id =% s, name =% s, description =% s, étapes =% s]", id, name, description, étapes);} @ reversIBLICH CNORT INTHCODE () {étapes), int prime = 31; int result = 1; result = prime * result + ((id == null)? 0: id.hashcode ()); return result;} @ overdepublic booléen égaux (objet obj) {if (this == obj) return true; if (obj == null) return false; if (getClass ()! = obj.getClass ()) return false; cours autre) null) return false;} else if (! id.equals (autre.id)) return false; return true;}}src / main / java / com / in28Minutes / Springboot / Model / Student.java
package com.in28Minutes.springboot.model; import java.util.list; classe publique Student {Private String id; name de chaîne privée; description de la chaîne privée; Cours de liste privée) {super (); this.id = id; this.name = name; this.Description = Description; this.Cours = curses = caves; getID () {return id;} public void setid (String id) {this.id = id;} public String getName () {return name;} public void setName (String Name) {this.name = name;} public String GetDescription () {return Description;} public void SetDescription (String Description) {this.Description = Description; Cours;} public void setCourses (list <Course> Courses) {this.Courses = Courses;} @ OverRidepublic String toString () {return String.format ("Student [id =% s, name =% s, description =% s, cours =% s]", id, nom, description, cours);}}}}src / main / java / com / in28Minutes / Springboot / Service / StudentService.java
package com.in28Minutes.springboot.service; import java.math.biginteger; import java.security.serureRandom; import java.util.arraylist; import java.util.array com.in28Minutes.springboot.model.course; import com.in28minutes.springboot.model.student; @componentpublic class studentservice {private static list <s étudiant> students = new ArrayList <> (); static {// initialize dataCourse Course1 = New Course ("Course1" "", "Spring", Arrays. Maven "," Project d'import "," premier exemple "," deuxième exemple ")); cours Course2 = nouveau cours (" Course2 "," Spring MVC "," 10 exemples ", arrays.aslist (" Learn Maven "," Project d'import "," premier exemple "," deuxième exemple ")); Course Course3 = New Course (" Course3 "," Spring Boot "," 6K Students ", ARRAYS.Aslist". Spring "," Learn Spring MVC "," premier exemple "," deuxième exemple ")); Course Course4 = nouveau cours (" Course4 "," Maven "," Maven Course le plus populaire sur Internet! ", Arrays.aslist (" Pom.xml ") Karanam "," Hiker, Programmer and Architect ", New ArrayList <> (Arrays.aslist (Course1, Course2, Course3, Course4))); Student Satish = New Student (" Student2 "," Satish T "," Hiker, programme Cours4)))); Students.Add (Ranga); Students.Add (Satish);} Liste publique <Student> RetrieVeAlLsTudents () {return Students;} Public Student RetrievieSTudent (String StudentID) {for (Student Student Student;}} return nul {Student Student = RetrieVeStudent (StudentId); if (Student == null) {return null;} return student.getCourses ();} Public Course Retireecourse (String StudentId, String CourseID) {Student Student = RetrieVesTetent (StudentId); if (Student == Null) {Return Null;} pour (cours Cours (cours.getId (). Equals (CourseId)) {return Course;}} return null;} private SecureRandom Random = new SecureRandom (); public Course AddCourse (String StudentID, cours de cours) {Student Student = RetrieVesTendent (StudentId); if (étudiant == null) {return null;} String randomd = new BigInteger (130, Random) .ToString (32); cours.setid (randomalid); student.getCourses (). Add (cours); retour de cours;}}src / main / java / com / in28Minutes / Springboot / StudentservicesApplication.java
Package com.in28Minutes.springboot; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootapplication; @springbootapplicationpublic classe StudentsApplication {public static vide main (String [] args) {SpringApplication.Run (StudentservicesApplication.class, Args);}}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.