Tạo PDF từ tài liệu API Swagger


93

Tôi đã sử dụng giao diện người dùng Swagger để hiển thị các thiết bị web REST của mình và lưu trữ nó trên một máy chủ.

Tuy nhiên dịch vụ này của Swagger chỉ có thể được truy cập trên một máy chủ cụ thể. Nếu tôi muốn làm việc ngoại tuyến, có ai biết cách tạo tệp PDF tĩnh bằng giao diện người dùng Swagger và làm việc với nó không? Ngoài ra, PDF dễ dàng chia sẻ với những người không có quyền truy cập vào máy chủ.

Cảm ơn nhiều!

Câu trả lời:


39

Cách tiện dụng : Sử dụng Trình duyệt In / Xem trước

  1. Ẩn ngăn trình chỉnh sửa
  2. Xem trước bản in (Tôi đã sử dụng firefox, những người khác cũng tốt)
  3. Thay đổi thiết lập trang và in sang pdf

nhập mô tả hình ảnh ở đây


Đơn giản! Các tài liệu xuất hiện khá tốt.
ShaTin

1
Bạn thậm chí có thể chọn giữa hai thiết kế tài liệu miễn là có hai dịch vụ Swagger: editor.swagger.io (mới) và editor2.swagger.io (trước)!
naXa

Giao diện người dùng HTML swagger bcos hiệu quả nhưng mất mát có nhiều tab, đối với các tham số của phương thức POST / PUT, bạn phải chọn giữa tab mô hình và tab giá trị mẫu, sau đó trong phiên bản in thành PDF, một trong số chúng sẽ bị ẩn vĩnh viễn :(
chrisinmtown

Điều này không hiệu quả với tôi. Mỗi điểm cuối sẽ bị cắt với phần cuối của trang (bất kể tôi đã sử dụng thiết lập trang nào). Sau đó, trang tiếp theo sẽ bắt đầu ở đầu khối Điểm cuối tiếp theo. Có lẽ điều gì đó đã thay đổi kể từ khi câu trả lời này được viết.
killa-byte

Tôi vẫn thấy nó khả thi, bạn có thể cần phải điều chỉnh mức lợi nhuận. Hãy thử từ editor.swagger.io
Xác định

33

Tôi đã tìm ra cách sử dụng https://github.com/springfox/springfoxhttps://github.com/RobWin/swagger2markup

Đã sử dụng Swagger 2 để triển khai tài liệu.


xin chào, tôi cũng đang cố gắng tạo tài liệu ngoại tuyến bằng swagger. Bạn có thể tạo tài liệu swagger không ??
Sunil Rk

vâng, tôi đã sử dụng các dự án mẫu và tích hợp mã dịch vụ web của mình vào chúng và có thể tạo tài liệu.
Aman Mohammed

1
Bạn có thể vui lòng cho tôi biết ngắn gọn, làm thế nào tôi có thể tích hợp dịch vụ web của mình với các ví dụ mà bạn đã đề cập ở trên.
Sunil Rk

Dự án swagger2markup cần đầu vào JSON của API REST. Nếu bạn tải xuống dự án gradle đó và thay đổi tệp swagger.json trong đó bằng các chi tiết API của bạn rồi chạy phương thức Swagger2MarkupConverterTest JUnit: testSwagger2HtmlConversion, nó sẽ tạo HTML cho bạn trong thư mục build / docs / created / asciidocAsString của dự án. Vì vậy, nói cách khác có 2 điều. 1) Đầu tiên tạo định dạng JSON cho API REST của bạn bằng Swagger Editor. 2) Sử dụng rằng JSON Format, bạn có thể sử dụng dự án swagger2markup để sản tài liệu độc lập HTML của API
Aman Mohammed

22

Bạn có thể sửa đổi dự án REST của mình, để tạo ra các tài liệu tĩnh cần thiết (html, pdf, v.v.) khi xây dựng dự án.

Nếu bạn có một dự án Java Maven, bạn có thể sử dụng đoạn mã pom bên dưới. Nó sử dụng một loạt các plugin để tạo pdf và tài liệu html (trong số các tài nguyên REST của dự án).

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

Xin lưu ý rằng thứ tự thực thi rất quan trọng, vì đầu ra của một plugin sẽ trở thành đầu vào cho phần tiếp theo:

<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>

Plugin asciidoctor giả định sự tồn tại của tệp .adoc để hoạt động. Bạn có thể tạo một cái mà chỉ cần thu thập những cái đã được tạo bởi plugin swagger2markup:

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

Nếu bạn muốn tài liệu html đã tạo của mình trở thành một phần của tệp chiến tranh, bạn phải đảm bảo rằng nó có ở cấp cao nhất - các tệp tĩnh trong thư mục WEB-INF sẽ không được phục vụ. Bạn có thể thực hiện việc này trong plugin 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>

Plugin chiến tranh hoạt động trên tài liệu đã tạo - do đó, bạn phải đảm bảo rằng các plugin đó đã được thực thi trong giai đoạn trước đó.


Xin chào @Hervian. Câu trả lời chính xác. Tôi có thể sử dụng anser của bạn cho đến nay. Tôi có hai lớp có cùng tên nhưng ở các gói khác nhau. Tuy nhiên, swagger.json chỉ chứa định nghĩa cho một trong số chúng. Người còn lại bị mất tích
edmond

@Hervian Tôi gặp lỗi cho đến khi thực hiện thao tác sau 1) đã tạo tệp src / main / asciidoc / swagger.adoc với nội dung từ phía trên. 2) đã thêm các thuộc tính này vào POM: <phase.generate-document> process-class </phase.generate-documentation> <created.asciidoc.directory> $ {project.build.directory} / api-gen </ created. asciidoc.directory> Sau đó chạy "mvn install" và tôi không thấy lỗi mvn hoặc plugin mà chỉ có tệp tin Overview.adoc có bất kỳ nội dung nào; các tệp định nghĩa.adoc và path.adoc vẫn trống. Làm ơn hãy khuyên nhủ.
chrisinmtown

15

Tôi đã tạo một trang web https://www.swdoc.org/ để giải quyết vấn đề một cách cụ thể. Vì vậy, nó tự động swagger.json -> Asciidoc, Asciidoc -> pdfchuyển đổi như được gợi ý trong các câu trả lời. Lợi ích của việc này là bạn không cần phải trải qua các thủ tục cài đặt. Nó chấp nhận một tài liệu đặc tả dưới dạng url hoặc chỉ là một json thô. Dự án được viết bằng C # và trang của nó là https://github.com/Irdis/SwDoc

BIÊN TẬP

Bạn nên xác thực thông số kỹ thuật json của mình tại đây: http://editor.swagger.io/ nếu bạn đang gặp bất kỳ sự cố nào với SwDoc, chẳng hạn như pdf được tạo chưa hoàn chỉnh.


3
thx, vâng, nó khá đẹp, tôi sử dụng nó cho các dự án công việc của mình. Tôi đang nghĩ đến việc viết một số mã để hỗ trợ openapi 3.0 khi rảnh rỗi.
Irdis

2
Tất cả vinh quang cho các tác giả của các công cụ nó dựa trên, OFC
Irdis

@Irdis Tôi đã thử sử dụng liên kết. Nó cho phép phân tích cú pháp tài liệu Swagger 2.0 nhưng tài liệu tôi đang cung cấp là Open API 3.0 và nó không thể tạo tài liệu.
hellowahab

Tôi đã thử swagger 3+ - hoạt động tốt, nó hiển thị html thô để nhận xét mặc dù ...
Sasha Bond

Đây là một công cụ tuyệt vời! Nếu bạn từng gặp sự cố như tôi đã gặp phải (chẳng hạn như pdf được tạo chưa hoàn chỉnh), hãy dán json của bạn vào đây: editor.swagger.io để được tự động xác thực, khắc phục sự cố và bạn sẽ có thể quay lại công cụ swdoc và tạo nó đúng cách thời gian này.
Thales Valias

9

Checkout https://mrin9.github.io/RapiPdf một phần tử tùy chỉnh với nhiều tính năng tùy chỉnh và bản địa hóa.

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của gói này


2
vừa thử nghiệm nhưng tôi không nhận được phản hồi sau khi nhấp vào "Tạo PDF" với thông số thử nghiệm (petstore)?
imehl

1
@imehl Nó hoạt động tốt khi tôi đã kiểm tra tôi trên mac / chrome, mac / firefox, mac / safari và windows / chrome. Điều này chỉ hoạt động trên trình duyệt web hỗ trợ các thành phần web như Chrome, Firefox và Safari. Nếu vấn đề vẫn còn phải đối mặt với lòng đăng nhập họ Github github.com/mrin9/RapiPdf
Mrinmoy

@Mrinmoy Tôi đã gặp vấn đề tương tự như imehl, nó mở tab mới nhưng nó đóng ngay lập tức (ubuntu 18.04 + firefox / chrome đều cho kết quả tương tự). Sau đó, tôi đã làm điều đó trên windows và nó hoạt động như một sự quyến rũ. Cảm ơn bạn vì công cụ này, nó thật tuyệt vời.
Dabux

3
@Dabux không bao giờ thử nghiệm trên ubuntu, nhưng có một tình huống mà tôi biết nơi mọi người làm khuôn mặt cùng một vấn đề như bạn giải thích, và đó là khi bạn có bất kỳ hoạt động như-blocker hoặc chặn popup trên trình duyệt
Mrinmoy

@Mrinmoy bạn nói đúng, tôi đã bật trình chặn quảng cáo, đó là vì điều đó, không phải do hệ điều hành.
Dabux

1

Đối với tôi, giải pháp đơn giản nhất là nhập swagger (v2) vào Postman và sau đó chuyển đến chế độ xem web. Ở đó, bạn có thể chọn chế độ xem "một cột" và sử dụng trình duyệt để in sang pdf. Không phải là giải pháp tự động / tích hợp nhưng tốt để sử dụng một lần. Nó xử lý chiều rộng giấy tốt hơn nhiều so với in từ editor2.swagger.io, nơi thanh cuộn khiến các phần nội dung bị ẩn.


1
đã thử sử dụng điều này nhưng bản in qua trang web cũng thêm một số liên kết và thông tin khác.
hellowahab

Vâng, tôi nên đề cập đến điều đó. Không phải là một vấn đề cho việc sử dụng của tôi.
Simon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.