الخلاصة: في تطوير المشروع ، من المتوقع أن يتم فصله غالبًا عن النهايات الأمامية والخلفية ، أي غالبًا ما يحتاج مطورو النهاية الخلفية إلى إخراج عدد كبير من واجهات الخدمة. سواء أكانت Java أو PHP ولغات أخرى ، غالبًا ما يحتاج مزود الواجهة إلى إنفاق قدر معين من الجهد لكتابة مستندات الواجهة ، مثل عنوان الواجهة A ، وموقف المعلمة الذي يجب تمريره ، وتنسيق بيانات JSON لقيمة الإرجاع ، ووصف كل حقل. بالطبع ، يحتاج أيضًا إلى النظر في رؤوس طلب HTTP ومحتوى الطلب والمعلومات الأخرى. مع تقدم المشروع بسرعة ويتكرر بسرعة ، غالبًا ما تواجه الواجهات التي تخرجها الواجهة الخلفية مشاكل مثل التعديل والإصلاح ، مما يعني أيضًا أنه يجب أيضًا تعديل مستندات الواجهة وفقًا لذلك. يتم تقليل صيانة وثائق الواجهة إلى حد كبير.
نظرًا لأن وثيقة الواجهة تتطلب صيانة الطاقة والاتصالات المناسبة وجهاً لوجه ، فلماذا لا نفكر في حل؟ أولاً: لا تحتاج إلى كتابة مستندات الواجهة ؛ ثانياً: عندما يتواصل الواجهة الأمامية والمشاكل في الواجهة الخلفية ، هل يمكن أن توفر الواجهة الخلفية عنوان URL؟ اذكر جميع واجهات الخدمة التي يمكن استدعاؤها في عنوان URL هذا ، وسرد المعلمات ووصف قيمة الإرجاع في كل واجهة خدمة. ثالثًا: إذا كانت الواجهة الخلفية يمكنها محاكاة المكالمات ، فسيتم حل جميع المشكلات. في هذه المقالة ، سوف نركز على شرح إطار Swagger2 المتكامل في Sringboot.
1.1. إضافة Swagger2 التبعية
أضف التبعيات التالية إلى ملف POM.XML للمشروع.
<Rependency> <roupEd> io.springfox </rougiD> <StifactId> springfox-swagger2 </shintifactid> <splection> 2.7.0 </version> </repreadency> <sropency> io.springfox </groupend>
أولاً ، نحتاج إلى إنشاء فئة بدء تشغيل ، والرمز كما يلي:
springbootapplicationpublicpublic application {public static void main (string [] args) {springapplication.run (application.class ، args) ؛ }}ثم قم بإنشاء فئة تكوين جديدة لـ Swagger2 في نفس المستوى من الفئة أعلاه على النحو التالي:
@configuration @enlobeswagger2public class Swagger2 {bean public docket createrestapi () {return new docket (documentationType.swagger_2) .ApiInfo (apiinfo ()) .Appis (requestHandlersElectors.BasePackageage ("com.shareniu.web")). .يبني()؛ } private Apiinfo Apiinfo () {return new ApiinFobuilder () .Title ("اتبع مشاركة NIU لتعلم دورات سلسلة SPRINGBOOT Source Code Series"). .Contact ("niu") .license ("حقوق الطبع والنشر 2017-2018 share niu") .version ("1.0") .build () ؛ }}قامت Configuration بصياغة أن Spring يجب أن يقوم بتحميل هذه الفئة ، ويجب أن يمكّن EnloberWagger2 التعليق التوضيحي وظيفة Swagger.
سيتم عرض apiinfo في ما سبق في النهاية على الواجهة الأمامية. نستخدم حزمة المسح الضوئي لتكوين التكوين ، أي ، requestHandlersElectors.BasePackage. تقوم وحدات التحكم في هذه الحزمة وحقائب الفرعية بإنشاء مستندات API في النهاية. (باستثناء الطلبات المحددة بواسطة apiignore شرح).
1.2. تعليمات الوثائق المضافة
بعد إعلان الفئة أعلاه ، يمكننا أن نسميها فعليًا مباشرة ، ولكن من أجل زيادة قابلية قراءة المستند ، ما زلنا بحاجة إلى إضافة بعض الإرشادات إلى الواجهة. لنكتب وحدة تحكم أولاً على النحو التالي:
@restController@requestMapping (value = "/user") الفئة العامة USERCONTROLLER {static map <Long ، user> users = collections.synchronizedMap (new hashmap <long ، user> ()) ؛ static {user user = new user () ؛ user.setage (18) ؛ user.setid (1L) ؛ user.setName ("aa") ؛ المستخدمين (1L ، المستخدم) ؛ } apiOperation (value = "get all user list" ، notes = "") requestMapping (value = {"" "} ، method = requestMethod.get) قائمة عامة <suster> getUserList () {list <Ser> r = new ArrayList <Seter> (user.values ()) ؛ العودة ص. } apiOperation (value = "إنشاء مستخدم جديد" ، notes = "قم بإنشاء مستخدم من كائن المستخدم") apiImplicitParam (name = "user" ، value = "مستخدم مفصل المستخدم" ، مطلوب = true ، datatype = "user") erquestmapping (value = "" requestmethod.post) مستخدم)؛ إرجاع "النجاح" ؛ } apiOperation (value = "الحصول على تفاصيل المستخدم" ، notes = "احصل على تفاصيل المستخدم بناءً على معرف عنوان url") apiImplicitParam (name = "id" ، value = "user id" ، required = true ، dataType = "long") @redupappapping (value = "/{id}" ، method = requestmet.get) } apiOperation (value = "تحديث تفاصيل المستخدم" ، notes = "حدد تحديث كائن وفقًا لمعرف url") apiImplicitParams ({apiImplicitParam (name = "id" ، value = "user id" }) @requestMapping (value = "/{id}" ، method = requestMethod.put) السلسلة العامة putuser ( @pathvariable id ، مستخدم requestbody user) {user u = user.get (id) ؛ U.SetName (user.getName ()) ؛ U.Setage (user.getage ()) ؛ users.put (id ، u) ؛ إرجاع "النجاح" ؛ } apiOperation (value = "حذف المستخدمين الحاليين" ، notes = "حدد الكائن الحذف وفقًا لمعرف url") apiImplicitParam (name = "id" ، value = "user id" ، مطلوب = true ، dataType = "long") @requestmapping (value = {id} ، method = requestMethId.dele) users.remove (id) ؛ إرجاع "النجاح" ؛ }} apiOperation: تستخدم لوصف وظيفة هذه الواجهة. يمكن أن يفسر هذا التعليق التوضيحي مسؤوليات الواجهة ، ومعلومات رأس الإرجاع ، وطريقة الطلب للطريقة ("Get" ، و "Head" ، و "Post" ، و "PUT" ، و "Delete ، و" Options "و" Patch ") ، و Protocol (HTTP ، و HTTPS ، و WS ، و WSS) ، و HTTP.
apiimplicitparam: تستخدم لإضافة أوصاف إلى المعلمات. يمكنك تعيين اسم المعلمة ، سواء كان عنصرًا مطلوبًا ، أو معلومات الوصف للمعلمة ، سواء كانت للقراءة فقط ، إلخ.
بعد إرسال الرمز أعلاه ، ابدأ Springboot وزيارة http://127.0.0.1:8080/swagger-ui.html كما هو موضح في الشكل أدناه:
الصورة أعلاه مقسمة إلى جزأين. يتم تكوين الجزء العلوي من خلال فئة Swagger2 ، والجزء السفلي هو مستند الواجهة في فئة UserController.
هنا نستخدم /المستخدم كمثال لتوضيح:
انقر /المستخدم كما هو موضح في الشكل التالي:
تُظهر البقعة الصفراء أعلاه بيانات العينة التي يتم إرجاعها بواسطة هذه الواجهة. وهذا هو ، بنية بيانات المستخدم. نوع محتوى الاستجابة: معلومات الرأس التي يتم إرجاعها بواسطة الواجهة. انقر فوق جربه. كما هو موضح أدناه:
تم إرجاع رؤوس Baody والرمز والاستجابة التي تم إرجاعها بواسطة هذه الواجهة بنجاح.
لخص
ما سبق هو طريقة دمج إطار Swagger2 في Springboot الذي قدمه لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!