مقدمة: ستساعدك هذه المقالة على إنشاء خدمة راحة بسيطة باستخدام SPRING Boot.
سوف تتعلم
خدمة REST المستخدمة في هذا البرنامج التعليمي
في هذا البرنامج التعليمي ، سنقوم بإنشاء ثلاث خدمات باستخدام أساليب URI و HTTP المناسبة:
getMapping ("/studentire/{studentId}/evingsse"): يمكنك الاستعلام عن دورات التي سجلها طالب معين باستخدام طريقة الطلب وعينة URI/students/student1/dourses.
getMapping ("/studentire/{studentId}/{{coursid}"): يمكنك استخدام طريقة الطلب GET وتذوق URI/students/student1/courses/cours1 للحصول على دورة محددة لطالب معين.
postmapping ("/students/{studentId}/courses"): يمكنك تسجيل دورة للطلاب عن طريق إرسال طلب البريد إلى uuri/student
الأدوات التي ستحتاجها
إكمال مثال رمز مشروع راحة التمهيد الربيع
يحتوي مستودع github الخاص بنا على جميع أمثلة التعليمات البرمجية-https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files
خدمة REST مع اختبارات الوحدة والتكامل
الموقع الإلكتروني springbootrestservices-simplerestServicesWithUnitAndIntEntegrationTests.zip
ما هو بقية؟
الباقي يرمز إلى نقل الدولة التمثيلية. يحدد REST مجموعة من القيود المعمارية. أي خدمة تلبي هذه الشروط تسمى خدمة مريحة.
خمسة شروط مهمة لخدمة الويب المريحة:
نموذج نضج ريتشاردسون
يتم استخدام نموذج Richardson Maturity لتحديد مستوى استحقاق خدمة الويب المريحة. فيما يلي المستويات والخصائص المختلفة:
المستوى 0: فضح خدمات الويب الصابون بأسلوب الراحة. تستخدم العمليات المكشوفة خدمة REST (http: // server/getPosts ، http: // server/deleteposts ، http: // server/dothis ، http: // server/dothat ، etc.).
المستوى 1: استخدم URI الصحيح (باستخدام الاسم) لفضح المورد. على سبيل المثال: http: // server/accounts ، http: // server/accounts/10. ومع ذلك ، لا يتم استخدام طريقة HTTP.
المستوى 2: يستخدم المورد طريقة URI + HTTP الصحيحة. على سبيل المثال ، لتحديث الحساب ، تحتاج إلى القيام بوضع. قم بإنشاء حساب وأنت تنشر منشورًا. يشبه URI المشاركات/1/تعليقات/5 وحسابات/1/أصدقاء/1.
المستوى 3: Hateoas (Hypermedia كمحرك لحالة التطبيق). لا يمكنك فقط فهم المعلومات المطلوبة ، ولكن أيضًا الإجراء التالي المحتمل الذي يمكن للمستهلكين في الخدمة اتخاذه. عند طلب معلومات حول مستخدم Facebook ، يمكن لخدمة REST إرجاع تفاصيل المستخدم والمعلومات حول كيفية الحصول على مشاركاته الحديثة ، وكيفية الحصول على تعليقاته الأخيرة ، وكيفية استرداد قائمة أصدقائه.
استخدم طريقة الطلب المناسبة
استخدم دائمًا طريقة HTTP. أفضل الممارسات لكل طريقة HTTP هي كما يلي:
الحصول على: لا ينبغي تحديث أي شيء. يجب أن تكون غير معتدل (تسمى نفس النتيجة عدة مرات). رمز الإرجاع المحتمل 200 (موافق) + 404 (غير موجود) + 400 (طلب سيء)
بعد: يجب إنشاء موارد جديدة. إرجاع JSON بشكل مثالي وربط الموارد التي تم إنشاؤها حديثًا. استخدم نفس رمز الإرجاع كلما كان ذلك ممكنًا. أيضا: رمز الإرجاع 201 (تم إنشاؤه) ممكن.
وضع: تحديث الموارد المعروفة. على سبيل المثال: تحديث تفاصيل العميل. رمز الإرجاع المحتمل: 200 (موافق)
حذف: يستخدم لحذف الموارد.
هيكل المشروع
تُظهر لقطة الشاشة التالية هيكل المشروع الذي سنقوم بإنشائه.
بعض التفاصيل:
قم بإنشاء خدمة REST باستخدام SPRING INITALIZR BOOT
يعد إنشاء خدمة REST مع Spring initializr قطعة من الكعكة سهلة للغاية. سنستخدم Spring Web MVC كإطار طبقة الويب الخاصة بنا.
Spring initializr http://start.spring.io/ هي أداة رائعة لخوض إنشاء مشاريع التمهيد الربيع.
كما هو موضح في الشكل أعلاه ، يجب تنفيذ الخطوات التالية
ابدأ الربيع initializr وحدد ما يلي
حدد com.in28minutes.springboot كمجموعة
حدد الخدمات الطالب كقنين
حدد التبعيات التالية
انقر لإنشاء المشروع.
استيراد المشروع إلى Eclipse. ملف -> استيراد -> مشاريع Maven الحالية.
إذا كنت تريد معرفة جميع ملفات هذا المشروع ، فيمكنك متابعة القراءة لأسفل.
تطبيق طبقة أعمال التطبيق
تتطلب جميع التطبيقات بيانات. سوف نستخدم ArrayList ، وهو متجر بيانات في الذاكرة ، بدلاً من التفاعل مع قاعدة بيانات حقيقية.
يمكن للطالب أخذ دورات متعددة. تحتوي الدورة التدريبية على معرف واسم ووصف وقائمة من الخطوات لإكمال الدورة. لدى الطالب بطاقة هوية واسم ووصف وقائمة من الدورات التدريبية التي يتم تسجيلها حاليًا. يقدم الطلاب الأساليب العامة التالية
القائمة العامة RetrievealLstudents () - استرداد تفاصيل جميع الطلاب
استرداد الطلاب العامين (سلسلة طالب) - استرداد تفاصيل طالب محددة
القائمة العامة Retrievecourses (String StudentId) - ابحث في جميع الدورات التي يسجلها الطلاب
Retrievecourse الدورة العامة (String StudentId ، String CourseID) - استرداد تفاصيل دورة محددة قام بها الطالب بتسجيله
الدورة العامة AddCourse (سلسلة طالب ، دورة الدورة) - إضافة دورات للطلاب الحاليين
يرجى الرجوع إلى الملفات التالية لتنفيذ خدمة طلاب فئة الخدمة ودورة الفصل الطالب والطالب.
أضف العديد من خدمات الحصول على الراحة
REST Service StudentController تكشف العديد من الخدمات الحصول على الخدمات.
package com.in28minutes.springboot.controller ؛ import java.util.list ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ import org.springframework.web.bind.annotation.getMapping ؛ org.springframework.web.bind.annotation.restController ؛ استيراد com.in28minutes.springboot.model.course ؛ studentService ؛ getMapping ("/students/{{studentId}/compleses") قائمة عامة <STERNIVECOURSESFORSTUDENT (@pathvariable string studentId) {return studentervice.RetRieveCourses (studentId) ؛}@getMapping ("/{studentId}/coursess/{coursided} studentId ،@pathvariable string coursid)استخدم ساعي البريد لأداء خدمة
سنقوم بتشغيل طلب إلى http: // localhost: 8080/student/student1/courses/course1 لاختبار الخدمة. الاستجابة كما يلي.
{"id": "course1" ، "name": "Spring" ، "Description": "10 Steps" ، "Steps": ["Learn Maven" ، "Import Project" ، "First Example" ، "Second Example"]}تُظهر الصورة أدناه كيف نقوم بتنفيذ خدمة Get's Get -Service - أداتي المفضلة لتشغيل خدمة REST.
أضف خدمة ما بعد الراحة
عندما يكون إنشاء الموارد ناجحًا ، يجب أن تُرجع الخدمة المنشور الحالة التي تم إنشاؤها (201).
postmapping ("/students/{studentId}/courseses") الاستجابة العامة <void> registerStudentForCourse ( @pathvariable string studentId ، @requestbody course newcourse) {course courd servleturicomponentsbuilder.fromcurrentRequest (). path ("/{id}"). buildandexpand (course.getID ()تنفيذ خدمة ما بعد الراحة
يظهر طلب العينة أدناه. أنه يحتوي على جميع تفاصيل الطلاب المسجلين في الدورة.
{"name": "microservices" ، "الوصف": "10 خطوات" ، "خطوات": ["تعلم كيفية كسر الأشياء" ، "أتمتة الجحيم من كل شيء" ، "استمتع"]}تُظهر الصورة التالية كيف نقوم بتنفيذ خدمة Post Service من Postman - أداتي المفضلة لتشغيل خدمة REST. تأكد من الذهاب إلى علامة تبويب الجسم وحدد RAW. حدد JSON من القائمة المنسدلة. انسخ الطلب أعلاه إلى الجسم.
عنوان URL الذي نستخدمه هو http: // localhost: 8080/students/student1/egrses.
مثال رمز كامل
pom.xml
<؟ Xmlns: XSI = "http://www.w3.org/2001/xmlschema-instance" http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion><groupid> com.in28minutes.springboot </groupid><artifactid > خدمات الطلاب </artifactId> <splection> 0.0.1-snapshot </version> <cplaging> جرة </packaging> <name> خدمات للطلاب </name> <spried> Demo مشروع لـ Spring Boot </description> <parent> <roupiD> org.springframework.boot </rougeid> <Stifactid> spring-boot-starter-parent </shintifactid> <soph> 1.4.4 -> </parent> <Properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reporting.outputencoding> التبعية> <rougiD> org.springframework.boot </rougiD> <intifactid> spring-boot-starter-actuator </shintifactid> </premotency> <rependency> <roupid> org.springframework.boot </rougiD> التبعية> <Rependency> <roupeD> org.springframework.boot </rougiD> <StifactId> spring-boot-boot-devtools </stifactid> <scope> وقت التشغيل </scope> </respency> <sperency> <roupiD> org.springframework.boot </groupid> اختبار بداية </artifactid> <scope> اختبار </scope> </sependency> </rependencies> <build> <ultipins> <clupin> <roupled> org.springframework.boot </rougiD> </nupmonsid> spring-boot-poot-plugin </artifactid> </plugin> </build> </build
SRC/MAIN/JAVA/COM/In28minutes/Springboot/Controller/StudentController.java
استيراد java.net.uri ؛ استيراد java.util.list ؛ استيراد org.springframework.beans.factory.annotation. 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 ؛ studentService ؛ getMapping ("/students/{{studentId}/complices") قائمة عامة <STERNIVECOURSFORSTUDENT (@pathvariable string studentId) {return studentervice.RetRieveCourses (studentId) ؛} getMapping ("/studentId}/coursess/{coursidid} studentId ،@pathvariable string coursid) {return studentervice.retrievecourse (studentId ، coursid) ؛}@postmapping ("/studenties/{studentId}/courses") الاستجابة العامة <VOID> registerTudentForCourse (@pathvariable stringd ، requestbody course) null) return represseentity.nocontent (). build () ؛ uri location = servleTuRicomponentsBuilder.fromCurrentRequest (). path ("/{id}").SRC/MAIN/JAVA/COM/In28minutes/Springboot/Model/Course.java
استيراد java.util.list ؛ دورة الفئة العامة {معرف السلسلة الخاصة ؛ اسم السلسلة الخاصة ؛ وصف السلسلة الخاصة ؛ قائمة خاصة <string> الخطوات ؛ مُنشئ أو منشئ افتراضي ، أو ربما يحتاج إلى إضافة/تمكين // نوع المعلومات؟) الدورة العامة () {} الدورة العامة (معرف السلسلة ، اسم السلسلة ، وصف السلسلة ، قائمة <string> الخطوات) {super () ؛ this.id = id ؛ this.name = name ؛ ID ؛} السلسلة العامة getDescription () {return description ؛} السلسلة العامة getName () {return name ؛} القائمة العامة <string> getSteps () {return steps ؛}@orguperipublic toString () {return string.format ("id = ٪ s ، name s ، descript ، step = ٪ s] hashCode () {Final int prime = 31 ؛ int result = 1 ؛ result = prime * result + ((id == null)؟ 0: id.hashcode ()) ؛ return return ؛}@Overridepublic boolean متساوٍ (get abj) {if (this == obj) obj ؛ if (id == null) return false ؛} آخر إذا (! id.equals (other.id)) إرجاع خطأ ؛ إرجاع true ؛}}SRC/MAIN/JAVA/COM/In28minutes/Springboot/Model/Student.java
package com.in28minutes.springboot.model ؛ استيراد java.util.list ؛ طالب الطبقة العامة {معرف السلسلة الخاصة ؛ اسم السلسلة الخاصة ؛ وصف السلسلة الخاصة ؛ القائمة الخاصة <STERNAY> الدورات ؛ الطالب العام (معرف السلسلة ، اسم السلسلة ، الوصف ، القائمة <STER>) {super () getId () {{معرف الإرجاع ؛} public void setId (string id) {this.id = id ؛} السلسلة العامة getName () {return name ؛} public void setName (اسم السلسلة) {this.name = name ؛ الدورات التدريبية ؛} setCourses public void (قائمة <STER> الدورات) {this.courses = courses ؛}@orgretridepublic string toString () {return string.format (SRC/MAIN/JAVA/COM/In28minutes/Springboot/Service/StudentService.java
package com.in28minutes.springboot.service ؛ import java.math.biginteger ؛ import java.security.securerandom ؛ import java.util.arraylist ؛ import java.util.arrays ؛ import java.util.list ؛ import org.springframework.stereType.com. com.in28minutes.springboot.model.course ؛ import com.in28minutes.springboot.model.student ؛@componentpublic class studentervice {private static list <Student> students = New ArrayList <> () ؛ static {// initial dataCourse course1 = new cours Maven "،" Project Project "،" المثال الأول "،" المثال الثاني ""))) الربيع "،" تعلم الربيع MVC "،" المثال الأول "،" المثال الثاني "))) Karanam "،" Hiker ، Programmer and Architect "، New ArrayList <> (Arrays.Aslist (Course1 ، Course2 ، Course3 ، Course4))) ؛ الطالب Satish = طالب جديد (" Student2 "،" Satish T "،" Hiker ، Programmer and Architect Course4))) {student student = retrievestudent (studentId) ؛ if (student == null) {return null ؛} return student.getCourses () ؛} Retrievecourse public receptecourse (String studentId ، String coursid) {studentid student. (course.getId (). equals (courseid)) {return course ؛}} return null ؛} securerandom private random = new Securerandom () ؛ public addcourse (string studentId ، دورة الدورة) {studentd student = new Biginteger (130 ، عشوائي) .ToString (32) ؛ course.setId (عشوائي) ؛ student.getCourses ()SRC/MAIN/JAVA/COM/in28minutes/Springboot/studentservicesapplication.java
package com.in28minutes.springboot ؛ استيراد org.springframework.boot.springapplication ؛ استيراد org.springframewokor {springapplication.run (studentervicesapplication.class ، args) ؛}}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.