บทนำ: บทความนี้จะช่วยให้คุณสร้างบริการ REST อย่างง่ายโดยใช้ Spring Boot
คุณจะได้เรียนรู้
บริการส่วนที่เหลือที่ใช้ในบทช่วยสอนนี้
ในบทช่วยสอนนี้เราจะสร้างสามบริการโดยใช้วิธี URI และ HTTP ที่เหมาะสม:
@getMapping ("/นักเรียน/{studentId}/หลักสูตร"): คุณสามารถสอบถามหลักสูตรที่นักเรียนเฉพาะได้ลงทะเบียนด้วยการใช้วิธีการขอและตัวอย่าง URI/นักเรียน/นักเรียน 1/หลักสูตร
@getMapping ("/นักเรียน/{studentId}/หลักสูตร/{courseid}"): คุณสามารถใช้วิธีการขอและตัวอย่าง URI/นักเรียน/นักเรียน 1/หลักสูตร/หลักสูตร 1 เพื่อรับหลักสูตรเฉพาะสำหรับนักเรียนที่เฉพาะเจาะจง
@PostMapping ("/นักเรียน/{studentId}/หลักสูตร"): คุณสามารถลงทะเบียนหลักสูตรสำหรับนักเรียนได้โดยส่งคำขอโพสต์ไปยัง Uuri/Students/Student1/หลักสูตร
เครื่องมือที่คุณต้องการ
สปริงบูตที่สมบูรณ์ตัวอย่างรหัสโครงการ Maven
พื้นที่เก็บข้อมูล GitHub ของเรามีตัวอย่างรหัสทั้งหมด-https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files
บริการ REST พร้อมการทดสอบหน่วยและการรวม
เว็บไซต์ springbootrestservices-simplerestserviceswithunitandintegrationtests.zip
ส่วนที่เหลือคืออะไร?
ส่วนที่เหลือหมายถึงการถ่ายโอนสถานะการเป็นตัวแทน ส่วนที่เหลือระบุชุดของข้อ จำกัด ทางสถาปัตยกรรม บริการใด ๆ ที่ตรงตามเงื่อนไขเหล่านี้เรียกว่าบริการพักผ่อน
ห้าเงื่อนไขสำคัญสำหรับบริการเว็บพักผ่อน:
รูปแบบครบกำหนดของริชาร์ดสัน
รูปแบบครบกำหนดของริชาร์ดสันใช้เพื่อระบุระดับวุฒิภาวะของบริการเว็บพักผ่อน ต่อไปนี้เป็นระดับและลักษณะที่แตกต่างกัน:
ระดับ 0: เปิดเผยบริการเว็บสบู่ในรูปแบบการพักผ่อน การดำเนินการที่เปิดเผยใช้บริการ REST (http: // server/getPosts, http: // server/deletePosts, http: // server/dothis, http: // server/dothat ฯลฯ )
ระดับ 1: ใช้ URI ที่ถูกต้อง (ใช้คำนาม) เพื่อเปิดเผยทรัพยากร ตัวอย่างเช่น: http: // เซิร์ฟเวอร์/บัญชี, http: // เซิร์ฟเวอร์/บัญชี/10 อย่างไรก็ตามไม่ได้ใช้วิธี HTTP
ระดับ 2: ทรัพยากรใช้วิธี URI + HTTP ที่ถูกต้อง ตัวอย่างเช่นในการอัปเดตบัญชีคุณต้องทำ สร้างบัญชีและคุณทำโพสต์ URI ดูเหมือนโพสต์/1/ความคิดเห็น/5 และบัญชี/1/เพื่อน/1
ระดับ 3: Hateoas (Hypermedia เป็นเครื่องมือของ Application State) คุณไม่เพียง แต่เข้าใจข้อมูลที่ร้องขอเท่านั้น แต่ยังรวมถึงการดำเนินการครั้งต่อไปที่ผู้บริโภคให้บริการสามารถทำได้ เมื่อขอข้อมูลเกี่ยวกับผู้ใช้ Facebook บริการ REST สามารถส่งคืนรายละเอียดของผู้ใช้และข้อมูลเกี่ยวกับวิธีรับโพสต์ล่าสุดของเขาวิธีรับความคิดเห็นล่าสุดของเขาและวิธีการดึงรายชื่อเพื่อนของเขา
ใช้วิธีการร้องขอที่เหมาะสม
ใช้วิธี HTTP เสมอ แนวทางปฏิบัติที่ดีที่สุดสำหรับแต่ละวิธี HTTP มีดังนี้:
รับ: ไม่มีอะไรควรอัปเดต มันควรจะเป็น idempotent (ผลลัพธ์เดียวกันเรียกว่าหลายครั้ง) รหัสส่งคืนที่เป็นไปได้ 200 (ตกลง) + 404 (ไม่พบ) + 400 (คำขอที่ไม่ดี)
โพสต์: ควรสร้างทรัพยากรใหม่ ส่งคืน JSON และลิงก์ไปยังแหล่งข้อมูลที่สร้างขึ้นใหม่ ใช้รหัสส่งคืนเดียวกันทุกครั้งที่ทำได้ นอกจากนี้: รหัสส่งคืน 201 (สร้าง) เป็นไปได้
ใส่: อัปเดตทรัพยากรที่รู้จัก ตัวอย่างเช่น: อัปเดตรายละเอียดลูกค้า รหัสส่งคืนที่เป็นไปได้: 200 (ตกลง)
ลบ: ใช้เพื่อลบทรัพยากร
โครงสร้างโครงการ
ภาพหน้าจอต่อไปนี้แสดงโครงสร้างของโครงการที่เราจะสร้าง
รายละเอียดบางอย่าง:
สร้างบริการ REST โดยใช้ Spring Initializr Boot
การสร้างบริการพักผ่อนด้วย Spring Initializr เป็นเค้กที่ง่ายมาก เราจะใช้ Spring Web MVC เป็นเฟรมเวิร์กเว็บเลเยอร์ของเรา
Spring Initializr http://start.spring.io/ เป็นเครื่องมือที่ยอดเยี่ยมในการ bootstrap การสร้างโครงการ boot ฤดูใบไม้ผลิ
ดังที่แสดงในรูปด้านบนจะต้องดำเนินการขั้นตอนต่อไปนี้
เริ่มต้นสปริงเริ่มต้นและเลือกสิ่งต่อไปนี้
เลือก com.in28minutes.springboot เป็นกลุ่ม
เลือกบริการนักเรียนเป็นสิ่งประดิษฐ์
เลือกการพึ่งพาต่อไปนี้
คลิกเพื่อสร้างโครงการ
นำเข้าโครงการลงในคราส ไฟล์ -> นำเข้า -> โครงการ Maven ที่มีอยู่
หากคุณต้องการทราบไฟล์ทั้งหมดของโครงการนี้คุณสามารถอ่านต่อไปได้
การใช้งานเลเยอร์ธุรกิจแอปพลิเคชัน
แอปพลิเคชันทั้งหมดต้องการข้อมูล เราจะใช้ ArrayList ซึ่งเป็นที่เก็บข้อมูลในหน่วยความจำแทนที่จะโต้ตอบกับฐานข้อมูลจริง
นักเรียนสามารถเรียนหลักสูตรได้หลายหลักสูตร หลักสูตรมีรหัสชื่อคำอธิบายและรายการขั้นตอนในการเรียนจบหลักสูตร นักเรียนมีบัตรประจำตัวประชาชนชื่อคำอธิบายและรายการหลักสูตรที่เขา/เธอลงทะเบียนในขณะนี้นักเรียนบริการให้วิธีการสาธารณะต่อไปนี้
รายการสาธารณะ retrieveallstudents () - ดึงรายละเอียดของนักเรียนทุกคน
นักศึกษาสาธารณะ Retrievestudent (String StudentID) - ดึงรายละเอียดนักเรียนเฉพาะ
รายการสาธารณะ RetrievEcourses (String StudentID) - ค้นหาหลักสูตรทั้งหมดที่ลงทะเบียนนักเรียน
หลักสูตรสาธารณะ Retrievecourse (String StudentId, String CourseID) - ดึงรายละเอียดของหลักสูตรเฉพาะที่นักเรียนได้ลงทะเบียน
หลักสูตรสาธารณะ AddCourse (String StudentID หลักสูตร) - เพิ่มหลักสูตรให้กับนักเรียนที่มีอยู่
โปรดดูไฟล์ต่อไปนี้เพื่อใช้งาน Service Class Studentservice และหลักสูตรชั้นเรียนรุ่นและนักเรียน
เพิ่มบริการพักผ่อนหลายแห่ง
Rest Service StudentController เปิดเผยบริการรับหลายรายการ
แพ็คเกจ com.in28minutes.springboot.controller; นำเข้า java.util.list; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.web.bind.annotation. org.springframework.web.bind.annotation.restcontroller; นำเข้า com.in28minutes.springboot.model.course; นำเข้า com.in28minutes.springboot.service.studentservice; @RestControllerPublic Studentservice; @getMapping ("/นักเรียน/{studentId}/หลักสูตร") รายการสาธารณะ <Seours> RetrievEcourSesForStudent (@PathVariable String studentId) {return Studentservice.RetrieVeCourses (studentId);}@getMapping ( StudentId,@PathVariable String CourseID) {return studentservice.retrieviceCourse (StudentId, CourseID);}}ใช้บุรุษไปรษณีย์เพื่อดำเนินการรับบริการ
เราจะเริ่มคำขอ http: // localhost: 8080/นักเรียน/นักเรียน 1/หลักสูตร/หลักสูตร 1 เพื่อทดสอบบริการ การตอบสนองมีดังนี้
{"id": "course1", "ชื่อ": "ฤดูใบไม้ผลิ", "คำอธิบาย": "10 ขั้นตอน", "ขั้นตอน": ["เรียนรู้ maven", "การนำเข้าโครงการ", "ตัวอย่างแรก", "ตัวอย่างที่สอง"ภาพด้านล่างแสดงวิธีที่เราดำเนินการบริการรับบุรุษไปรษณีย์ - เครื่องมือโปรดของฉันในการเรียกใช้บริการ REST
เพิ่มบริการโพสต์ส่วนที่เหลือ
เมื่อการสร้างทรัพยากรสำเร็จบริการโพสต์ควรส่งคืนสถานะที่สร้างขึ้น (201)
@PostMapping ("/นักเรียน/{studentId}/หลักสูตร") การตอบโต้สาธารณะ <Void> RegisterStudentForCourse (@PathVariable String studentId, @requestbody Course ใหม่) {หลักสูตรหลักสูตร = นักเรียน ServleturicomponentsBuilder.FromCurrentRequest (). PATH ("/{id}"). buildandexpand (course.getId ()). touri (); return responseentity.created (ตำแหน่ง) .build ();};};};};};};};ดำเนินการโพสต์ส่วนที่เหลือ
คำขอตัวอย่างแสดงด้านล่าง มันมีรายละเอียดทั้งหมดของนักเรียนที่ลงทะเบียนในหลักสูตร
{"ชื่อ": "microservices", "คำอธิบาย": "10 ขั้นตอน", "ขั้นตอน": ["เรียนรู้วิธีการแยกสิ่งต่าง ๆ ", "ทำให้นรกออกจากทุกสิ่งโดยอัตโนมัติ", "Have Fun"]}ภาพต่อไปนี้แสดงวิธีที่เราดำเนินการโพสต์บริการจากบุรุษไปรษณีย์ - เครื่องมือโปรดของฉันในการเรียกใช้บริการ REST ตรวจสอบให้แน่ใจว่าคุณไปที่แท็บร่างกายและเลือก RAW เลือก JSON จากเมนูแบบเลื่อนลง คัดลอกคำขอข้างต้นไปยังร่างกาย
URL ที่เราใช้คือ http: // localhost: 8080/นักเรียน/นักเรียน 1/หลักสูตร
ตัวอย่างรหัสกรอกข้อมูล
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> > Student-Services </artifactid> <version> 0.0.1-Snapshot </version> <packaging> jar </packaging> <name> Services Services </name> <scription> Demo Project for Spring Boot </คำอธิบาย> <carent> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Parent </artifactid> <version> 1.4.4.Release </SetainS -> </parent> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.roporting.outputEncoding> UTF-8 </project.Reporting.OutputEncoding> การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Actuator </Artifactid> </การพึ่งพาอาศัย> <การพึ่งพา> <roupId> org.springframework.boot </groupid> การพึ่งพา> <การพึ่งพา> <roupId> org.springframework.boot </groupid> <ratifactid> Spring-Boot-Devtools </artifactid> <pope> รันไทม์ </cope> การทดสอบสตาร์ท </artifactid> <pope> ทดสอบ </cope> </predency> </การพึ่งพาอาศัย> <uffer> <build> <plugins> <plugin> <roupId> org.springframework.boot </groupid>
src/main/java/com/in28minutes/springboot/controller/studentcontroller.java
นำเข้า java.net.uri; นำเข้า java.util.list; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.http.Responseentity; นำเข้า org.springframework.web.bind. org.springframework.web.bind.annotation.pathvariable; นำเข้า org.springframework.web.bind.annotation.postmapping; นำเข้า org.springframework.web.bind.annotation.Requestbody; org.springframework.web.servlet.support.servleturicomponentsbuilder นำเข้า com.in28minutes.springboot.model.course; นำเข้า com.in28minutes.springboot.service.studentservice; Studentservice; @getMapping ("/นักเรียน/{studentId}/หลักสูตร") รายการสาธารณะ <Seours> RetrievEcourSforStudent (@PathVariable String studentId) {return adudentservice.RetrieVeCourses (studentId);}@getMapping ("/นักเรียน/{studentId} StudentId,@PathVariable String CourseID) {return studentervice.retrieviceSourse (studentId, courseid);}@postmapping ("/นักเรียน/{studentid}/หลักสูตร") การตอบสนองสาธารณะ <Void> RegisterStudentForCourse null) return responseentity.nocontent (). build (); ตำแหน่ง uri = servleturicomponentsbuilder.fromcurrentrequest (). path ("/{id}"). buildandexpand (course.getId ()). touri ();src/main/java/com/in28minutes/springboot/model/course.java
นำเข้า java.util.list; หลักสูตรระดับสาธารณะ {รหัสสตริงส่วนตัว; ชื่อสตริงส่วนตัว; คำอธิบายสตริงส่วนตัว; รายการส่วนตัว <String> ขั้นตอน; // จำเป็นโดยเกิดจาก: com.fasterxml.jackson.databind.jsonmappingexception: // ไม่สามารถสร้างอินสแตนซ์ของ com.in28minutes.springboot.model.model. ตัวสร้างค่าเริ่มต้นหรือผู้สร้างหรืออาจจำเป็นต้องเพิ่ม/เปิดใช้งาน // ประเภทข้อมูล?) หลักสูตรสาธารณะ () {} หลักสูตรสาธารณะ (รหัสสตริง, ชื่อสตริง, คำอธิบายสตริง, รายการ <string> ขั้นตอน) {super (); this.id = id; this.name = name; this.description = คำอธิบาย; String getDescription () {return คำอธิบาย;} สตริงสาธารณะ getName () {return name;} รายการสาธารณะ <String> getSteps () {return steps;}@overridepublic String toString () {return string.format ("หลักสูตร [ID =%s, name =%s, คำอธิบาย =%S {สุดท้าย int prime = 31; int result = 1; result = prime * result + ((id == null)? 0: id.hashCode ()); return result;}@overridepublic บูลีนเท่ากับ (Object OBJ) {ถ้า (this == OBJ) (id == null) return false;} else ถ้า (! id.equals (อื่น ๆ )) return false; return true;}}src/main/java/com/in28minutes/springboot/model/student.java
แพ็คเกจ com.in28minutes.springboot.model; นำเข้า java.util.list; นักเรียนชั้นเรียนสาธารณะ {รหัสส่วนตัว id; ชื่อสตริงส่วนตัว; คำอธิบายสตริงส่วนตัว; รายการส่วนตัว <Cours> หลักสูตร; นักเรียนสาธารณะ (รหัสสตริง, สตริง, คำอธิบายสตริง String getId () {return id;} โมฆะสาธารณะ setId (string id) {this.id = id;} สตริงสาธารณะ getName () {return name;} โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name;} public String getDescription () {คำอธิบายกลับ; {หลักสูตรส่งคืน;} โมฆะสาธารณะ setCourses (รายการ <Sours> หลักสูตร) {this.courses = หลักสูตร;}@overridepublic String toString () {return string.format ("นักเรียน [id =%s, ชื่อ =%s, คำอธิบายsrc/main/java/com/in28minutes/springboot/service/studentservice.java
แพ็คเกจ com.in28minutes.springboot.service; นำเข้า java.math.biginteger; นำเข้า Java.security.securerandom; นำเข้า java.util.arraylist; นำเข้า java.util.arrays; นำเข้า Java.util.list; com.in28minutes.springboot.model.course; นำเข้า com.in28minutes.springboot.model.student; @componentpublic ชั้นเรียนนักศึกษาระดับสูง maven "," นำเข้าโครงการ "," ตัวอย่างแรก "," ตัวอย่างที่สอง ")) หลักสูตรหลักสูตร 2 = หลักสูตรใหม่ (" หลักสูตร 2 "," ฤดูใบไม้ผลิ MVC "," 10 ตัวอย่าง ", array.Aslist (" เรียนรู้ maven "," นำเข้าโครงการ " ฤดูใบไม้ผลิ "," เรียนรู้สปริง MVC "," ตัวอย่างแรก "," ตัวอย่างที่สอง ")); หลักสูตรหลักสูตร 4 = หลักสูตรใหม่ (" หลักสูตร 4 "," maven "," หลักสูตร maven ที่ได้รับความนิยมมากที่สุดบนอินเทอร์เน็ต! "อาร์เรย์. Karanam "," Hiker, โปรแกรมเมอร์และสถาปนิก ", arraylist ใหม่ <> (array.aslist (หลักสูตร 1, หลักสูตร 2, หลักสูตร 3, Course4))); นักเรียน satish = นักเรียนใหม่ (" นักเรียน 2 "," Satish t "," Hiker, โปรแกรมเมอร์และสถาปนิก " Course4))); นักเรียน ADD (Ranga); นักเรียน ADD (SATISH);} รายการสาธารณะ <Tudent> retrieveAllstudents () {return student;} นักเรียนสาธารณะเรียกคืน (String studentId) {สำหรับนักเรียน: นักเรียน) {if (student.getId. ) {นักเรียน = retrievestudent (studentId); ถ้า (นักเรียน == null) {return null;} return student.getCourses ();} หลักสูตรสาธารณะ Retrievecourse (String StudentId, String CourseId) {นักเรียน = retreuesTudent (studentId); if (นักเรียน == null) (course.getId (). เท่ากับ (แน่นอน)) {กลับหลักสูตร;}} return null;} securerandom ส่วนตัวสุ่ม = ใหม่ securerandom (); หลักสูตรสาธารณะ addCourse (String studentId หลักสูตร) {นักเรียนนักเรียน = Retrievestudent (studentId); if (นักเรียน == null) แบบสุ่ม) .tostring (32); course.setId (สุ่ม); student.getCourses (). เพิ่ม (หลักสูตร); กลับหลักสูตร;}}src/main/java/com/in28minutes/springboot/studentservicesapplication.java
แพ็คเกจ com.in28minutes.springboot; นำเข้า org.springframework.boot.springapplication; นำเข้า org.springframework.boot.autoconfigure.springbootaplication; @springbootaplication args);}}
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น