Створіть PDF із документації API Swagger


93

Я використовував інтерфейс Swagger для відображення своїх веб-служб REST та розміщував їх на сервері.

Однак ця служба Swagger доступна лише на певному сервері. Якщо я хочу працювати в автономному режимі, хтось знає, як я можу створити статичний PDF за допомогою інтерфейсу Swagger та працювати з ним? Крім того, 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.Are ви можете створити документацію swagger ??
Sunil Rk

так, я використовував приклади проектів та інтегрував у них свій код веб-сервісу та зміг сформувати документацію.
Аман Мохаммед

1
Скажіть, будь ласка, коротко, як я можу інтегрувати свою веб-службу до прикладів, про які ви згадали вище.
Sunil Rk,

Проект swagger2markup потребує введення JSON API REST. Якщо ви завантажите цей проект gradle і зміните файл swagger.json на нього з вашими деталями API, а потім запустите метод Swagger2MarkupConverterTest JUnit: testSwagger2HtmlConversion, він повинен згенерувати для вас HTML у папці build / docs / generated / asciidocAsString проекту. Отже, іншими словами є 2 речі. 1) Спочатку згенеруйте формат JSON для вашого REST API за допомогою редактора Swagger. 2) Використовуючи цей формат JSON, ви можете використовувати проект swagger2markup для створення автономної HTML-документації API
Aman Mohammed

22

Ви можете змінити свій проект REST, щоб під час створення проекту створити необхідні статичні документи (html, pdf тощо).

Якщо у вас є проект Java Maven, ви можете використати фрагмент pom нижче. Він використовує ряд плагінів для створення 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-документ став частиною вашого файлу війни, ви повинні переконатися, що він присутній на верхньому рівні - статичні файли в папці 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>

Військовий плагін працює над згенерованою документацією - як такий, ви повинні переконатися, що ці плагіни були запущені на попередній стадії.


Привіт @ Гервіан. Чудова відповідь. Поки що я міг би використати ваш ансер. У мене є два класи з однаковою назвою, але в різних пакетах. Однак swagger.json містить визначення лише одного з них. Іншого немає
Едмонда

@Hervian Я отримував помилки, поки не зробив наступне: 1) створив файл src / main / asciidoc / swagger.adoc із вмістом зверху. 2) додав ці властивості до POM: <phase.generate-documentation> процеси-класи </phase.generate-documentation> <generated.asciidoc.directory> $ {project.build.directory} / api-gen </ generated. 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
thx, так, це досить приємно, я використовую це для своїх робочих проектів. Я думаю написати вільний код для підтримки openapi 3.0.
Ірдіс

2
Вся слава авторам інструментів, на які він покладається,
часто

@Irdis Я спробував скористатися посиланням. Це дозволяє аналізувати документ Swagger 2.0, але документ, який я надаю, є Open API 3.0, і він не може сформувати документ.
hellowahab

Я спробував swagger 3+ - чудово працює, він показує необроблений html для зауважень ...
Саша Бонд

Це чудовий інструмент! Якщо у вас коли-небудь виникнуть проблеми, як у мене (наприклад, 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 - однаковий результат). Потім я зробив це на вікнах, і це спрацювало як шарм. Дякую за цей інструмент, він приголомшливий.
Dabux

3
@Dabux ніколи не тестував на ubuntu, але є одна ситуація, коли я знаю, де люди стикаються з такою ж проблемою, як ви пояснили, і це коли у вас є будь-який активний блокувальник як блокувальник спливаючих вікон у браузері
Mrinmoy

@Mrinmoy ти маєш рацію, у мене був включений блокувальник реклами, саме через це, а не через ОС.
Dabux

1

Для мене найпростішим рішенням було імпортувати swagger (v2) у Postman, а потім перейти до веб-перегляду. Там ви можете вибрати перегляд "однієї колонки" та скористатися браузером для друку у форматі PDF. Не є автоматизованим / інтегрованим рішенням, але підходить для одноразового використання. Він обробляє ширину паперу набагато краще, ніж друк із editor2.swagger.io, де смуги прокрутки призводять до приховування частин вмісту.


1
спробував використовувати це, але друк через веб-сторінку також додає кілька посилань та іншу інформацію.
hellowahab

Так, я повинен був про це згадати. Не було проблемою для мого використання.
Саймон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.