webentwicklung-frage-antwort-db.com.de

So generieren Sie Java Client-Code für swagger REST API-Dokumentation

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!

24
csikos.balint

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

11

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

13
William Cheng

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.

10
Huber

Der wahrscheinlich schnellste und einfachste Weg, dies zu tun:

  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>

Weitere Infos hier

2
zygimantus

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

Antwort

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

Senden der vollständigen JSON-Nutzdaten der Swagger-Spezifikation anstelle der URL

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

1
so-random-dude