2015-10-26 20 views
15

Il mio scenario è il seguente.Come generare il codice client java per la documentazione dell'API REST swagger

Ho una spavalderia .json es .: http://petstore.swagger.io/v2/swagger.json voglio usare un client java generato per l'API REST sopra, come:

PetApi petApi = new PetApi(); 
Pet pet = new Pet; 
pet.setName("cica"); 
pet.setId(1L); 
petApi.addPet(pet); 
System.out.println(petApi.getById(1L));` 

expexted uscita: cica e il nuovo animale domestico viene immagazzinato secondo la implmentazione API REST. stub

Ho generato con successo server per il PetStore con il comando:

java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate 
    -i http://petstore.swagger.io/v2/swagger.json 
    -l spring-mvc 
    -o samples/server/petstore/spring-mvc 

Ma questo codice di progetto Maven è un codice del server. Ha annotazioni come @RequestMapping in PetApi.java e ha anche un WebMvcConfiguration.class.

Non voglio avere un server-stub. Voglio avere una libreria client per l'API REST del petstore.

C'è uno strumento che può generare la libreria client appropriata per me? Dovrei modificare lo stub del server, quindi ha tutti i modelli o dovrei usare un semplice springRestTemplate?

Grazie per le risposte!

risposta

9

Penso che non si utilizzi il valore corretto per il parametro -l di Swagger Codegen (si utilizza spring-mvc che è una tecnologia lato server). Potresti provare a utilizzare il valore java.

Si può anche notare che esiste uno strumento, lo Restlet Studio, che consente di generare codice dal contenuto Swagger. Per Java, si basa principalmente sul framework di Restlet, ma penso che possa soddisfare le tue esigenze.

Spero che ti aiuta, Thierry

+1

Grazie per la risposta. Non riesco a capire come potrei perdere questa sezione nel manuale, ma questa era esattamente la risposta di cui avevo bisogno. –

8

Invece di usare il JAR, è anche possibile utilizzare https://generator.swagger.io per generare gli SDK (Java, Ruby, PHP, ecc) senza installare nulla. Ecco un esempio:

curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java 

e qui è una risposta del campione:

{"code":"1445940806041","link":"https://generator.swagger.io/api/gen/download/1445940806041"} 

È quindi possibile scaricare l'SDK zip dal link.

Per ulteriori opzioni su come personalizzare l'output di https://generator.swagger.io, si prega di fare riferimento a https://github.com/swagger-api/swagger-codegen#online-generators

(Swagger Generator è parte del progetto Swagger Codegen (gratuito, open source) che è possibile eseguire il generatore Swagger locale così)

A partire da luglio 2017, il generatore di client API Java supporta le seguenti librerie HTTP: Jersey 1.x & 2.x, Retrofit 1.x & 2.x, okhttp, Feign, RESTEasy, RestTemplate

5

per lo scenario tuo comando dovrebbe essere simile a questo

java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate 
-i http://petstore.swagger.io/v2/swagger.json 
-l java 
-o samples/server/petstore/spring-mvc 

Altre opzioni per convertire spavalderia a JAVE sono:

Anche se con il progetto GitHub sta a voi decidere quale libreria (jersey, jersey2, okhttp-GSON, ecc) da utilizzare per la conversione spavalderia al client Java o il codice del server. Con generator.swagger.io puoi anche decide which library to use. Potrebbe esserci un enhancement to editor.swagger.io per poter selezionare anche la libreria da usare. Considerare è che le opzioni swagger.io sono completamente gratuite, mentre Restlet e APIMATIC sono freemium.

+1

editor.swagger.io utilizza generator.swagger.io, che è anche potenziato dal progetto swegger codegen, per generare client API, stub server e documentazione API. –

+0

@ wing328 Hai ragione e so che fa ancora la differenza se usi il progetto swagger-codegen o la versione online (generator.swagger.io). In linea non è possibile selezionare con quale libreria deve essere utilizzata per la conversione. – Huber

+0

Puoi. Si prega di fare riferimento a https://github.com/swagger-api/swagger-codegen#online-generators su come passare varie opzioni per personalizzare l'output. Per editor.swagger.io, c'è una discussione per aggiungere un menu per personalizzare anche l'output: https://github.com/swagger-api/swagger-editor/issues/713 –

-4

Sebbene il generatore di swagger generi un Java SDK, gli sdk APIMATIC sono piuttosto maturi, dettagliati e offrono una maggiore flessibilità rispetto a Swagger Gen. Dovresti provare il generatore di sdk APIMATIC, ti piacerà.

-1

Probabilmente il modo più semplice e veloce per farlo:

  1. wget https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
  2. java -jar swagger-codegen-cli-2.2.1.jar generate -l <language> -i <pathOrUrlOfSwaggerSpec>

Maggiori informazioni here

0

Basta un'estensione sciocco @wing328's answer.

curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java 

Se il risultato e 'questo errore (problema certificato SSL)

curl: (60) SSL certificate problem: unable to get local issuer certificate 
More details here: https://curl.haxx.se/docs/sslcerts.html 

Aggiungi un interruttore -k per arricciare. Esempio:

curl -k -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java 

risposta

{"code":"7e542952-5385-4e34-8cf6-6196722fb18b","link":"https://generator.swagger.io/api/gen/download/7e542952-5385-4e34-8cf6-6196722fb18b"} 

Invio la completa spavalderia spec JSON carico utile, invece di URL

Invece di usare swaggerUrl con un URL al OpenAPI/Swagger spec, è possibile includere anche le specifiche nel payload JSON con specifiche, ad es

{ 
    "options": {}, 
    "spec": { 
    "swagger": "2.0", 
    "info": { 
     "version": "1.0.0", 
     "title": "Test API" 
    }, 
    ... 
    } 
} 

Ulteriori informazioni: Official Doc

+0

Non penso che questo sia correlato all'argomento. Penso che l'uso o persino l'installazione del comando "curl" sui sistemi UNIX sia una domanda diversa. –

+0

@ csikos.balint È correlato perché quando ho provato, si è verificato un errore del certificato ... Non stavo aggiungendo opzioni casuali di arricciatura qui. –

Problemi correlati