2015-05-23 13 views
23

Ho la mia API REST sviluppata utilizzando JAX-RS/Jersey in Java. Voglio convertire/generare la documentazione UI basata su Swagger per questo. Qualcuno può dirmi preciso/passaggi in modo semplice su come farlo? Mi dispiace, ma i passi dati sul loro sito sono poco vaghi per me.Generazione della documentazione dell'interfaccia utente di Swagger per l'API REST

+0

non ho potuto veramente arrivare dove volevo per ottenere con Swagger; Ho finito per usare iodocs: https://github.com/mashery/iodocs. Dai un'occhiata, vedi cosa pensi in alternativa. – Rots

+0

Controlla questo tutorial (http://jakubstas.com/spring-jersey-swagger-create-documentation/), ha istruzioni dettagliate per generare la documentazione dell'interfaccia utente per la tua API. –

+0

Swagger è una specifica. Hai già deciso quale implementazione di Swagger utilizzerai? Se sì, che cos'è? Se no, vuoi usare swagger-springmvc? – DolphinJava

risposta

6

Ci sono diversi modi per integrare spavalderia-core con l'applicazione, ma in base alla descrizione, avevo appena seguire la pagina wiki come descritto sia da https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-1.X-Project-Setup-1.5 o https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project-Setup-1.5 a seconda della versione di Jersey si utilizza.

Queste pagine si collegano anche a una serie di campioni che è possibile utilizzare come riferimento e vedere come funzionano. Inoltre inseriscono swagger-ui direttamente in essi in modo da poter vedere un'intera serie di interazioni.

+0

non utile. niente nell'interfaccia utente lì – Rentonie

+0

La domanda è stata modificata * dopo * questa risposta. La risposta va bene per la domanda originale in quanto non aveva nulla di diretto con l'interfaccia utente. – Ron

+1

Si noti che solo le classi con annotazione '@ Api' verranno scansionate da swagger. –

1

Swagger ha una buona documentazione di implementazione passo per passo su github.

Si dovrebbero usare annotazioni swagger su metodi, risorse, modelli. Quindi devi configure your web.xml as described here. Dopo tutti questi passaggi, è possibile raggiungere swagger-ui yourdomain/api-docs o un altro percorso configurato nel percorso di ascolto di web.xml ApiDeclarationServlet.

C'è un sample swagger app Jax-rs/Jersey

Swagger UI è una collezione senza la dipendenza di HTML, Javascript, CSS e le attività che generano dinamicamente bella documentazione e sandbox da un API Swagger-compliant. Poiché l'interfaccia utente di Swagger non ha dipendenze, è possibile ospitarla in qualsiasi ambiente server o sul computer locale.

+0

Mi dispiace, ma il collegamento alla configurazione di web.xml è errato e non rilevante per la configurazione nella domanda. – Ron

+0

C'è una app di esempio jax-rs/jersey che ha anche configurato il file web.xml, btw non l'ho provato. –

1

È necessario utilizzare roaster: è possibile apportare modifiche al codice sorgente per aggiungere nuove annotazioni. Ecco un esempio per illustrare come usarlo nel tuo caso:

package ma.cars.iscraper; 

import org.jboss.forge.roaster.Roaster; 
import org.jboss.forge.roaster.model.source.*; 

import java.util.List; 

public class Main { 

    public static void main(String[] args) { 



    String originalClassSourceCode = "@Path(\"user\")\n public class SomeClass { @GET\n" + 
       " @Path(\"{userId}\")\n public Response getUserById() {\n return null; \n}"; 

     System.out.println("Before : \n" + originalClassSourceCode); 
    JavaClassSource javaClass = 
       Roaster.parse(JavaClassSource.class,originalClassSourceCode); 

     String pathValue = null; 
     // extract Path annotation value 
     List<AnnotationSource<JavaClassSource>> listAnnotations = javaClass.getAnnotations(); 
     for (AnnotationSource annotation :listAnnotations) { 
      if (annotation.getName().equals("Path")) { 
       pathValue = annotation.getStringValue(); 
      } 
     } 
     AnnotationSource<JavaClassSource> apiAnnotation = javaClass.addAnnotation("com.wordnik.swagger.annotations.Api"); 
     apiAnnotation.setLiteralValue("\"" + pathValue + "\"") ; 

     List<MethodSource<JavaClassSource>> methods = javaClass.getMethods(); 

     for (MethodSource<JavaClassSource> method: methods) { 
      for (AnnotationSource annotation: method.getAnnotations()) { 
       if (annotation.getName().equals("DELETE") || annotation.getName().equals("GET") 
         || annotation.getName().equals("POST") || annotation.getName().equals("PUT")) { 
        String returnTypeClass = method.getReturnType().getQualifiedName(); 
        AnnotationSource<JavaClassSource> apiOperation = method.addAnnotation("com.wordnik.swagger.annotations.ApiOperation"); 
        apiOperation.setLiteralValue("value", "\"value\""); 
        apiOperation.setLiteralValue("response", "\"" + returnTypeClass + ".class\""); 

       } 
      } 
     } 

     System.out.println(javaClass); 

    } 
} 

Ed ecco l'output:

Before : 
@Path("user") 
public class SomeClass { @GET 
    @Path("{userId}") 
    public Response getUserById() { 
return null; 
} 
After : 

import com.wordnik.swagger.annotations.Api; 
import com.wordnik.swagger.annotations.ApiOperation;@Path("user") 
@Api("user") 
public class SomeClass { @GET 
    @Path("{userId}") 
    @ApiOperation(value = "value", response = "Response.class") 
public Response getUserById() { 
return null; 
} 
5

Il modo più semplice che conosco è quello di utilizzare il plugin Maven jaxrs Analyzer. Il che può essere trovato su GitHub

<plugin> 
<groupId>com.sebastian-daschner</groupId> 
<artifactId>jaxrs-analyzer-maven-plugin</artifactId> 
<version>0.4</version> 
<executions> 
    <execution> 
     <goals> 
      <goal>analyze-jaxrs</goal> 
     </goals> 
     <configuration> 
      <!-- Available backends are plaintext (default), swagger and asciidoc --> 
      <backend>plaintext</backend> 
      <!-- Domain of the deployed project, defaults to example.com --> 
      <deployedDomain>example.com</deployedDomain> 
     </configuration> 
    </execution> 
</executions> 

Questo crea l'JSON spavalderia per voi con mvn install clean. Per quanto ne so, non ha bisogno di alcuna manipolazione del web.xml ecc. Come avviene tramite l'analisi bytecode.

Fonte: Adam Bien weblog entry & il suo demo in una delle sessione airhacks

Bonus: a nove minuti video dal creatore del plugin che spiega l'utilizzo

+0

Come configurare questo su eclipse? –

+0

Se si dispone di un progetto Maven, è sufficiente aggiungere la dipendenza ed eclissi prenderà il sopravvento. Senza Maven, dovrò controllare come può essere usato. – dubes

+0

Ho aggiunto la dipendenza..ma sto affrontando questo errore. Plugin com.test.webservices: jaxrs-analyzer-maven-plugin: 0.4 o una delle sue dipendenze non può essere risolto: impossibile trovare com.test.webservices: jaxrs-analyzer-maven-plugin: jar: 0.4 in http://repo.maven.apache.org/maven2 è stato memorizzato nella cache nel repository locale, la risoluzione non verrà ritestata fino a quando non è trascorso l'intervallo di aggiornamento del centrale o gli aggiornamenti sono forzati –