1. Введение
В этой статье мы будем использовать проекты Swagger Codegen и OpenAPI Generator для создания клиентов REST из файла спецификации OpenAPI/Swagger .
Также мы создадим проект Spring Boot, в котором будем использовать сгенерированные классы.
Мы будем использовать пример API Swagger Petstore для всего.
2. Создайте клиент REST с помощью Swagger Codegen
Swagger предоставляет утилиту jar, которая позволяет нам создавать клиенты REST для различных языков программирования и нескольких фреймворков.
2.1. Скачать JAR-файл
Код -gen_cli.jar
можно скачать отсюда .
Для получения последней версии проверьте репозиторий swagger-codegen-cli .
2.2. Создать клиента
Давайте сгенерируем наш клиент, выполнив команду java -jar swagger-code-gen-cli.jar generate:
java -jar swagger-codegen-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
--api-package com.foreach.petstore.client.api \
--model-package com.foreach.petstore.client.model \
--invoker-package com.foreach.petstore.client.invoker \
--group-id com.foreach \
--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
- Каркас реализации — предоставляется с помощью
—library
- Выходной каталог — указывается с помощью
-o
Чтобы просмотреть все параметры, связанные с Java, введите следующую команду:
java -jar swagger-codegen-cli.jar config-help -l java
Swagger Codegen поддерживает следующие библиотеки Java (пары HTTP-клиентов и библиотек обработки JSON):
Джерси1
– Джерси1 + ДжексонДжерси2
– Джерси2 + Джексонпритворяться
– OpenFeign + Джексонokhttp-gson
— OkHttp + Gsonдооснащение
(устарело) – Retrofit1/OkHttp + Gsonretrofit2
– Retrofit2/OkHttp + Gsonшаблон отдыха
— Spring RestTemplate + Джексонотдых-легко
– Resteasy + Джексон
В этой статье мы выбрали rest-template
, поскольку он является частью экосистемы Spring.
3. Сгенерируйте REST-клиент с помощью генератора OpenAPI
OpenAPI Generator — это форк Swagger Codegen, способный генерировать более 50 клиентов из любых документов OpenAPI Specification 2.0/3.x.
В то время как Swagger Codegen поддерживается SmartBear, OpenAPI Generator поддерживается сообществом, в которое входят более 40 ведущих участников и создателей шаблонов Swagger Codegen в качестве членов команды-основателя.
3.1. Монтаж
Возможно, самый простой и переносимый метод установки — использование оболочки пакета npm
, которая работает, предоставляя оболочку 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. Создать клиента
Во-первых, параметры OpenAPI Generator почти идентичны параметрам Swagger Codegen. Наиболее заметным отличием является замена флага языка -l на флаг генератора
-g
, который использует язык для генерации клиента в качестве параметра.
Затем давайте создадим клиент, эквивалентный тому, который мы создали с помощью Swagger Codegen, используя команду jar
:
java -jar openapi-generator-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
--api-package com.foreach.petstore.client.api \
--model-package com.foreach.petstore.client.model \
--invoker-package com.foreach.petstore.client.invoker \
--group-id com.foreach \
--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, а также несколько дополнительных. Генератор OpenAPI поддерживает следующие библиотеки Java (пары HTTP-клиентов и библиотек обработки JSON):
Джерси1
– Джерси1 + ДжексонДжерси2
– Джерси2 + Джексонпритворяться
– OpenFeign + Джексонokhttp-gson
— OkHttp + Gsonдооснащение
(устарело) – Retrofit1/OkHttp + Gsonretrofit2
– Retrofit2/OkHttp + Gsonresttemplate
— Spring RestTemplate + Джексонвеб-клиент
— Spring 5 WebClient + Jackson (только генератор OpenAPI)отдых
– отдых + Джексонверткс
— VertX + Джексонgoogle-api-client
— Клиент Google API + Джексон- `
спокойный — спокойный + Джексон/Гсон (только для Java 8
)` native
— собственный Java HttpClient + Jackson (только для Java 11; только для генератора OpenAPI)microprofile
— клиент микропрофиля + Джексон (только генератор OpenAPI)
4. Создайте проект Spring Boot
Давайте теперь создадим новый проект Spring Boot.
4.1. Зависимость от Maven
Сначала мы добавим зависимость библиотеки Generated API Client в файл pom.xml
нашего проекта :
<dependency>
<groupId>com.foreach</groupId>
<artifactId>spring-swagger-codegen-api-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
4.2. Выставляйте классы API как Spring Bean-компоненты
Чтобы получить доступ к сгенерированным классам, нам нужно настроить их как bean-компоненты:
@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. Основное приложение Spring
Нам нужно импортировать только что созданную конфигурацию:
@SpringBootApplication
@Import(PetStoreIntegrationConfig.class)
public class PetStoreApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(PetStoreApplication.class, args);
}
}
4.5. Использование API
Поскольку мы настроили наши классы API как bean-компоненты, мы можем свободно внедрять их в наши классы, управляемые Spring:
@Autowired
private PetApi petApi;
public List<Pet> findAvailablePets() {
return petApi.findPetsByStatus(Arrays.asList("available"));
}
5. Альтернативные решения
Существуют и другие способы создания клиента REST, кроме выполнения Swagger Codegen или интерфейса командной строки OpenAPI Generator.
5.1. Плагин Maven
Плагин swagger -codegen Maven , который можно легко настроить в файле pom.xml,
позволяет создать клиент с теми же параметрами, что и интерфейс командной строки Swagger Codegen.
Это базовый фрагмент кода, который мы можем включить в pom.xml
нашего проекта для автоматического создания клиента:
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>2.2.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>swagger.yaml</inputSpec>
<language>java</language>
<library>resttemplate</library>
</configuration>
</execution>
</executions>
</plugin>
5.2. API-интерфейс онлайн-генератора Swagger Codegen
Уже опубликованный 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. Вы можете передать те же параметры, что и в интерфейсе командной строки Swager Codegen, для настройки выходного клиента.
https://generator.swagger.io содержит документацию Swagger для API, где мы можем проверить его документацию и попробовать.
5.3. OpenAPI Generator Онлайн генератор API
Как и Swagger Godegen, OpenAPI 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. Вы можете передать те же параметры, что и в интерфейсе командной строки Swagger Codegen, для настройки выходного клиента.
https://github.com/OpenAPITools/openapi-generator/blob/master/docs/online.md содержит документацию по API.
6. Заключение
Swagger Codegen и OpenAPI Generator позволяют быстро создавать клиенты REST для вашего API на многих языках и с выбранной вами библиотекой. Мы можем создать клиентскую библиотеку с помощью инструмента CLI, плагина Maven или онлайн-API.
Это проект на основе Maven, который содержит три модуля Maven: сгенерированный клиент Swagger API, сгенерированный клиент OpenAPI и приложение Spring Boot.
Как всегда, вы можете найти код на GitHub .