Создать REST-клиент Spring Boot с помощью Swagger
1. Вступление
В этой статье мы будем использовать проектSwagger CodeGen для создания клиента REST из файлаOpenAPI/Swagger spec.
Также мы создадим проект Spring Boot, в котором будем использовать сгенерированные классы.
Мы будем использовать пример APISwagger Petstore для всего.
2. Создать клиент REST
Swagger предоставляет утилиту jar, которая позволяет нам генерировать REST-клиенты для различных языков программирования и различных сред.
2.1. Загрузить файл Jar
code-gen_cli.jar можно загрузить сhere.
Для получения последней версии проверьте репозиторий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.example.petstore.client.api \
--model-package com.example.petstore.client.model \
--invoker-package com.example.petstore.client.invoker \
--group-id com.example \
--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):
-
jersey1 - Джерси1 + Джексон
-
jersey2 - Джерси2 + Джексон
-
feign - OpenFeign + Джексон
-
okhttp-gson - OkHttp + Gson
-
retrofit (Устарело) - Retrofit1 / OkHttp + Gson
-
retrofit2 - Retrofit2 / OkHttp + Gson
-
rest-template - Spring RestTemplate + Jackson
-
rest-easy - Рестизи + Джексон
В этой статье мы выбралиrest-template, поскольку он является частью экосистемы Spring.
3. Создать проект загрузки Spring
Теперь давайте создадим новый проект Spring Boot.
3.1. Maven Dependency
Сначала мы добавим зависимость клиентской библиотеки Generated API в файл нашего проектаpom.xml:
com.example
spring-swagger-codegen-api-client
0.0.1-SNAPSHOT
3.2. Предоставление классов API как компонентов Spring
Чтобы получить доступ к сгенерированным классам, нам нужно настроить их как бины:
@Configuration
public class PetStoreIntegrationConfig {
@Bean
public PetApi petApi() {
return new PetApi(apiClient());
}
@Bean
public ApiClient apiClient() {
return new ApiClient();
}
}
3.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;
}
3.4. Основное приложение Spring
Нам нужно импортировать вновь созданную конфигурацию:
@SpringBootApplication
@Import(PetStoreIntegrationConfig.class)
public class PetStoreApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(PetStoreApplication.class, args);
}
}
3.5. Использование API
Поскольку мы настроили наши API-классы как бины, мы можем свободно внедрять их в наши классы, управляемые Spring:
@Autowired
private PetApi petApi;
public List findAvailablePets() {
return petApi.findPetsByStatus(Arrays.asList("available"));
}
4. Альтернативные решения
Существуют и другие способы генерации REST-клиента, отличные от выполнения Swagger Codegen CLI.
4.1. Maven Plugin
swagger-codegen Maven plugin, который можно легко настроить вpom.xml, позволяет сгенерировать клиента с теми же параметрами, что и интерфейс командной строки Swagger Codegen.
Это базовый фрагмент кода, который мы можем включить вpom.xml нашего проекта для автоматического создания клиента:
io.swagger
swagger-codegen-maven-plugin
2.2.3
generate
swagger.yaml
java
resttemplate
4.2. API онлайн-генератора
Уже опубликованный API, который помогает нам сгенерировать клиента, отправив запрос POST на URLhttp://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. Вы можете передать те же параметры, которые использовались в Swaager Codegen CLI для настройки клиента вывода.
https://generator.swagger.io содержит документацию Swagger для API, где мы можем проверить его документацию и попробовать.
5. Заключение
Swagger Codegen позволяет вам быстро создавать REST-клиенты для вашего API со многими языками и с библиотекой по вашему выбору. Мы можем сгенерировать клиентскую библиотеку, используя инструмент CLI, плагин Maven или Online API.
Реализацию этого примера можно найти в этомGitHub project. Это проект на основе Maven, который содержит два модуля Maven, сгенерированный клиент API и приложение Spring Boot.