PENDAHULUAN: Artikel ini akan membantu Anda membuat layanan istirahat sederhana menggunakan Spring Boot.
Anda akan belajar
Layanan istirahat yang digunakan dalam tutorial ini
Dalam tutorial ini, kami akan membuat tiga layanan menggunakan metode URI dan HTTP yang sesuai:
@GetMapping ("/Student/{StudentId}/kursus"): Anda dapat menanyakan kursus yang telah didaftarkan oleh siswa tertentu dengan menggunakan metode permintaan dan sampel URI/Siswa/Student1/kursus.
@GetMapping ("/Student/{StudentId}/kursus/{CourseId}"): Anda dapat menggunakan metode permintaan dan sampel URI/Siswa/Student1/Courses/Course1 untuk mendapatkan kursus tertentu untuk siswa tertentu.
@Postmapping ("/student/{studentId}/kursus"): Anda dapat mendaftarkan kursus untuk siswa dengan mengirimkan permintaan pos ke Uuri/Siswa/Student1/kursus
Alat yang Anda butuhkan
Lengkap Contoh Kode Proyek Maven Boot Spring Boot
Repositori GitHub kami berisi semua contoh kode-https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files
Layanan istirahat dengan unit dan tes integrasi
Situs web-springbootrestservices-implerestserviceswithunitandintegrationtests.zip
APA IS REST?
Istirahat adalah singkatan dari Transfer Negara Perwakilan. Istirahat Menentukan satu set kendala arsitektur. Layanan apa pun yang memenuhi persyaratan ini disebut layanan yang tenang.
Lima kondisi penting untuk layanan web yang tenang:
Model Maturity Richardson
Model kematangan Richardson digunakan untuk mengidentifikasi tingkat kematangan layanan web yang tenang. Berikut ini adalah tingkat dan karakteristik yang berbeda:
Level 0: Ekspos Layanan Web SOAP dalam Gaya REST. Operasi yang diekspos menggunakan layanan REST (http: // server/getPosts, http: // server/deleteposts, http: // server/dothis, http: // server/dothat, dll.).
Level 1: Gunakan URI yang benar (menggunakan kata benda) untuk mengekspos sumber daya. Misalnya: http: // server/akun, http: // server/akun/10. Namun, metode HTTP tidak digunakan.
Level 2: Sumber Daya menggunakan metode URI + HTTP yang benar. Misalnya, untuk memperbarui akun, Anda perlu melakukan put. Buat akun dan Anda melakukan posting. URI terlihat seperti posting/1/komentar/5 dan akun/1/teman/1.
Level 3: Benci (Hypermedia sebagai mesin status aplikasi). Anda tidak hanya dapat memahami informasi yang diminta, tetapi juga tindakan selanjutnya yang dapat dilakukan konsumen layanan. Saat meminta informasi tentang pengguna Facebook, layanan REST dapat mengembalikan detail pengguna dan informasi tentang cara mendapatkan posting terbarunya, cara mendapatkan komentar terbarunya, dan cara mengambil daftar teman -temannya.
Gunakan metode permintaan yang sesuai
Selalu gunakan metode HTTP. Praktik terbaik untuk setiap metode HTTP adalah sebagai berikut:
Dapatkan: Tidak ada yang harus diperbarui. Itu harus idempoten (hasil yang sama disebut beberapa kali). Kode pengembalian yang mungkin 200 (OK) + 404 (tidak ditemukan) + 400 (permintaan buruk)
Posting: Sumber daya baru harus dibuat. Idealnya mengembalikan JSON dan tautan ke sumber daya yang baru dibuat. Gunakan kode pengembalian yang sama bila memungkinkan. Juga: Kode Pengembalian 201 (dibuat) dimungkinkan.
Put: Perbarui sumber daya yang diketahui. Misalnya: Perbarui detail pelanggan. Kode pengembalian yang mungkin: 200 (OK)
Hapus: Digunakan untuk menghapus sumber daya.
Struktur proyek
Tangkapan layar berikut menunjukkan struktur proyek yang akan kami buat.
Beberapa detail:
Buat Layanan Istirahat Menggunakan Boot Inisialisasi Musim Semi
Membuat layanan istirahat dengan inisialisasi musim semi adalah sepotong kue yang sangat mudah. Kami akan menggunakan Spring Web MVC sebagai kerangka kerja lapisan web kami.
Spring Initiizr http://start.spring.io/ adalah alat yang hebat untuk bootstrap pembuatan proyek boot musim semi.
Seperti yang ditunjukkan pada gambar di atas, langkah -langkah berikut harus dilakukan
Mulai Spring Initiizr dan pilih yang berikut ini
Pilih com.in28minutes.springboot sebagai grup
Pilih Layanan Siswa sebagai Artefak
Pilih dependensi berikut
Klik untuk menghasilkan proyek.
Impor proyek ke gerhana. File -> Impor -> Proyek Maven yang ada.
Jika Anda ingin mengetahui semua file proyek ini, Anda dapat terus membaca.
Implementasi Lapisan Bisnis Aplikasi
Semua aplikasi membutuhkan data. Kami akan menggunakan ArrayList, yang merupakan penyimpanan data dalam memori, daripada berinteraksi dengan database nyata.
Seorang siswa dapat mengambil beberapa kursus. Kursus ini memiliki ID, nama, deskripsi, dan daftar langkah untuk menyelesaikan kursus. Siswa memiliki kartu ID, nama, deskripsi, dan daftar kursus yang saat ini terdaftar.
Daftar Publik Retrieveallstudents () - Ambil rincian semua siswa
RetriEvestudent siswa publik (String StudentID) - Ambil detail siswa tertentu
Daftar Publik Retrievecourses (String StudentID) - Cari semua kursus Siswa mendaftar
Retrievecourse Kursus Publik (String StudentID, String CourseID) - Ambil rincian kursus tertentu yang telah didaftarkan oleh siswa
Kursus Publik AddCourse (String StudentID, kursus kursus) - Tambahkan kursus untuk siswa yang sudah ada
Silakan merujuk ke file -file berikut untuk mengimplementasikan Siswa Siswa Layanan dan Kursus Kelas Model dan Siswa.
Tambahkan beberapa layanan istirahat
Layanan Istirahat StudentController mengekspos beberapa layanan GET.
package com.in28minutes.springboot.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import com.in28minutes.springboot.model.Course;import com.in28minutes.springboot.service.StudentService;@RestControllerpublic class StudentController {@Autowiredprivate StudentService Siswa Siswa; @GetMapping ("/Student/{StudentId}/Courses") Daftar Publik <side> retrieveCoursesForstudent (@PathVariable String StudentId) {Return Siswa retrievedetailsforcourse (@pathvariable string studentId,@pathvariable string courseId) {return studentservice.retrievecourse (studentId, courseid);}}Gunakan tukang pos untuk melakukan layanan GET
Kami akan memulai permintaan ke http: // localhost: 8080/siswa/student1/kursus/kursus1 untuk menguji layanan. Responsnya adalah sebagai berikut.
{"id": "course1", "name": "spring", "description": "10 Steps", "Steps": ["Learn Maven", "Proyek Impor", "Contoh Pertama", "Contoh Kedua"]}Gambar di bawah ini menunjukkan bagaimana kami mengeksekusi layanan GET postman - alat favorit saya untuk menjalankan layanan REST.
Tambahkan Layanan Istirahat Pos
Ketika pembuatan sumber daya berhasil, layanan pos harus mengembalikan status yang dibuat (201).
@PostMapping("/students/{studentId}/courses")public ResponseEntity<Void> registerStudentForCourse(@PathVariable String studentId, @RequestBody Course newCourse) {Course course = studentService.addCourse(studentId, newCourse);if (course == null)return ResponseEntity.noContent().build();URI location = Servleturicomponentsbuilder.fromCurrentRequest (). Path ("/{id}"). BuildandExpand (course.getid ()). Pouri (); return responseentity.created (lokasi) .build ();}Jalankan Layanan Istirahat Pos
Permintaan sampel ditunjukkan di bawah ini. Ini berisi semua detail siswa yang mendaftar dalam kursus.
{"Name": "Microservices", "Deskripsi": "10 Langkah", "Langkah": ["Pelajari cara memecah segalanya", "mengotomatiskan neraka dari segalanya", "bersenang -senang"]}Gambar berikut menunjukkan bagaimana kami menjalankan layanan pos dari Postman - alat favorit saya untuk menjalankan layanan REST. Pastikan Anda pergi ke tab tubuh dan pilih RAW. Pilih JSON dari menu drop-down. Salin permintaan di atas ke badan.
URL yang kami gunakan adalah http: // localhost: 8080/siswa/siswa/kursus.
Contoh Kode Lengkap
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 > Siswa-Servis </artifactid> <version> 0.0.1-Snapshot </version> <packaging> jar </packaging> <name> Siswa-Siswa </name> <decription> demo Project for Spring Boot </Description> <partent> <groupid> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-parent </arttifactid> <version> 1.4.4.release </versi> <relativePath/> <!-Pencarian orang tua dari repositori -> </induk> <properties> <poject.build.sourceencoding> utf-8 </project.build.sourceencoding> <poject.reporting.outputencoding> UTF-8 </project.reporting.outputEncoding> <java.version> </proava.8 </rava.versies Ketergantungan> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-aktuator </artifactid> </dependency> <dependency> <roupDid> org.spramework.booty </groupid> <ArtiFacTID> Spring-Boot-starter --wiB </groupid> <ArtiFacTID> <ArtifacTid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <t ArtiFacTid> <t Artifactid> <t ArtiFacTid> <t ArtiFacTid> Dependency> <dependency> <GroupId> org.springframework.boot </sroupId> <ArTifactId> Spring-boot-devtools </t ArtifactId> <scope> runtime </scope> </dependency> <sependency> <groupid> org.springframework.boot </groupid> starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
src/main/java/com/in28minutes/springboot/controller/studentController.java
Impor java.net.uri; impor java.util.list; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.http.responseentity; import org.springframework.web.bind.annotation.getponstry; org.springframework.web.bind.annotation.pathvariable; impor org.springframework.web.bind.annotation.postmapping; impor org.springframework.web.bind.annotation.requestbody; impor org.springframework.wind.bind.annotation.requestbody; orgconconferpramework.wind.nbind.annotation org.springframework.web.servlet.support.servleturicomponentsbuilder; impor com.in28minutes.springboot.model.course; impor com.in28minutes.springboot.service.studentservice; @restcontrollerpublicliclic.service.studentservice; @restcontrollerpollicrolliclicliclic.service.studentservice; @restcontrollerPubliclicliclic.service {@restcontrollerpublicliclic.service {@restcontrollerpublicliclicliclicer StudentService; @GetMapping ("/Student/{StudentId}/Courses") Daftar Publik <side> RETRIEVECOURSForStudent (@PathVariable String StudentId) {Return Siswa retrievedetailsforcourse (@pathvariable string studentId,@pathvariable string courseId) {return studentservice.retrievecourse (studentId, courseid);}@postmapping ("/student/{studentId}/coursese") public responentity <void> registerstudentForVoSourse {studentid @pathvariable " StudentService.addcourse (StudentId, Newcourse); if (course == null) return responseentity.nocontent (). build (); location uri = servleTuricomponentsbuilder.fromCurrentRequest (). Path ("/{id}"). BuildAndExpand (course.getid ()). Responseentity.created (lokasi) .build ();}}src/main/java/com/in28minutes/springboot/model/course.java
impor java.util.list; kursus kelas publik {private string id; nama string pribadi; deskripsi string pribadi; daftar pribadi <string> langkah; // diperlukan oleh disebabkan oleh: com.fasterxml.jackson.databind.jsonmappingException: // tidak dapat membangun instance dari com.in28minutes.springboot.model.codel.course: no noNteror, no noNtor.springboot.model.course. konstruktor atau pencipta default, atau mungkin perlu menambah/mengaktifkan // ketik informasi?) Kursus publik () {} kursus publik (ID string, nama string, deskripsi string, daftar <string> langkah) {super (); this.id = id; this.name = name; this.description = description; this. String getDescription() {return description;}public String getName() {return name;}public List<String> getSteps() {return steps;}@Overridepublic String toString() {return String.format("Course [id=%s, name=%s, description=%s, steps=%s]", id, name, description, steps);}@Overridepublic int hashCode() {final int prime = 31; int result = 1; hasil = prime * hasil + ((id == null)? 0: id.hashCode ()); hasil pengembalian;}@overridepublic boolean sama dengan (objek obj) {if (ini == obj) return true; if (obj == null) return false; if (if (gets == OBJ) return; if (obj == null) false; if (if (get) odj (getJ) ifJ (odj. (id == null) return false;} else if (! id.equals (Other.id)) return false; return true;}}src/main/java/com/in28minutes/springboot/model/student.java
Paket com.in28minutes.springboot.model; impor java.util.list; siswa kelas publik {id pribadi ID; nama string pribadi; deskripsi string pribadi; daftar pribadi <sere> kursus; siswa publik (id string, nama string, daftar <kursus> kursus) {super (); this.id = id name; name; name; name; String 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;}public List<Course> getCourses() {return courses;}public void setCourses(List<Course> courses) {this.courses = courses;}@Overridepublic String toString() {return String.format("Student [id=%s, name=%s, description=%s, courses=%s]", id,name, description, courses);}}src/main/java/com/in28minutes/springboot/service/studentservice.java
Paket com.in28minutes.springboot.service; import java.math.biginteger; impor java.security.securerandom; import java.util.arraylist; impor java.util.arrays; import java.util.list; impor org.springfringfringework. com.in28minutes.springboot.model.course; impor com.in28minutes.springboot.model.student; @componentPublic kelas Siswa Maven "," proyek impor "," contoh pertama "," contoh kedua ")); kursus kursus2 = kursus baru (" kursus2 "," Spring MVC "," 10 Contoh ", Arrays.aslist (" Learn Maven "," Proyek Impor "," Contoh Pertama "," Contoh Kedua "); Kursus Kursus3 = Kursus Baru (" Kursus3 "," MUSIM, "MUSIM," MUSIM, "MURGER"); Kursus Kursus3 = Kursus Baru ("Kursus3", "MUSP SPRING," MUSIVEN, "MUSPREY," MUSP SUMIT "); Kursus New (" Course ("Course", "" MUSTHEN "," MUSPREY "," MUSPER, "Kursus (" Kursus "," Kursus "," Kursus "," Kursus "," Musim semi "," belajar musim semi mvc "," contoh pertama "," contoh kedua ")); kursus kursus4 = kursus baru (" kursus4 "," maven "," kursus pakar paling populer di internet! ", Arrays.aslist (" pom.xml "," Bangun siklus hidup "," Parent Pom "," mengimpor kisaran Eclipse "))))))); Karanam","Hiker, Programmer and Architect", new ArrayList<>(Arrays.asList(course1, course2, course3, course4)));Student satish = new Student("Student2", "Satish T","Hiker, Programmer and Architect", new ArrayList<>(Arrays.asList(course1, course2, course3, kursus4))); student.add (ranga); siswa StudentId) {Siswa Siswa = RetriEvestudent (StudentId); if (student == null) {return null;} return student.getCourses ();} retrievecourse kursus publik (string studentId, string courseId) {student = retrievestudent (studentId); if (student == null) {return null {return {studentid (studentId); if student == null) {return coule; (course.getId (). Equals (CourseId)) {return course;}} return null;} private SecureRandom acak = new SecureDom (); Public Course AddCourse (String StudentID, kursus kursus) {Student Student = retriEvestudent (StudentId); if (student == null) {return null;} string randomid = acak) .toString (32); course.setid (acak); student.getCourses (). Tambah (kursus); kursus kembali;}}src/main/java/com/in28minutes/springboot/studentservicesapplication.java
package com.in28minutes.springboot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class StudentServicesApplication {public static void main(String[] args) {SpringApplication.run (siswaServicesApplication.class, args);}}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.