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!
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
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
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.
Probablement le moyen le plus rapide et le plus simple de le faire:
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>
Plus d'infos ici
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
{"code":"7e542952-5385-4e34-8cf6-6196722fb18b","link":"https://generator.swagger.io/api/gen/download/7e542952-5385-4e34-8cf6-6196722fb18b"}
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