บทคัดย่อ: ในการพัฒนาโครงการมักคาดว่าจะแยกออกจากด้านหน้าและด้านหลังนั่นคือนักพัฒนาปลายด้านหลังมักจะต้องส่งออกอินเทอร์เฟซบริการจำนวนมาก ไม่ว่าจะเป็น Java หรือ PHP และภาษาอื่น ๆ ผู้ให้บริการอินเตอร์เฟสมักจะต้องใช้ความพยายามในการเขียนเอกสารอินเตอร์เฟสเช่นที่อยู่ของอินเตอร์เฟส A สถานการณ์พารามิเตอร์ที่ต้องผ่านรูปแบบข้อมูล JSON ของค่าผลตอบแทนและคำอธิบายของแต่ละฟิลด์ แน่นอนว่าต้องพิจารณาส่วนหัวคำขอ HTTP เนื้อหาคำขอและข้อมูลอื่น ๆ เมื่อโครงการดำเนินไปอย่างรวดเร็วและวนซ้ำอย่างรวดเร็วอินเตอร์เฟสเอาท์พุทโดยแบ็กเอนด์มักจะประสบปัญหาเช่นการดัดแปลงและซ่อมแซมซึ่งหมายความว่าเอกสารอินเทอร์เฟซจะต้องปรับตาม การบำรุงรักษาและความสามารถในการอ่านเอกสารอินเตอร์เฟสจะลดลงอย่างมาก
เนื่องจากเอกสารอินเทอร์เฟซต้องการการบำรุงรักษาพลังงานและการสื่อสารแบบตัวต่อตัวที่เหมาะสมทำไมเราไม่นึกถึงวิธีแก้ปัญหา ขั้นแรก: คุณไม่จำเป็นต้องเขียนเอกสารอินเทอร์เฟซ ประการที่สอง: เมื่อปัญหาอินเทอร์เฟซการสื่อสารส่วนหน้าและส่วนหลังจะสามารถให้ URL ได้หรือไม่? แสดงรายการอินเทอร์เฟซบริการทั้งหมดที่สามารถเรียกได้ใน URL นี้และแสดงรายการพารามิเตอร์และคำอธิบายค่าส่งคืนในแต่ละอินเตอร์เฟสบริการ ประการที่สาม: หากอินเทอร์เฟซแบ็คเอนด์สามารถจำลองการโทรได้ปัญหาทั้งหมดจะได้รับการแก้ไข ในบทความนี้เราจะมุ่งเน้นไปที่การอธิบายเฟรมเวิร์ก Swagger2 แบบบูรณาการใน Sringboot
1.1. เพิ่มการพึ่งพา Swagger2
เพิ่มการพึ่งพาต่อไปนี้ในไฟล์ POM.XML ของโครงการ
<Ependency> <sderctId> io.springfox </groupId> <ratifactid> SpringFox-Swagger2 </artifactid> <sersion> 2.7.0 </version> </การพึ่งพา> <predency> <roupid> io.springfox </GroupId>
ก่อนอื่นเราต้องสร้างคลาสเริ่มต้นรหัสมีดังนี้:
@springbootapplicationpublic คลาสแอปพลิเคชัน {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (application.class, args); -จากนั้นสร้างคลาสการกำหนดค่าใหม่สำหรับ Swagger2 ในไดเรกทอรีระดับเดียวกันของคลาสข้างต้นดังนี้:
@การกำหนดค่า @enablewagger2public คลาส swagger2 {@bean public docket createrestapi () {ส่งคืนใบปะหน้าใหม่ (DocumentyType.swagger_2) .apiinfo (apiinfo ()). select () .สร้าง(); } ส่วนตัว apiinfo apiinfo () {ส่งคืน apiinfobuilder ใหม่ () .title ("ติดตาม Share Niu เพื่อเรียนรู้รหัสการวิเคราะห์รหัสสปริงสปริงสปริง") .Description ("สำหรับบทความที่เกี่ยวข้องกับการบูตในฤดูใบไม้ผลิ .Contact ("niu") .license ("ลิขสิทธิ์ 2017-2018 แบ่งปัน niu") .Version ("1.0"). build (); -@Configuration ได้กำหนดว่าสปริงควรโหลดคลาสนี้และ @enablewagger2 คำอธิบายประกอบควรเปิดใช้งานฟังก์ชัน Swagger
apiinfo ในที่สุดจะปรากฏขึ้นในที่สุดด้านหน้า เราใช้แพ็คเกจสแกนเพื่อกำหนดค่าการกำหนดค่านั่นคือ quorkhandlerselectors.basepackage ตัวควบคุมในแพ็คเกจนี้และแพ็คเกจย่อยในที่สุดก็สร้างเอกสาร API (ยกเว้นคำขอที่ระบุโดย @apiignore Annotation)
1.2. เพิ่มคำแนะนำเอกสาร
หลังจากการประกาศคลาสข้างต้นเราสามารถเรียกมันได้โดยตรง แต่เพื่อเพิ่มความสามารถในการอ่านเอกสารเรายังต้องเพิ่มคำแนะนำบางอย่างลงในอินเทอร์เฟซ มาเขียนคอนโทรลเลอร์ก่อนอื่น:
@restController@requestmapping (value = "/users") คลาสสาธารณะ userController {แผนที่คงที่ <ยาวผู้ใช้> ผู้ใช้ = คอลเลกชัน SynChronizedMap (HASHMAP ใหม่ <long, ผู้ใช้> ()); คงที่ {ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setage (18); user.setId (1L); user.setName ("AA"); users.put (1L, ผู้ใช้); } @apioperation (value = "รับรายชื่อผู้ใช้ทั้งหมด", notes = "") @requestmapping (value = {""}, method = requestMethod.get) รายการสาธารณะ <user> getUserList () {รายการ <ผู้ใช้> r = arrayList <ผู้ใช้> (ผู้ใช้ Return R; } @apioperation (value = "สร้างผู้ใช้ใหม่", notes = "สร้างผู้ใช้จากวัตถุผู้ใช้") @apiimplicitparam (name = "ผู้ใช้", value = "ผู้ใช้รายละเอียดผู้ใช้เอนทิตีผู้ใช้" จำเป็น = จริง, datatype = "ผู้ใช้") @requestmapping (value = "" ผู้ใช้); กลับ "ความสำเร็จ"; } @apioperation (value = "รับรายละเอียดผู้ใช้", notes = "รับรายละเอียดผู้ใช้ตามรหัสของ url") @apiimplicitparam (name = "id", value = "id ผู้ใช้", จำเป็น = จริง, datatype = "long") @requestmapping (value = "/id}" } @ApiOperation (value = "อัปเดตรายละเอียดผู้ใช้", notes = "ระบุวัตถุอัปเดตตาม URL ID") @apiimplicitparams ({@apiimplicitparam (name = "id", value = "user id", จำเป็น = true, datatype = "long"), @apiimplictParam @RequestMapping (value = "/{id}", method = requestMethod.put) สตริงสาธารณะ putuser (@PathVariable Long ID, @requestbody ผู้ใช้ผู้ใช้) {user u = users.get (id); U.SetName (user.getName ()); U.Setage (user.getage ()); users.put (id, u); กลับ "ความสำเร็จ"; } @apioperation (value = "ลบผู้ใช้ที่มีอยู่", notes = "ระบุวัตถุลบตาม ID ของ url") @apiimplicitparam (name = "id", value = "id is id", จำเป็น = true, datatype = "long") @requestmapping ผู้ใช้ลบ (id); กลับ "ความสำเร็จ"; - @apioperation: ใช้เพื่ออธิบายฟังก์ชั่นของอินเทอร์เฟซนี้ คำอธิบายประกอบนี้สามารถอธิบายความรับผิดชอบของอินเทอร์เฟซข้อมูลส่วนหัวกลับวิธีการร้องขอของวิธีการ ("รับ", "head", "โพสต์", "ใส่", "ลบ", "ตัวเลือก" และ "แพตช์"), โปรโตคอล (HTTP, https, WS, WSS) และรหัสสถานะ HTTP
@apiimplicitparam: ใช้เพื่อเพิ่มคำอธิบายลงในพารามิเตอร์ คุณสามารถตั้งค่าชื่อของพารามิเตอร์ไม่ว่าจะเป็นรายการที่จำเป็นข้อมูลคำอธิบายของพารามิเตอร์ไม่ว่าจะเป็นการอ่านอย่างเดียว ฯลฯ
หลังจากส่งรหัสด้านบนเริ่มต้นสปริงบู๊ตและเยี่ยมชม http://127.0.0.1:8080/swagger-ui.html ดังแสดงในรูปด้านล่าง:
ภาพด้านบนแบ่งออกเป็นสองส่วน ส่วนบนได้รับการกำหนดค่าผ่านคลาส Swagger2 และส่วนล่างคือเอกสารอินเตอร์เฟสในคลาส UserController
ที่นี่เราใช้ /ผู้ใช้เป็นตัวอย่างเพื่อแสดง:
คลิก /ผู้ใช้ตามที่แสดงในรูปต่อไปนี้:
จุดสีเหลืองด้านบนแสดงข้อมูลตัวอย่างที่ส่งคืนโดยอินเทอร์เฟซนี้ นั่นคือโครงสร้างข้อมูลของผู้ใช้ ประเภทเนื้อหาการตอบสนอง: ข้อมูลส่วนหัวที่ส่งคืนโดยอินเทอร์เฟซ คลิกลองใช้ ดังที่แสดงด้านล่าง:
ส่วนหัวของ Baody รหัสและการตอบกลับที่ส่งคืนโดยอินเทอร์เฟซนี้ได้รับการส่งคืนเรียบร้อยแล้ว
สรุป
ด้านบนเป็นวิธีการรวมกรอบ Swagger2 ใน Springboot แนะนำให้คุณรู้จักโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!