2015-05-13 6 views
44

Я использовал интерфейс Swagger для отображения моих веб-сервисов REST и размещал его на сервере.Сгенерировать PDF из документации Swagger API

Однако эту услугу Swagger можно получить только на определенном сервере. Если я хочу работать в автономном режиме, кто-нибудь знает, как я могу создать статический PDF-файл с использованием интерфейса Swagger и работать с ним? Кроме того, PDF-файл можно легко разделить с людьми, которые не имеют доступа к серверу.

Большое спасибо!

ответ

18

Я придумал, как с помощью https://github.com/springfox/springfox и https://github.com/RobWin/swagger2markup

Используется Кураж 2 для осуществления документации.

+0

привет, я также пытаюсь генерировать автономную документацию с использованием swagger. Можете ли вы создать документацию по swagger? –

+0

Да, я использовал примеры проектов и интегрировал в них свой код webservice и смог создать документацию. –

+0

Не могли бы вы рассказать мне вкратце, как я могу интегрировать свой веб-сервис в примеры, которые вы упомянули выше. –

3

Хотя решение Amaan Mohammed выглядит так, как будто оно будет работать, есть более простой способ сделать это. Взгляните на swagger2markup-cli.

12

Вы можете изменить проект REST, чтобы создать необходимые статические документы (html, pdf и т. Д.) При создании проекта.

Если у вас есть проект Java Maven, вы можете использовать снимок ниже. Он использует ряд плагинов для создания pdf и html-документации (ресурсов REST проекта).

  1. отдых-апи -> swagger.json: чванство-Maven-плагин
  2. swagger.json -> Asciidoc: swagger2markup-Maven-плагин
  3. Asciidoc -> PDF: asciidoctor-Maven-плагин

Пожалуйста, обратите внимание, что порядок вопросов исполнения, так как выход одного плагина, становится вход следующего:

<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 документ, чтобы стать частью вашей войны файла вы должны убедиться, что он присутствует на top level - статические файлы в папке WEB-INF не будут обслуживаться. Вы можете сделать это в Maven войны-плагин:

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

Война плагин работает на сгенерированной документации - таким образом, вы должны убедиться, что эти модули были выполнены в более ранней стадии.

+0

Привет @Hervian. Отличный ответ. До сих пор я мог использовать ваш anser. У меня есть два класса с тем же именем, но в разных пакетах. Однако swagger.json содержит определение только для одного из них. Другой отсутствует – edmond

12

Удобный способ: Использование браузера Печать/Предварительный просмотр

  1. панель Скрыть редактор
  2. Print Preview (я использовал Firefox, другие также штраф)
  3. Изменение его параметров страницы и печати в формате PDF

enter image description here

+0

Простой! Документация выходит неплохо. – ShaTin

+1

Вы даже можете выбрать между двумя проектами документации, если есть две службы Swagger: https://editor.swagger.io/ (новый) и http://editor2.swagger.io (предыдущий)! – naXa

Смежные вопросы