web-dev-qa-db-fra.com

Comment générer Java pour swagger REST API

Mon scénario est le suivant.

J'ai un swagger. Json par exemple .: http://petstore.swagger.io/v2/swagger.json Je veux utiliser un Java client généré pour le REST API ci-dessus, comme:

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

Sortie explicite: cica et le nouvel animal de compagnie est stocké conformément à l'implémentation de l'API REST.

J'ai réussi à générer un stub de serveur pour le magasin de jouets avec la commande:

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

Mais ce code de projet maven est un code serveur. Il a des annotations comme @RequestMapping dans PetApi.Java et a aussi un WebMvcConfiguration.class.

Je ne veux pas avoir un stub serveur. Je veux avoir une bibliothèque client pour le magasin d'animaux REST API.

Existe-t-il un outil capable de générer la bibliothèque client appropriée pour moi? Devrais-je modifier le stub serveur, donc il a tous les modèles ou devrais-je utiliser un simple springRestTemplate?

Merci pour les réponses!

24
csikos.balint

Je pense que vous n'utilisez pas la bonne valeur pour le paramètre -l de Swagger Codegen (vous utilisez spring-mvc qui est une technologie côté serveur). Vous pouvez essayer d'utiliser la valeur Java.

Vous remarquerez également qu’il existe un outil, Restlet Studio , permettant de générer du code à partir de contenu Swagger. Pour Java, il s’appuie principalement sur le framework Restlet mais je pense que cela pourrait répondre à vos besoins.

J'espère que ça vous aide, Thierry

11
Thierry Templier

Au lieu d'utiliser le fichier JAR, vous pouvez également utiliser https://generator.swagger.io pour générer le SDK (Java, Ruby, PHP, etc.) en ligne sans rien installer. Voici un exemple:

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

et voici un exemple de réponse:

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

Vous pouvez ensuite télécharger le SDK compressé à partir du lien.

Pour plus d'options sur la personnalisation de la sortie de https://generator.swagger.io , veuillez vous reporter à https://github.com/swagger-api/swagger-codegen#online- générateurs

(Swagger Generator fait partie du projet Swagger Codegen (gratuit, en open source) qui vous permet également d’exécuter votre générateur Swagger local)

Depuis juillet 2017, le générateur de client API Java API prend en charge les bibliothèques HTTP suivantes: Jersey 1.x et 2.x, Retrofit 1.x et 2.x, okhttp, Feign, RESTEasy, RestTemplate

13
William Cheng

Pour votre scénario, votre commande devrait ressembler à ceci

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

Les autres options pour convertir swagger en jave sont:

Cependant, avec le projet GitHub, il vous appartient de choisir la bibliothèque (jersey, jersey2, okhttp-gson, etc.) à utiliser lors de la conversion de swagger en Java client ou serveur. Avec generator.swagger .io vous pouvez aussi décider de la bibliothèque à utiliser . Il pourrait y avoir un amélioration à editor.swagger.io pour pouvoir également sélectionner la bibliothèque à utiliser. est que les options swagger.io sont totalement gratuites, alors que Restlet et APIMATIC sont freemium.

10
Huber

Probablement le moyen le plus rapide et le plus simple de le faire:

  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>

Plus d'infos ici

2
zygimantus

Juste une extension idiote à réponse de @ wing328 .

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

S'il en résulte une erreur (problème de certificat SSL)

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

Ajoutez un commutateur -k à curl. Exemple:

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

Réponse

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

Envoi de la charge JSON complète de la spécification swagger au lieu de l'URL

Au lieu d'utiliser swaggerUrl avec une URL vers la spécification OpenAPI/Swagger, vous pouvez également inclure la spécification dans la charge JSON avec spéc, par exemple.

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

Plus d'infos: Doc officiel

1
so-random-dude