التحضير لشهادة الربيع المهنية. راحة الربيع

سوف تغطي مقالة اليوم الأسئلة الأساسية حول REST in Spring. سيكون مفيدًا بشكل خاص للمبرمجين المبتدئين.


الدليل الرسمي من Pivotal ، الذي يقول عن مواضيع للتحضير.



جدول المحتويات
  1. حقن التبعية ، حاوية ، IoC ، والفاصوليا
  2. AOP (البرمجة الموجهة نحو الجوانب)
  3. JDBC ، المعاملات ، JPA ، بيانات الربيع
  4. التمهيد الربيع
  5. ربيع mvc
  6. أمن الربيع
  7. REST
  8. تجريب



Spring REST جزء من Spring MVC. لذلك ، سيتم استخدام الكثير من Spring MVC في REST والعكس بالعكس. لإلقاء نظرة أكثر تعمقا على Spring MVC ، اقرأ هذه المقالة .


ما تم إنشاء REST من أجله؟

لفهم مفهوم REST ، تحتاج إلى تحليل الاختصار في مكوناته:


  • التمثيل - الموارد في REST يمكن تمثيلها بأي شكل - JSON أو XML أو نص أو حتى HTML - يعتمد على البيانات الأكثر ملاءمة للمستهلك
  • الحالة - عند العمل مع REST ، يجب أن تركز على حالة المورد ، وليس على الإجراءات مع المورد
  • نقل - يشمل REST نقل بيانات المورد ، بأي شكل من الأشكال ، من تطبيق إلى آخر.

REST هو نقل حالات الموارد بين الخادم والعميل.


ما هو المورد؟

المورد في REST هو كل ما يمكن نقله بين عميل وخادم.
فيما يلي بعض الأمثلة للموارد:


  • أخبار
  • درجة الحرارة في سان بطرسبرغ يوم الاثنين الساعة 4 صباحًا
  • راتب الموظف
  • اختيار قاعدة البيانات
  • نتيجة البحث

ماذا يقف كرود؟

يتم تحديد الإجراءات في REST بواسطة طرق http.
Get ، Post ، Put ، Delete ، Patch ، وغيرها.


يشار إلى الأكثر استخداما من قبل اختصار CRUD:


  • إنشاء - POST
  • قراءة - GET
  • تحديث - وضع
  • حذف - DELETE

هل REST آمن؟ كيف يمكنك حمايته؟

بشكل افتراضي ، REST غير آمن.


يمكنك تكوين الأمان باستخدام Basic Auth و JWT و OAuth2

.
ما هو حفظ العمليات؟

هذه هي العمليات التي لا تعدل الموارد. وهنا قائمة منهم:


  • GET
  • الرأس
  • OPTIONS

ما هي العملية العاطفية؟ ما أهمية العاطفة؟

طرق Idempotent هي طرق يكون لكل طلب فيها النتيجة نفسها.


أي أن النتيجة بعد استدعاء واحد لهذه الطريقة ستكون هي نفسها النتيجة بعد 10 مكالمات من هذه الطريقة.


هذا مهم لواجهة برمجة التطبيقات التي تتحمل الأخطاء. لنفترض أن العميل يريد تحديث مورد باستخدام طلب POST؟ إذا لم يكن POST طريقة عشوائية ، فستتسبب مكالمة متعددة في حدوث تحديثات غير متوقعة للموارد. باستخدام الأساليب العاطفية ، فإنك تحمي نفسك من العديد من الأخطاء.


هل مقياس REST جيد؟

نعم. بقية المقاييس بشكل جيد لأنه لا يخزن الحالة.


هذا يعني أنه لا يخزن معلومات جلسة المستخدم على الخادم.


يجب ألا يتم تخزين معلومات العميل على جانب الخادم ، ولكن يجب إرسالها في كل مرة إلى حيث تكون هناك حاجة إليها. هذا هو ما تعنيه ST في REST ، نقل الولاية. يمكنك تمرير الدولة ، وليس تخزينها على الخادم.


REST أيضًا قابلاً للتشغيل المتداخل - وهذا يعني أن البرامج المختلفة المكتوبة بلغات مختلفة يمكن أن تتفاعل عليها. هذا يأتي من 2 عوامل:


  • عملاء HTTP المتداخلين. يجب على العملاء المختلفين إرسال نفس طلبات HTTP.
  • إمكانية التشغيل المتداخل على مستوى أنواع الوسائط. يجب على العملاء المختلفين إرسال وتلقي نفس الموارد بشكل صحيح.

ما هو HttpMessageConverter؟

HttpMessageConverter يحول الطلب إلى كائن والعكس بالعكس.


يحتوي Spring على العديد من تطبيقات هذه الواجهة ، ويمكنك إنشاء الخاصة بك.


في هذه الحالة ، لا يستخدم DispatcherServlet Model and View.


في REST ، النموذج والعرض غير موجودة على الإطلاق. لا يوجد سوى البيانات التي يتم توفيرها بواسطة وحدة التحكم وتمثيل المورد عندما يتم تحويل الرسالة من نوع وسائط (json، xml ...) إلى كائن.


قائمة المحولات:


BufferedImageHttpMessageConverter - يحول BufferedImage إلى (من) رمز الصورة.


Jaxb2RootElementHttpMessageConverter - يحول xml إلى (من) كائن مميز بتعليقات jaxb2. سجل إذا jaxb2 في classpath.


MappingJackson2HttpMessageConverter - يحول JSON إلى (من) كائن. قم بالتسجيل إذا كان Jackson 2 في classpath.


StringHttpMessageConverter - يحول جميع ملفات الوسائط إلى نص / عادي.


كيف يعمل التعليق التوضيحيRestController؟

يتم وضع @RestController في فئة وحدة التحكم بدلاً من @Controller . وتشير إلى أن هذا الفصل لا يعمل على النماذج ، ولكن على البيانات. يتكون من @RequestBody و @RequestBody .


 @Controller @ResponseBody public interface RestController 

لماذا @ ريسبونس بودي؟

يتم وضع @ResponseBody على الأساليب التي تعمل مع البيانات ، وليس مع النماذج. لا يلزم تحديده بشكل صريح إذا @RestController استخدام @RestController .


الأساليب المعتادة ترجع Model ، @ResponseBody الطرق المشروحة @ResponseBody الكائنات التي يتم تحويلها إلى ملفات الوسائط باستخدام HttpMessageConverter .


ماذا يفعل التعليق التوضيحيRequestMapping؟

يستخدم هذا التعليق التوضيحي لتعيين الطلبات للتحكم في الطبقات والأساليب.
في السابق ، كان يستخدم لطرق الفصل للإشارة إلى URI ، وطريقة http ، ونوع البيانات المرسلة ، إلخ. في الإصدارات الأحدث من Spring ، تم استبداله @GetMapping توضيحية @GetMapping ، @PostMapping ، إلخ.


الآن يتم استخدامه فقط للإشارة إلى URI إلى فئة وحدة التحكم.


ما هي التعليقات التوضيحيةGetMapping وPostMapping وDeleteMapping وغيرها؟

هذه تعليقات توضيحية أضيق لتعيين أساليب http.


  • @GetMapping - الحصول على طلبات الحصول على مقابض
  • @PostMapping - يعالج طلبات النشر
  • @DeleteMapping - مقابض حذف الطلبات
  • @PutMapping - وضع مقابض الطلبات
  • @PatchMapping - يعالج طلبات التصحيح

كل شيء مكتوب أدناه هو أيضا سمة من الشروح الأخرى.


AnnotationGetMapping هو مجرد تعليق توضيحي يحتوي على RequestMapping (الطريقة = RequestMethod.GET) .
كما يسمح لك بضبط طريقة المعالج.
المعلمات الخاصة به (يتم تحويلها إلى معلمات مماثلةRequestMapping):


  • path - URI
  • headers - رؤوس
  • name - اسم المعالج
  • المعلمات - المعلمات
  • produces - نوع البيانات التي تم إرجاعها (JSON ، XML ، نص). المستخدمة في REST
  • consumes - نوع البيانات المستلمة. المستخدمة في REST


    بشكل افتراضي ، يأخذ التعليق التوضيحي المسار إلى الطريقة.
    @GetMapping("managers") = @GetMapping(path = "managers")



لماذا استخدام التعليق التوضيحيRequestParam؟

يتم استخدام هذا التعليق التوضيحي حتى تتمكن أساليب المعالج من الحصول على معلمات من طلب http.


طلب مع المعلمات: http://localhost:8080/getByName/name=Ivan .
الكود التالي سوف يضع السلسلة Ivan في name المتغير.


 @GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) { //some logic } 

لماذا استخدام التعليق التوضيحيPathVariable؟

يحصل هذا التعليق التوضيحي على جزء محدد من URI.


URI: http://localhost:8080/getById/23


سيضع الكود التالي 23 في متغير المتغير.


 @GetMapping("getById/{id}") public User getUserById(@PathVariable("id") String id) { //some logic } 

ماذا تعني الرموز المختلفة لاستجابات http؟

الحصول على - 200 موافق


POST - 200 OK ، 201 تم الإنشاء ، 204 لا يوجد محتوى


وضع - 200 موافق ، 201 تم الإنشاء ، 204 لا يوجد محتوى


حذف - 204 لا يوجد محتوى ، 202 مقبول


لماذا أحتاج إلى تعليق توضيحيResponseStatus؟

انها تسمح لك لضبط رمز الاستجابة. عادةً ، يعيّن Spring نفسه رمز الاستجابة المطلوب ، ولكن هناك أوقات تحتاج فيها إلى تجاوزها.


 @PostMapping @ResponseStatus(HttpStatus.CREATED) public void add(...) {...} 

بدلاً من استخدام التعليقات التوضيحية ، يمكنك إرجاع ResponseEntity وتعيين رمز الاستجابة يدويًا.


باستخدام ResponseEntity و @ReponseStatus معاً غير مستحسن.


ما هو ResponseEntity؟

هذه فئة خاصة تمثل استجابة http. أنه يحتوي على نص الاستجابة ورمز الحالة والرؤوس. يمكننا استخدامه لضبط استجابة http.


إنه نوع عالمي ، ويمكن استخدام أي كائن كجسم:


 @GetMapping("/hello") ResponseEntity hello() { return new ResponseEntity("Hello World!", HttpStatus.OK); } 

لماذاRequestBody؟

يمكنك استخدام التعليق التوضيحي @RequestBody على معلمة أسلوب بحيث يتم تحويل نص الطلب إلى هذه المعلمة.


 @PostMapping("accounts") //,   JSON    Account public void handle(@RequestBody Account account) {...} 

يمكنك استخدام @Validated مع @RequestBody للتحقق من وجود طلب.


ما هو RestTemplate؟ ما هي مزاياه؟

RestTemplate هو عميل خاص في Spring لإرسال طلبات http. يوفر واجهات برمجة تطبيقات مريحة للاتصال بسهولة بنقاط النهاية REST على سطر واحد.


 RestTemplate restTemplate = new RestTemplate(); String fooResourceUrl = "http://localhost:8080/spring-rest/foos"; ResponseEntity response = restTemplate.getForEntity(fooResourceUrl + "/1", String.class); 

يمكنك معرفة المزيد حول الاستخدام في هذه المقالة .

Source: https://habr.com/ru/post/ar471140/


All Articles