1. введение
В этой статье мы будем использовать Swagger Codegen и Open API Generator проекты для создания клиентов REST из файла Open API/Swagger spec|/.
Кроме того, мы создадим проект Spring Boot, в котором будем использовать сгенерированные классы.
Мы будем использовать пример Swagger Petstore API для всего.
2. Создайте Клиент REST С Помощью Swagger Codegen
Swagger предоставляет утилиту jar, которая позволяет нам создавать клиенты REST для различных языков программирования и нескольких фреймворков.
2.1. Загрузите Файл Jar
В code-gen_cli.jar можно скачать с здесь .
Для получения последней версии, пожалуйста, проверьте репозиторий swagger-codegen-cli .
2.2. Создание Клиента
Давайте сгенерируем наш клиент, выполнив команду java-jar swagger-code-gen-cli.jar генерировать:
java -jar swagger-codegen-cli.jar generate \ -i http://petstore.swagger.io/v2/swagger.json \ --api-package com.baeldung.petstore.client.api \ --model-package com.baeldung.petstore.client.model \ --invoker-package com.baeldung.petstore.client.invoker \ --group-id com.baeldung \ --artifact-id spring-swagger-codegen-api-client \ --artifact-version 0.0.1-SNAPSHOT \ -l java \ --library resttemplate \ -o spring-swagger-codegen-api-client
Приведенные аргументы состоят из:
- URL – адрес или путь к исходному файлу swagger предоставляется с помощью аргумента -i
- Имена пакетов для сгенерированных классов – предоставляются с помощью –api-package , –model-package , –invoker-package
- Сгенерированные свойства проекта Maven –group-id , –artifact-id , –artifact-version
- Язык программирования сгенерированного клиента – предоставляется с использованием -l
- Структура реализации – предоставляется с использованием библиотеки –
- Выходной каталог – предоставляется с помощью -o
Чтобы перечислить все параметры, связанные с Java, введите следующую команду:
java -jar swagger-codegen-cli.jar config-help -l java
Swagger Codegen поддерживает следующие библиотеки Java (пары HTTP-клиентов и библиотеки обработки JSON):
- jersey1 – Jersey1 + Джексон
- jersey2 – Jersey2 + Джексон
- притворство – OpenFeign + Джексон
- охттп-гсон – ОХТТП + Гсон
- retrofit (Устаревший) – Retrofit1/OkHttp + Gson
- retrofit2 – Retrofit2/OkHttp + Gson
- rest-шаблон – Пружинная рестемплата + Джексон
- отдых-легко – Отдых + Джексон
В этой статье мы выбрали rest-шаблон , поскольку он является частью экосистемы Spring.
3. Создайте Клиент REST С Помощью Генератора Открытых API
Генератор OpenAPI – это вилка кода Swagger, способная генерировать более 50 клиентов из любых документов спецификации Open API 2.0/3.x.
В то время как Swagger Codegen поддерживается SmartBear, генератор OpenAPI поддерживается сообществом, в которое входят более 40 ведущих участников и создателей шаблонов Swagger Codegen в качестве членов команды-основателей.
3.1. Установка
Возможно, самым простым и переносимым методом установки является использование оболочки npm package , которая работает, предоставляя оболочку CLI поверх параметров командной строки, поддерживаемых кодом Java. Установка проста:
npm install @openapitools/openapi-generator-cli -g
Для тех, кому нужен файл JAR, его можно найти в Maven Central . Давайте скачаем его прямо сейчас:
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/4.2.3/openapi-generator-cli-4.2.3.jar \ -O openapi-generator-cli.jar
3.2. Создание Клиента
Во-первых, параметры для генератора Open API почти идентичны параметрам для Swagger Codegen. Наиболее заметным отличием является замена флага -l language флагом -g generator, который использует язык для создания клиента в качестве параметра.
Далее, давайте сгенерируем клиент, эквивалентный тому, который мы сгенерировали с помощью Swagger Codegen, используя команду jar :
java -jar openapi-generator-cli.jar generate \ -i http://petstore.swagger.io/v2/swagger.json \ --api-package com.baeldung.petstore.client.api \ --model-package com.baeldung.petstore.client.model \ --invoker-package com.baeldung.petstore.client.invoker \ --group-id com.baeldung \ --artifact-id spring-openapi-generator-api-client \ --artifact-version 0.0.1-SNAPSHOT \ -g java \ -p java8=true \ --library resttemplate \ -o spring-openapi-generator-api-client
Чтобы перечислить все параметры, связанные с Java, введите команду:
java -jar openapi-generator-cli.jar config-help -g java
Генератор OpenAPI поддерживает все те же библиотеки Java, что и Swagger CodeGen, плюс несколько дополнительных. Следующие библиотеки Java (пары HTTP-клиентов и библиотеки обработки JSON) поддерживаются генератором Open API:
- jersey1 – Jersey1 + Джексон
- jersey2 – Jersey2 + Джексон
- притворство – OpenFeign + Джексон
- охттп-гсон – ОХТТП + Гсон
- retrofit (Устаревший) – Retrofit1/OkHttp + Gson
- retrofit2 – Retrofit2/OkHttp + Gson
- опорная плита – Пружинная опорная плита + Джексон
- webclient – Spring 5 WebClient + Jackson (только генератор OpenAPI)
- resteasy – Resteasy + Джексон
- vertx – VertX + Джексон
- google-api-клиент – Клиент Google API + Джексон
- rest-assured – rest-assured + Jackson/Gson (только Java 8)
- native – Java native HttpClient + Jackson (только Java 11; только генератор OpenAPI)
- микропрофиль – Клиент микропрофиля + Джексон (только генератор OpenAPI)
4. Создайте проект Spring Boot
Теперь давайте создадим новый проект Spring Boot.
4.1. Зависимость Maven
Сначала мы добавим зависимость сгенерированной клиентской библиотеки API – в наш проект pom.xml файл:
com.baeldung spring-swagger-codegen-api-client 0.0.1-SNAPSHOT
4.2. Представление классов API в виде весенних бобов
Чтобы получить доступ к сгенерированным классам, нам нужно настроить их как бобы:
@Configuration public class PetStoreIntegrationConfig { @Bean public PetApi petApi() { return new PetApi(apiClient()); } @Bean public ApiClient apiClient() { return new ApiClient(); } }
4.3. Конфигурация клиента API
Класс ApiClient используется для настройки аутентификации, базового пути API, общих заголовков и отвечает за выполнение всех запросов API.
Например, если вы работаете с OAuth:
@Bean public ApiClient apiClient() { ApiClient apiClient = new ApiClient(); OAuth petStoreAuth = (OAuth) apiClient.getAuthentication("petstore_auth"); petStoreAuth.setAccessToken("special-key"); return apiClient; }
4.4. Основное применение Пружины
Нам нужно импортировать вновь созданную конфигурацию:
@SpringBootApplication @Import(PetStoreIntegrationConfig.class) public class PetStoreApplication { public static void main(String[] args) throws Exception { SpringApplication.run(PetStoreApplication.class, args); } }
4.5. Использование API
Поскольку мы настроили наши классы API как бобы, мы можем свободно вводить их в наши классы, управляемые весной:
@Autowired private PetApi petApi; public ListfindAvailablePets() { return petApi.findPetsByStatus(Arrays.asList("available")); }
5. Альтернативные Решения
Существуют и другие способы создания клиента REST, кроме выполнения Swagger Codegen или Open API Generator CLI.
5.1. Плагин Maven
Плагин swagger-codegen Maven , который можно легко настроить в вашем pom.xml позволяет генерировать клиент с теми же параметрами, что и CLI Swagger Codegen.
Это базовый фрагмент кода, который мы можем включить в ваш проект pom.xml для автоматической генерации клиента:
io.swagger swagger-codegen-maven-plugin 2.2.3 generate swagger.yaml java resttemplate
5.2. Swagger Codegen Online Generator API
Уже опубликованный API, который помогает нам генерировать клиента, отправляя запрос POST на URL http://generator.swagger.io/api/gen/clients/java передача URL-адреса спецификации вместе с другими параметрами в теле запроса.
Давайте сделаем пример, используя простую команду curl:
curl -X POST -H "content-type:application/json" \ -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' \ http://generator.swagger.io/api/gen/clients/java
Ответом будет формат JSON, содержащий загружаемую ссылку, содержащую сгенерированный клиентский код в формате zip. Вы можете передать те же параметры, которые используются в CLI Swagger Codegen, чтобы настроить клиент вывода.
https://generator.swagger.io содержит документацию Swagger для API, где мы можем проверить ее документацию и попробовать.
5.3. OpenAPI Generator Online Generator API
Как и Swagger Codegen, Open API Generator также имеет онлайн-генератор. Давайте выполним пример с помощью простой команды curl:
curl -X POST -H "content-type:application/json" \ -d '{"openAPIUrl":"http://petstore.swagger.io/v2/swagger.json"}' \ http://api.openapi-generator.tech/api/gen/clients/java
Ответ в формате JSON будет содержать загружаемую ссылку на сгенерированный клиентский код в формате zip. Вы можете передать те же параметры, которые используются в CLI Swagger Codegen, чтобы настроить клиент вывода.
https://github.com/OpenAPITools/openapi-generator/blob/master/docs/online.md содержит документацию по API.
6. Заключение
Swagger Codegen и Open API Generator позволяют быстро создавать клиенты REST для вашего API с множеством языков и с библиотекой по вашему выбору. Мы можем создать клиентскую библиотеку с помощью инструмента CLI, плагина Maven или онлайн-API.
Это проект на основе Maven,который содержит три модуля Maven: сгенерированный клиент API Swagger, сгенерированный клиент OpenAPI и приложение Spring Boot.
Как всегда, вы можете найти код, доступный на GitHub .