Как создать код клиента java для документации API REST для swagger
Мой сценарий следующий.
У меня есть swagger.json например: http://petstore.swagger.io/v2/swagger.json
Я хочу использовать сгенерированный java-клиент для REST API выше, например:
PetApi petApi = new PetApi();
Pet pet = new Pet;
pet.setName("cica");
pet.setId(1L);
petApi.addPet(pet);
System.out.println(petApi.getById(1L));`
Expexted output: cica
, и новое домашнее животное хранится в соответствии с имплантацией REST API.
Я успешно создал серверную заглушку для petstore с помощью команды:
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
Но этот код проекта maven является кодом сервера. Он имеет аннотации, такие как @RequestMapping
в PetApi.java
, а также имеет WebMvcConfiguration.class
.
Я не хочу иметь сервер-заглушку. Я хочу иметь клиентскую библиотеку для Petestore REST API.
Есть ли инструмент, который может создать для меня соответствующую клиентскую библиотеку? Должен ли я изменить сервер-заглушку, следовательно, у него есть все модели или я должен использовать простой springRestTemplate?
Спасибо за ответы!
Ответы
Ответ 1
Я думаю, что вы не используете правильное значение для параметра -l
Swagger Codegen (вы используете spring-mvc
, который является серверной технологией). Вы можете попробовать использовать значение java
.
Вы также заметили, что есть инструмент, Restlet Studio, который позволяет генерировать код из содержимого Swagger. Для Java он в основном полагается на структуру Restlet, но я думаю, что он может удовлетворить ваши потребности.
Надеюсь, это поможет вам,
Thierry
Ответ 2
Вместо использования JAR вы также можете использовать https://generator.swagger.io для создания SDK (Java, Ruby, PHP и т.д.) в Интернете не устанавливая ничего. Вот пример:
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
и вот пример ответа:
{"code":"1445940806041","link":"https://generator.swagger.io/api/gen/download/1445940806041"}
Затем вы можете загрузить SDK с застежкой-молнией по ссылке.
Дополнительные параметры по настройке вывода https://generator.swagger.io см. в https://github.com/swagger-api/swagger-codegen#online-generators
(Swagger Generator является частью проекта Swagger Codegen (бесплатный, с открытым исходным кодом), который также может запускать ваш локальный генератор Swagger)
По состоянию на июль 2017 года клиентский генератор Java API поддерживает следующие HTTP-библиотеки: Jersey 1.x и 2.x, Retrofit 1.x и 2.x, okhttp, Feign, RESTEasy, RestTemplate
Ответ 3
Для вашего сценария ваша команда должна выглядеть так:
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
Другие варианты преобразования swagger в jave:
Хотя с проектом GitHub вам решать, какую библиотеку (jersey, jersey2, okhttp-gson и т.д.) использовать при конвертации чванства в Java-клиент или код сервера. С генератором .swagger.io вы также можете решить, какую библиотеку использовать. Может быть улучшение для editor.swagger.io, чтобы иметь возможность выбирать библиотеку для использования. Следует учитывать, что параметры swagger.io полностью бесплатны, тогда как Restlet и APIMATIC являются freemium.
Ответ 4
Возможно, самый быстрый и простой способ сделать это:
-
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>
Подробнее здесь
Ответ 5
Просто глупое расширение @wing328 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
Если это приводит к этой ошибке (проблема с сертификатом SSL)
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
Добавьте ключ -k в curl. Пример:
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"}
Отправка полной полезной нагрузки JSON для спецификации swagger вместо URL
Вместо использования swaggerUrl с URL-адресом спецификации OpenAPI/Swagger, вы также можете включить спецификацию в полезную нагрузку JSON со спецификацией, например.
{
"options": {},
"spec": {
"swagger": "2.0",
"info": {
"version": "1.0.0",
"title": "Test API"
},
...
}
}
Дополнительная информация: Официальный документ
Ответ 6
Несмотря на то, что генератор swagger генерирует Java SDK, APIMATIC sdk довольно зрелый, детализированный и дает большую гибкость, что Swagger Gen. Вы должны попробовать генератор sdk APIMATIC, вам понравится.