Swagger เป็นกรอบที่ได้มาตรฐานและสมบูรณ์สำหรับการสร้างอธิบายการโทรและการแสดงภาพบริการเว็บสไตล์พักผ่อน เป้าหมายโดยรวมคือทำให้การอัปเดตของไคลเอนต์และไฟล์ด้วยความเร็วเดียวกับเซิร์ฟเวอร์ วิธีการไฟล์พารามิเตอร์และรุ่นจะรวมเข้ากับรหัสฝั่งเซิร์ฟเวอร์อย่างแน่นหนาทำให้ API สามารถซิงโครไนซ์ได้เสมอ
Swagger ไม่เคยง่ายต่อการปรับใช้และจัดการและใช้ API ที่ทรงพลัง ตกลงข้างต้นเป็นคำแถลงอย่างเป็นทางการฉันคัดลอกโดยตรง ในความคิดของฉัน Swagger เป็นผู้จัดการเอกสารอินเตอร์เฟส ในอดีตเรามักจะเขียนอินเทอร์เฟซในโลก แต่มีปัญหาที่เราต้องพึ่งพาเครื่องมือของบุคคลที่สามเมื่อทำการทดสอบ อินเทอร์เฟซ Get นั้นโอเคและเปิดโดยตรงโดยเบราว์เซอร์ โพสต์สามารถพึ่งพาเครื่องมืออื่น ๆ เท่านั้น Swagger สามารถสร้างเอกสารอินเทอร์เฟซโดยตรง (Javaee) ผ่านคำอธิบายประกอบในรหัส คนส่วนใหญ่ใช้วิธีนี้และรวมเข้ากับโครงการโดยตรงเพื่ออำนวยความสะดวกให้สมาชิกดูและยังสามารถทดสอบได้โดยตรง นอกจากนี้อินเทอร์เฟซของ Swagger ก็ดีเช่นกัน บางทีนี่อาจเป็นเหตุผลว่าทำไมฉันถึงเลือกใช้ Swagger สไตล์ที่สงบที่กล่าวถึงโดยตรงโดยเจ้าหน้าที่ไม่ได้พักผ่อน สามารถใช้อินเทอร์เฟซสไตล์ได้ แน่นอนว่ามีอีกวิธีหนึ่งที่ Swagger จะเขียนคำแนะนำอินเตอร์เฟสด้วยตนเอง ข้อได้เปรียบคือรหัสมีรหัสเท่านั้นเพราะเมื่อเพิ่มคำอธิบายประกอบอินเตอร์เฟส Swagger ลงในรหัสจำนวนรหัสที่ยังคงเพิ่มขึ้นมาก แน่นอนข้อเสียคือหลังจากที่คุณได้แก้ไขรหัสแล้วคุณต้องเปลี่ยนเอกสารอินเตอร์เฟส
SpringMVC นั้นง่ายมากในการรวม SpringFox-Swagger2 และ SpringFox-Swagger-UI เพียงสองขั้นตอน:
(1) เพิ่มการพึ่งพาใน POM
<Ependency> <sderctId> io.springfox </groupId> <ratifactid> SpringFox-Swagger-ui </artifactid> <sersion> $ {SpringFox-Swagger.Version} </Side> </การพึ่งพาอาศัยกัน> <Sersion> $ {SpringFox-Swagger.Version} </Service> </dependency>(2) เพิ่มคลาสการกำหนดค่า Swagger:
@configuration @enablewagger2 @enablewebmvc @componentscan ("com.xxx.controller") คลาสสาธารณะ SwaggerConfig {} จากนั้นคุณสามารถดูข้อมูลส่วนต่อประสานทั้งหมดในโครงการผ่าน http: //localhost/swagger-ui.html และคุณสามารถดูข้อมูล JSON ผ่าน http: // localhost/v2/api-docs
แต่ฉันจะปิดการใช้งานเอกสาร API เหล่านี้ในสภาพแวดล้อมการผลิตได้อย่างไร ฉันลองหลายวิธีและในที่สุดก็พบวิธีที่ง่ายและใช้งานได้จริง:
@configuration @enablewagger2 @enablewebmvc @componentscan ("com.xxx.controller") คลาสสาธารณะ Swaggerconfig {@autowired configservice configservice; @Bean Public Docket CustomDocket () {ถ้า (configservice.getServerenv () == Serverenvenum.online) {ส่งคืนใบปะหน้าใหม่ (DocumentationType.swagger_2) .apiinfo (apiinfoonline () .สร้าง(); } else {ส่งคืนใบปะหน้าใหม่ (DocumentationType.swagger_2) .apiinfo (apiinfo ()); }} ส่วนตัว apiinfo apiinfo () {ส่งคืน apiinfobuilder ใหม่ () .title ("ระบบ xxx") .description ("XXX System Interface") .license ("") .licenseUrl ("). .สร้าง(); } ส่วนตัว apiinfo apiinfoonline () {ส่งคืน apiinfobuilder ใหม่ () .title (") .description (" ") .license (" ") .licenseurl (" "). termsofserviceurl (" ") - แม้ว่าหน้า http: //localhost/swagger-ui.html ยังสามารถเข้าถึงได้ แต่ก็ยังไม่มีเนื้อหารวมถึง http: // localhost/v2/api-docs
ควรมีวิธีที่ดีกว่า!
การอ้างอิง: //www.vevb.com/article/135312.htm
Swagger จะต้องอยู่ในบริบทเดียวกับ SpringMVC, SpringMVC เป็นเพียง subcontext ของฤดูใบไม้ผลิ หาก Swagger ทำให้บริบทของสปริงโหลดแล้ว URL ของ Swagger เหล่านั้นไม่สามารถสกัดกั้นด้วย springMVC interceptor!
ดังนั้นจึงมีวิธีแก้ปัญหาสองประการ:
หากใช้คำอธิบายประกอบ:
(1) การกำหนดค่า Spring-MVC:
<!-ใช้คำอธิบายประกอบเพื่อลงทะเบียนถั่วโดยอัตโนมัติสแกนเฉพาะ @controller-> <บริบท: คอมโพเนนต์-สแกนฐานแพคเกจ = "com.inspur.eyun.yunbx" ใช้-ฟิลเตอร์-ฟิลเตอร์ = "เท็จ"> <! expression = "org.springframework.steretype.controller"/> <บริบท: รวมตัวกรองประเภท = "กำหนด" expression = "com.inspur.eyun.yunbx.swagger.swaggerconfig"
โปรดทราบว่าคุณต้องเพิ่มการกำหนดค่า Swagger และในเวลาเดียวกัน:
(2) การกำหนดค่าสปริง:
<!-การสแกนแพ็คเกจ, คำอธิบายประกอบที่เกี่ยวข้อง-> <บริบท: Component-Scan base-base-package = "com.inspur.eyun.yunbx"> <บริบท: ยกเว้นประเภทตัวกรอง = "คำอธิบายประกอบ" นิพจน์ = "org.springframework.steretype.controller"/> < Expression = "com.inspur.eyun.yunbx.swagger.swaggerconfig"/> </บริบท: Component-scan>
ให้ความสนใจกับการยกเว้น Swagger
(3) การกำหนดค่า Swagger:
@configuration @enablewagger2 @enablewebmvc @componentscan ("com.inspur.eyun.yunbx.controller") ระดับสาธารณะ SwaggerConfig {}หมายเหตุคำอธิบายประกอบ @Configuration
แน่นอนว่าวิธีที่แนะนำมากขึ้นคือการใช้วิธีการกำหนดค่า XML เนื่องจากวิธีนี้คุณไม่จำเป็นต้องแนะนำแพ็คเกจการพึ่งพา Swagger:
(1) การกำหนดค่า Spring-MVC:
<!-ใช้คำอธิบายประกอบเพื่อลงทะเบียนถั่วโดยอัตโนมัติสแกนเฉพาะ @controller-> <บริบท: คอมโพเนนต์-สแกนฐานแพคเกจ = "com.inspur.eyun.yunbx" ใช้-ฟิลเตอร์-ฟิลเตอร์ = "เท็จ"> <! expression = "org.springframework.stereotype.controller"/> </บริบท: Component-scan> <import Resource = "classpath: spring-mvc-swagger.xml"/>
Spring-mvc-swagger.xml:
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <ถั่ว xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xmlcema http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-bansd-beansd การกำหนดค่าสภาพแวดล้อมการผลิตที่ว่างเปล่า -> <ถั่ว /> </ebeans>
หมายเหตุ: เราวาง swagger ในไฟล์การกำหนดค่าแยกกัน หากเป็นสภาพแวดล้อมออนไลน์เนื้อหาไฟล์จะว่างเปล่า หากเป็นสภาพแวดล้อมการทดสอบแบบออฟไลน์ให้กำหนดค่า Swagger
(2) การกำหนดค่าสปริง:
<!-การสแกนแพ็คเกจที่เกี่ยวข้องกับคำอธิบายประกอบ-> <บริบท: คอมโพเนนต์-สแกนฐานแพคเกจ = "com.inspur.eyun.yunbx"> <บริบท: ยกเว้นประเภทตัวกรอง = "คำอธิบายประกอบ" นิพจน์ = "org.springframework.stereotype.controller"/> </>
(3) การกำหนดค่า Swagger:
@enablewagger2 @enablewebmvc ชั้นเรียนสาธารณะ SwaggerConfig {@bean Public Docket CustomDocket () {ส่งคืนใบปะหน้าใหม่ (DocumentationType.swagger_2) .apiinfo (apiinfo ()). select () .Paths (pathselectors.any ()) .build (); } ส่วนตัว apiinfo apiinfo () {ส่งคืน apiinfobuilder ใหม่ () .title ("แพลตฟอร์ม xxx") .description ("อินเทอร์เฟซแพลตฟอร์ม xxx") .license ("") .licenseurl ("). .สร้าง(); -หมายเหตุ: ที่นี่เราลบ @Configuration และในเวลาเดียวกันเราได้แก้ไข POM ของเราและกำหนดค่าบรรจุภัณฑ์หลายโปรไฟล์:
pom.xml:
<!-Swagger-> <การพึ่งพา> <roupId> io.springfox </groupid> <ratifactId> SpringFox-Swagger2 </artifactid> <Sersion> $ {SpringFox-Swagger.Version} </Spope> <ArtIfactId> SpringFox-Swagger-ui </artifactid> <scope> $ {swagger.scope} </cope> <cope> <version> $ {Springfox-Swagger-uiหมายเหตุ: ขอบเขตที่ขึ้นอยู่กับที่นี่คือการตั้งค่าแบบไดนามิก หากเป็นสภาพแวดล้อมออนไลน์เราสามารถกำหนดขอบเขตให้ได้
<sfiles> <profile> <id> dev </id> <properties> <profiles.active> dev </profiles.active> <wagger.scope> คอมไพล์ </swagger.scope> </predies> <ivative> <swagger.scope> Compile </swagger.scope> </properties> </profile> <profile> <id> ออนไลน์ </id> <properties> <properties> <profiles.active> ทดสอบ </profiles.active> <wagger.scope> Compile </swagger </profiles.active> ออนไลน์ </profiles.active> <wagger.scope> ให้ </swagger.scope> </premerties> </profile> </files> </scope>
ตั้งขอบเขตที่แตกต่างกันสำหรับการพึ่งพาของ Swagger ผ่านโปรไฟล์ที่แตกต่างกัน!
หมายเหตุ: มีข้อผิดพลาดใน SpringFox-Swagger.version = 2.7.0 และคุณสามารถใช้เวอร์ชันที่ต่ำกว่า 2.6.1 เคล็ดลับร่วมเพศเกินไป!
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น