2015-05-13 12 views
44

Ho usato l'interfaccia utente di Swagger per visualizzare i miei servizi web REST e l'ho ospitato su un server.Genera PDF dalla documentazione dell'API di Swagger

Tuttavia, questo servizio di Swagger è accessibile solo su un determinato server. Se voglio lavorare offline, qualcuno sa come posso creare un PDF statico usando l'interfaccia utente Swagger e lavorarci? Inoltre, un PDF è facile da condividere con persone che non hanno accesso al server.

Grazie mille!

risposta

18

ho capito un modo utilizzando https://github.com/springfox/springfox e https://github.com/RobWin/swagger2markup

Utilizzato Swagger 2 per implementare documentazione.

+0

Ciao, sto anche cercando per generare la documentazione offline usando swagger. Sei in grado di generare la documentazione swagger ?? –

+0

sì, ho usato i progetti di esempio e integrato il mio codice webservice in loro ed è stato in grado di generare la documentazione. –

+0

Puoi dirmi in breve, come posso integrare il mio servizio web con esempi che hai menzionato sopra. –

3

Mentre la soluzione di Amaan Mohammed sembra funzionare, c'è un modo più semplice per farlo. Dai uno sguardo allo swagger2markup-cli.

12

È possibile modificare il progetto REST, in modo da produrre i documenti statici necessari (html, pdf ecc.) Durante la creazione del progetto.

Se si dispone di un progetto Java Maven è possibile utilizzare il frammento pom qui sotto. Usa una serie di plugin per generare un pdf e una documentazione html (delle risorse REST del progetto).

  1. resto-API -> swagger.json: spavalderia-maven-plugin
  2. swagger.json -> AsciiDoc: swagger2markup-maven-plugin
  3. AsciiDoc -> PDF: asciidoctor-maven-plugin

si prega di essere consapevoli del fatto che l'ordine delle questioni di esecuzione, dal momento che l'output di un plug-in, diventa l'input per il prossimo:

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

Il plugin asciidoctor presuppone l'esistenza di un file .adoc su cui lavorare. È possibile creare uno che raccoglie semplicemente quelli che sono stati creati dal plugin swagger2markup:

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

Se si desidera che il documento HTML generato per diventare parte del vostro file di guerra, è necessario assicurarsi che sia presente sul livello superiore: i file statici nella cartella WEB-INF non verranno pubblicati. È possibile farlo nel Maven-guerra-plugin:

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

La guerra lavora sulla documentazione generata - in quanto tale, è necessario assicurarsi che questi plugin sono stati eseguiti in una fase precedente.

+0

Hi @Hervian. Bella risposta. Potrei usare la tua anser finora. Ho due classi con lo stesso nome ma in pacchetti diversi. Tuttavia lo swagger.json contiene la definizione per solo uno di essi. L'altro manca – edmond

12

modo pratico: tramite un browser di Stampa/Anteprima

  1. riquadro Nascondi editore
  2. Anteprima di stampa (io ho usato Firefox, altri anche bene)
  3. cambiare la sua impostazione di pagina e stampare in PDF

enter image description here

+0

Semplice! La documentazione esce abbastanza bene. – ShaTin

+1

Puoi anche scegliere tra due progetti di documentazione purché ci siano due servizi Swagger: https://editor.swagger.io/ (nuovo) e http://editor2.swagger.io (precedente)! – naXa

Problemi correlati