Mein Szenario ist das folgende.
Ich habe einen swagger .json zB: http://petstore.swagger.io/v2/swagger.json Ich möchte einen generierten Java= Client für den REST API oben, wie:
PetApi petApi = new PetApi();
Pet pet = new Pet;
pet.setName("cica");
pet.setId(1L);
petApi.addPet(pet);
System.out.println(petApi.getById(1L));`
Expexted-Ausgabe: cica
und das neue Haustier wird gemäß der REST API-Implementierung gespeichert.
Ich habe mit dem folgenden Befehl erfolgreich einen Server-Stub für den Petstore generiert:
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
Aber dieser Maven-Projektcode ist ein Servercode. Es hat Anmerkungen wie @RequestMapping
im PetApi.Java
und hat auch ein WebMvcConfiguration.class
.
Ich möchte keinen Server-Stub haben. Ich möchte eine Client-Bibliothek für die petstore REST API.
Gibt es ein Tool, mit dem ich die passende Client-Bibliothek generieren kann? Soll ich den Server-Stub modifizieren, er hat also alle Modelle oder soll ich ein einfaches springRestTemplate verwenden?
Danke für die Antworten!
Ich denke, dass Sie nicht den richtigen Wert für den Parameter -l
Von Swagger Codegen verwenden (Sie verwenden spring-mvc
, Eine serverseitige Technologie). Sie könnten versuchen, den Wert Java
zu verwenden.
Sie können auch feststellen, dass es ein Tool gibt, das Restlet Studio , mit dem Sie Code aus Swagger-Inhalten generieren können. Für Java stützt es sich hauptsächlich auf das Restlet-Framework, aber ich denke, dass es Ihren Bedürfnissen entsprechen könnte.
Hoffe es hilft dir, Thierry
Anstatt die JAR zu verwenden, können Sie auch https://generator.swagger.io verwenden, um die SDKs (Java, Ruby, PHP usw.) online zu generieren, ohne etwas zu installieren. Hier ist ein Beispiel:
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
und hier ist eine Beispielantwort:
{"code":"1445940806041","link":"https://generator.swagger.io/api/gen/download/1445940806041"}
Sie können das komprimierte SDK dann über den Link herunterladen.
Weitere Optionen zum Anpassen der Ausgabe von https://generator.swagger.io finden Sie unter https://github.com/swagger-api/swagger-codegen#online- Generatoren
(Swagger Generator ist Teil des Swagger Codegen-Projekts (kostenlos, Open Source), mit dem Sie auch Ihren lokalen Swagger Generator betreiben können.)
Ab Juli 2017 unterstützt der Java API-Client-Generator die folgenden HTTP-Bibliotheken: Jersey 1.x & 2.x, Retrofit 1.x & 2.x, okhttp, Feign, RESTEasy, RestTemplate
Für Ihr Szenario sollte Ihr Befehl so aussehen
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
Andere Optionen, um swagger in jave umzuwandeln, sind:
Beim GitHub-Projekt müssen Sie jedoch entscheiden, welche Bibliothek (jersey, jersey2, okhttp-gson usw.) beim Konvertieren von swagger in Java Client- oder Server-Code. Mit generator.swagger) verwendet werden soll .io Sie können auch entscheiden, welche Bibliothek verwendet werden soll . Es könnte eine Erweiterung von editor.swagger.io geben, um auch die zu verwendende Bibliothek auswählen zu können ist, dass die Optionen von swagger.io völlig kostenlos sind, während Restlet und APIMATIC Freemium sind.
Der wahrscheinlich schnellste und einfachste Weg, dies zu tun:
wget https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
Java -jar swagger-codegen-cli-2.2.1.jar generate -l <language> -i <pathOrUrlOfSwaggerSpec>
Weitere Infos hier
Nur eine blöde Erweiterung zu @ wing328s Antwort .
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
Wenn dies zu diesem Fehler führt (Problem mit dem SSL-Zertifikat)
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
Fügen Sie einen -k-Schalter zum Einrollen hinzu. Beispiel:
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
{"code":"7e542952-5385-4e34-8cf6-6196722fb18b","link":"https://generator.swagger.io/api/gen/download/7e542952-5385-4e34-8cf6-6196722fb18b"}
Anstatt swaggerUrl mit einer URL zur OpenAPI/Swagger-Spezifikation zu verwenden, können Sie die Spezifikation auch in die JSON-Nutzdaten mit spec aufnehmen, z.
{ "options": {}, "spec": { "swagger": "2.0", "info": { "version": "1.0.0", "title": "Test API" }, ... } }
Weitere Informationen: Official Doc