2015-10-26 2 views
15

Мой сценарий следующий.Как сгенерировать код java-клиента для документации API REST API-интерфейсов

У меня есть чванство .json например .: http://petstore.swagger.io/v2/swagger.json Я хочу использовать сгенерированный клиент Java для API REST выше, как:

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

Expexted выход: 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?

Спасибо за ответы!

ответ

9

Я думаю, что вы не используете правильное значение для параметра -l Swagger Codegen (вы используете spring-mvc, который является серверной технологией). Вы можете попытаться использовать значение java.

Вы также можете заметить, что есть инструмент, Restlet Studio, который позволяет генерировать код из содержимого Swagger. Для Java он в основном полагается на структуру Restlet, но я думаю, что это может удовлетворить ваши потребности.

Надеется, что это помогает вам, Тьерри

+1

Спасибо за ответ. Я не могу угаснуть, как я мог пропустить этот раздел в руководстве, но это был явно ответ, который мне нужен. –

8

Вместо использования JAR, вы можете также использовать https://generator.swagger.io для создания SDKs (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

(Кураж генератор является частью проекта Кураж Codegen (бесплатно, с открытым исходным кодом), который вы можете запустить свой локальный генератор Swagger а)

С июля 2017 года клиентский генератор Java API поддерживает следующие HTTP-библиотеки: Jersey 1.x & 2.x, Retrofit 1.x & 2.х, okhttp, Feign, Resteasy, RestTemplate

5

Для вашего сценария ваша команда должна выглядеть так

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 

Другие варианты для преобразования развязность в Jave являются:

Хотя с проектом GitHub это до вас, чтобы решить, какую библиотеку (джерси, jersey2, okhttp-gson и т.д.) для использования при преобразовании развязности в Java клиент или код сервера. С генератором.swagger.io вы также можете decide which library to use. Может быть enhancement to editor.swagger.io, чтобы иметь возможность выбирать библиотеку для использования. Следует учитывать, что параметры swagger.io полностью бесплатны, а Restlet и APIMATIC - freemium.

+1

editor.swagger.io использует generator.swagger.io, который также является мощным проектом проекта swagger codegen, для создания клиентов API, заглушек сервера и документации API. –

+0

@ wing328 Вы правы, и я знаю, что все еще имеет значение, если вы используете проект swagger-codegen или онлайн-версию (generator.swagger.io). В Интернете вы не можете выбрать, с какой библиотекой следует использовать для преобразования. – Huber

+0

Вы можете. См. Https://github.com/swagger-api/swagger-codegen#online-generators о том, как передавать различные параметры для настройки вывода. Для editor.swagger.io есть обсуждение, чтобы добавить меню для настройки вывода: https://github.com/swagger-api/swagger-editor/issues/713 –

-4

Несмотря на то, что генератор трюков генерирует Java SDK, APIMATIC sdk довольно зрелые, детализированы и дают большую гибкость, чем Swagger Gen. Вам следует попробовать генератор svd-файлов APIMATIC, вам понравится.

-1

Вероятно, самый быстрый и простой способ сделать это:

  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>

Подробнее here

0

Просто глупо пристройку к @wing328's 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 -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 

Response

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

Отправка полной чванства спецификации JSON полезную нагрузку вместо URL

Вместо использования swaggerUrl с URL в OpenAPI/Swagger спецификации, вы можете также включают спецификацию в полезной нагрузке JSON со спецификацией, например

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

Дополнительная информация: Official Doc

+0

Я не думаю, что это связано с темой. Я думаю, что использование или даже установка команды «curl» для UNIX-систем - это другой вопрос. –

+0

@ csikos.balint Это связано, потому что, когда я пытался, это привело к ошибке сертификата ... Я не добавлял случайные варианты завитка здесь. –

Смежные вопросы