สร้าง PDF จากเอกสาร Swagger API


93

ฉันใช้ Swagger UI เพื่อแสดงบริการเว็บ REST ของฉันและโฮสต์ไว้บนเซิร์ฟเวอร์

อย่างไรก็ตามบริการของ Swagger นี้สามารถเข้าถึงได้บนเซิร์ฟเวอร์เฉพาะเท่านั้น หากฉันต้องการทำงานแบบออฟไลน์มีใครรู้บ้างไหมว่าฉันจะสร้าง PDF แบบคงที่โดยใช้ Swagger UI และทำงานกับมันได้อย่างไร นอกจากนี้ PDF ยังง่ายต่อการแชร์กับผู้ที่ไม่มีสิทธิ์เข้าถึงเซิร์ฟเวอร์

ขอบคุณมาก!

คำตอบ:


39

วิธีที่สะดวก: การใช้เบราว์เซอร์การพิมพ์ / ดูตัวอย่าง

  1. ซ่อนบานหน้าต่างตัวแก้ไข
  2. ตัวอย่างก่อนพิมพ์ (ฉันใช้ firefox คนอื่นก็ใช้ได้)
  3. เปลี่ยนการตั้งค่าหน้าและพิมพ์เป็น pdf

ป้อนคำอธิบายภาพที่นี่


เรียบง่าย! เอกสารประกอบออกมาค่อนข้างดี
ShaTin

1
คุณยังสามารถเลือกระหว่างการออกแบบเอกสารสองแบบได้ตราบเท่าที่มีบริการ Swagger สองบริการ: editor.swagger.io (ใหม่) และeditor2.swagger.io (ก่อนหน้า)!
naXa

bcos swagger HTML UI ที่มีประสิทธิภาพ แต่สูญเสียมีหลายแท็บสำหรับพารามิเตอร์ของวิธีการ POST / PUT คุณต้องเลือกระหว่างแท็บโมเดลและแท็บค่าตัวอย่างจากนั้นในเวอร์ชันที่พิมพ์เป็น PDF หนึ่งในนั้นจะถูกซ่อนไว้ตลอดไป :(
chrisinmtown

สิ่งนี้ไม่ได้ผลสำหรับฉัน จุดสิ้นสุดแต่ละจุดจะถูกตัดออกพร้อมกับส่วนท้ายของหน้า (ไม่ว่าฉันจะใช้การตั้งค่าหน้าใด) จากนั้นหน้าถัดไปจะเริ่มต้นที่ด้านบนสุดของบล็อกปลายทางถัดไป อาจมีบางอย่างเปลี่ยนแปลงไปตั้งแต่เขียนคำตอบนี้
killa-byte

ฉันยังเห็นว่ามันใช้งานได้คุณอาจต้องปรับระยะขอบ ลองจากeditor.swagger.io
Osify

33

ฉันหาวิธีโดยใช้https://github.com/springfox/springfoxและ https://github.com/RobWin/swagger2markup

ใช้ Swagger 2 เพื่อใช้งานเอกสาร


สวัสดีฉันกำลังพยายามสร้างเอกสารออฟไลน์โดยใช้ swagger คุณสามารถสร้างเอกสารเกี่ยวกับผยองได้หรือไม่?
Sunil Rk

ใช่ฉันใช้โครงการตัวอย่างและรวมรหัสบริการเว็บของฉันไว้ในนั้นและสามารถสร้างเอกสารได้
Aman Mohammed

1
คุณช่วยบอกฉันสั้น ๆ ได้ไหมว่าฉันจะรวมบริการเว็บเข้ากับตัวอย่างที่คุณได้กล่าวไว้ข้างต้นได้อย่างไร
Sunil Rk

โครงการ swagger2markup ต้องการอินพุต JSON ของ REST API หากคุณดาวน์โหลดโปรเจ็กต์ gradle นั้นและเปลี่ยนไฟล์ swagger.json ด้วยรายละเอียด API ของคุณจากนั้นรันเมธอด Swagger2MarkupConverterTest JUnit: testSwagger2HtmlConversion ก็ควรสร้าง HTML ให้คุณในโฟลเดอร์ build / docs / created / asciidocAsString ของโปรเจ็กต์ กล่าวอีกนัยหนึ่งมี 2 อย่าง 1) สร้างรูปแบบ JSON สำหรับ REST API ของคุณก่อนโดยใช้ Swagger Editor 2) การใช้รูปแบบ JSON นั้นคุณสามารถใช้โครงการ swagger2markup เพื่อสร้างเอกสาร HTML แบบสแตนด์อโลนของ API
Aman Mohammed

22

คุณสามารถแก้ไขโครงการ REST ของคุณเพื่อสร้างเอกสารแบบคงที่ที่จำเป็น (html, pdf ฯลฯ ) เมื่อสร้างโครงการ

หากคุณมีโปรเจ็กต์ Java Maven คุณสามารถใช้ข้อมูลโค้ดปอมด้านล่าง ใช้ชุดปลั๊กอินเพื่อสร้าง pdf และเอกสาร html (ของทรัพยากร REST ของโครงการ)

  1. rest-api -> swagger.json: swagger-maven-plugin
  2. swagger.json -> Asciidoc: swagger2markup-maven-plugin
  3. Asciidoc -> PDF: asciidoctor-maven-plugin

โปรดทราบว่าลำดับของการดำเนินการมีความสำคัญเนื่องจากเอาต์พุตของปลั๊กอินหนึ่งจะกลายเป็นอินพุตถัดไป:

<plugin>
    <groupId>com.github.kongchen</groupId>
    <artifactId>swagger-maven-plugin</artifactId>
    <version>3.1.3</version>
    <configuration>
        <apiSources>
            <apiSource>
                <springmvc>false</springmvc>
                <locations>some.package</locations>
                <basePath>/api</basePath>
                <info>
                    <title>Put your REST service's name here</title>
                    <description>Add some description</description>
                    <version>v1</version>
                </info>
                <swaggerDirectory>${project.build.directory}/api</swaggerDirectory>
                <attachSwaggerArtifact>true</attachSwaggerArtifact>
            </apiSource>
        </apiSources>
    </configuration>
    <executions>
        <execution>
            <phase>${phase.generate-documentation}</phase>
            <!-- fx process-classes phase -->
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>io.github.robwin</groupId>
    <artifactId>swagger2markup-maven-plugin</artifactId>
    <version>0.9.3</version>
    <configuration>
        <inputDirectory>${project.build.directory}/api</inputDirectory>
        <outputDirectory>${generated.asciidoc.directory}</outputDirectory>
        <!-- specify location to place asciidoc files -->
        <markupLanguage>asciidoc</markupLanguage>
    </configuration>
    <executions>
        <execution>
            <phase>${phase.generate-documentation}</phase>
            <goals>
                <goal>process-swagger</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.asciidoctor</groupId>
    <artifactId>asciidoctor-maven-plugin</artifactId>
    <version>1.5.3</version>
    <dependencies>
        <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj-pdf</artifactId>
            <version>1.5.0-alpha.11</version>
        </dependency>
        <dependency>
            <groupId>org.jruby</groupId>
            <artifactId>jruby-complete</artifactId>
            <version>1.7.21</version>
        </dependency>
    </dependencies>
    <configuration>
        <sourceDirectory>${asciidoctor.input.directory}</sourceDirectory>
        <!-- You will need to create an .adoc file. This is the input to this plugin -->
        <sourceDocumentName>swagger.adoc</sourceDocumentName>
        <attributes>
            <doctype>book</doctype>
            <toc>left</toc>
            <toclevels>2</toclevels>
            <generated>${generated.asciidoc.directory}</generated>
            <!-- this path is referenced in swagger.adoc file. The given file will simply 
                point to the previously create adoc files/assemble them. -->
        </attributes>
    </configuration>
    <executions>
        <execution>
            <id>asciidoc-to-html</id>
            <phase>${phase.generate-documentation}</phase>
            <goals>
                <goal>process-asciidoc</goal>
            </goals>
            <configuration>
                <backend>html5</backend>
                <outputDirectory>${generated.html.directory}</outputDirectory>
                <!-- specify location to place html file -->
            </configuration>
        </execution>
        <execution>
            <id>asciidoc-to-pdf</id>
            <phase>${phase.generate-documentation}</phase>
            <goals>
                <goal>process-asciidoc</goal>
            </goals>
            <configuration>
                <backend>pdf</backend>
                <outputDirectory>${generated.pdf.directory}</outputDirectory>
                <!-- specify location to place pdf file -->
            </configuration>
        </execution>
    </executions>
</plugin>

ปลั๊กอิน asciidoctor จะถือว่ามีไฟล์. adoc ที่จะทำงานได้ คุณสามารถสร้างสิ่งที่รวบรวมสิ่งที่สร้างโดยปลั๊กอิน swagger2markup:

include::{generated}/overview.adoc[]
include::{generated}/paths.adoc[]
include::{generated}/definitions.adoc[]

หากคุณต้องการให้เอกสาร html ที่คุณสร้างขึ้นกลายเป็นส่วนหนึ่งของไฟล์ war ของคุณคุณต้องแน่ใจว่าเอกสารนั้นอยู่ในระดับบนสุด - ไฟล์คงที่ในโฟลเดอร์ WEB-INF จะไม่ถูกเสิร์ฟ คุณสามารถทำได้ในปลั๊กอิน maven-war:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <warSourceDirectory>WebContent</warSourceDirectory>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <webResources>
            <resource>
                <directory>${generated.html.directory}</directory>
            <!-- Add swagger.pdf to WAR file, so as to make it available as static content. -->
            </resource>
            <resource>
                <directory>${generated.pdf.directory}</directory>
            <!-- Add swagger.html to WAR file, so as to make it available as static content. -->
            </resource>
        </webResources>
    </configuration>
</plugin>

ปลั๊กอิน war ทำงานบนเอกสารที่สร้างขึ้นดังนั้นคุณต้องตรวจสอบให้แน่ใจว่าปลั๊กอินเหล่านั้นได้รับการดำเนินการในช่วงก่อนหน้านี้


สวัสดี @Hervian คำตอบที่ดี ฉันสามารถใช้ anser ของคุณจนถึงตอนนี้ ฉันมีสองคลาสที่มีชื่อเดียวกัน แต่อยู่คนละแพ็คเกจ อย่างไรก็ตาม swagger.json มีคำจำกัดความสำหรับหนึ่งในนั้นเท่านั้น อีกอันหายไป
edmond

@Hervian ฉันได้รับข้อผิดพลาดจนกระทั่งฉันทำสิ่งต่อไปนี้ 1) สร้างไฟล์ src / main / asciidoc / swagger.adoc ด้วยเนื้อหาจากด้านบน 2) เพิ่มคุณสมบัติเหล่านี้ให้กับ POM: <phase.generate-documentation> process-คลาส </phase.generate-documentation> <created.asciidoc.directory> $ {project.build.directory} / api-gen </ created asciidoc.directory> จากนั้นเรียกใช้ "mvn install" และฉันไม่เห็นข้อผิดพลาดของ mvn หรือปลั๊กอิน แต่มีเพียงไฟล์ Overview.adoc เท่านั้นที่มีเนื้อหาใด ๆ ไฟล์ definitions.adoc และ paths.adoc ยังคงว่างเปล่า กรุณาให้คำแนะนำ
chrisinmtown

15

ฉันสร้างเว็บไซต์https://www.swdoc.org/ที่ระบุปัญหาโดยเฉพาะ ดังนั้นจึงทำการswagger.json -> Asciidoc, Asciidoc -> pdfเปลี่ยนแปลงโดยอัตโนมัติตามที่แนะนำในคำตอบ ข้อดีคือคุณไม่จำเป็นต้องทำตามขั้นตอนการติดตั้ง ยอมรับเอกสารข้อมูลจำเพาะในรูปแบบของ url หรือเพียงแค่ json ดิบ โครงการเขียนด้วยภาษา C # และหน้าของมันคือhttps://github.com/Irdis/SwDoc

แก้ไข

อาจเป็นความคิดที่ดีที่จะตรวจสอบข้อกำหนด json ของคุณที่นี่: http://editor.swagger.io/หากคุณมีปัญหากับ SwDoc เช่นไฟล์ PDF ที่สร้างขึ้นไม่สมบูรณ์


3
ขอบคุณค่ะสวยดีฉันใช้สำหรับโครงการงานของฉัน ฉันกำลังคิดที่จะเขียนโค้ดเพื่อรองรับ openapi 3.0 ในเวลาว่าง
Irdis

2
ความรุ่งโรจน์ทั้งหมดของผู้เขียนเครื่องมือที่ต้องใช้, ofc
Irdis

@Irdis ฉันลองใช้ลิงค์ ช่วยให้สามารถแยกวิเคราะห์เอกสาร Swagger 2.0 ได้ แต่เอกสารที่ฉันให้เป็นของ Open API 3.0 และไม่สามารถสร้างเอกสารได้
hellowahab

ฉันลองใช้ swagger 3+ - ใช้งานได้ดีมันแสดง html ดิบสำหรับคำพูดแม้ว่า ...
Sasha Bond

นี่เป็นเครื่องมือที่ยอดเยี่ยม! หากคุณเคยมีปัญหาเช่นเดียวกับฉัน (เช่น pdf ถูกสร้างขึ้นไม่สมบูรณ์) ให้วาง json ของคุณที่นี่: editor.swagger.ioเพื่อตรวจสอบความถูกต้องโดยอัตโนมัติแก้ไขปัญหาและคุณจะกลับไปที่เครื่องมือ swdoc และสร้างได้อย่างถูกต้อง เวลานี้.
Thales Valias

9

ชำระเงินhttps://mrin9.github.io/RapiPdfองค์ประกอบที่กำหนดเองพร้อมคุณสมบัติการปรับแต่งและการแปลมากมาย

คำเตือน: ฉันเป็นผู้เขียนแพ็คเกจนี้


2
เพิ่งทดสอบ แต่ไม่ได้รับการตอบกลับหลังจากคลิก "สร้าง PDF" ด้วยข้อกำหนดการทดสอบ (petstore)?
imehl

1
@imehl มันใช้งานได้ดีเมื่อฉันทดสอบฉันบน mac / chrome, mac / firefox, mac / safari และ windows / chrome ใช้งานได้เฉพาะบนเว็บเบราว์เซอร์ที่รองรับส่วนประกอบของเว็บเช่น Chrome, Firefox และ Safari หากยังคงประสบปัญหาโปรดบันทึกไว้ใน Github github.com/mrin9/RapiPdf
Mrinmoy

@Mrinmoy ฉันมีปัญหาเดียวกับ imehl มันเปิดแท็บใหม่ แต่ปิดทันที (ubuntu 18.04 + firefox / chrome ทั้งสองผลลัพธ์เดียวกัน) จากนั้นฉันก็ทำบน windows และมันใช้งานได้ดี ขอบคุณสำหรับเครื่องมือนี้มันยอดเยี่ยมมาก
Dabux

3
@Dabux ไม่เคยทดสอบบนอูบุนตู แต่มีสถานการณ์หนึ่งที่ฉันรู้ว่าผู้คนเผชิญกับปัญหาเดียวกันกับที่คุณอธิบายไว้ที่ไหนและนั่นคือเมื่อคุณมีตัวบล็อกหรือตัวป้องกันป๊อปอัปใด ๆ บนเบราว์เซอร์
Mrinmoy

@Mrinmoy คุณพูดถูกฉันมี ad-blocker มันเป็นเพราะสิ่งนั้นไม่ใช่เพราะ OS
Dabux

1

สำหรับฉันวิธีแก้ปัญหาที่ง่ายที่สุดคือการนำเข้า swagger (v2) ไปยัง Postman จากนั้นไปที่มุมมองเว็บ คุณสามารถเลือกมุมมอง "คอลัมน์เดียว" และใช้เบราว์เซอร์เพื่อพิมพ์เป็น pdf ไม่ใช่โซลูชันอัตโนมัติ / รวม แต่เหมาะสำหรับการใช้งานครั้งเดียว มันจัดการกับความกว้างของกระดาษได้ดีกว่าการพิมพ์จาก editor2.swagger.io โดยที่แถบเลื่อนทำให้บางส่วนของเนื้อหาถูกซ่อน


1
พยายามใช้สิ่งนี้ แต่การพิมพ์ผ่านหน้าเว็บจะเพิ่มลิงค์และข้อมูลอื่น ๆ ด้วย
hellowahab

ใช่ฉันควรจะพูดถึงเรื่องนั้น ไม่เป็นปัญหาสำหรับการใช้งานของฉัน
Simon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.