Generieren Sie einen Spring Boot REST Client mit Swagger
1. Einführung
In diesem Artikel verwenden wir das ProjektSwagger CodeGen, um einen REST-Client aus einerOpenAPI/Swagger spec-Datei zu generieren.
Außerdem erstellen wir ein Spring Boot-Projekt, in dem generierte Klassen verwendet werden.
Wir werden das API-Beispiel vonSwagger Petstorefür alles verwenden.
2. REST-Client generieren
Swagger bietet ein Utility-Jar, mit dem wir REST-Clients für verschiedene Programmiersprachen und mehrere Frameworks generieren können.
2.1. Laden Sie die Jar-Datei herunter
Diecode-gen_cli.jar können vonhere heruntergeladen werden.
Die neueste Version finden Sie im Repository vonswagger-codegen-cli.
2.2. Client generieren
Generieren wir unseren Client, indem wir den Befehljava -jar swagger-code-gen-cli.jar generate: ausführen
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
Die angegebenen Argumente bestehen aus:
-
URL oder Pfad einer Quell-Swagger-Datei - bereitgestellt mit dem Argument-i
-
Namen von Paketen für generierte Klassen - bereitgestellt mit–api-package,–model-package,–invoker-package
-
Generierte Maven-Projekteigenschaften–group-id,–artifact-id,–artifact-version
-
Die Programmiersprache des generierten Clients - bereitgestellt mit-l
-
Das Implementierungsframework - bereitgestellt mit–library
-
Das Ausgabeverzeichnis - bereitgestellt mit-o
Geben Sie den folgenden Befehl ein, um alle Java-bezogenen Optionen aufzulisten:
java -jar swagger-codegen-cli.jar config-help -l java
Swagger Codegen unterstützt die folgenden Java-Bibliotheken (Paare von HTTP-Clients und JSON-Verarbeitungsbibliotheken):
-
jersey1 - Jersey1 + Jackson
-
jersey2 - Jersey2 + Jackson
-
feign - OpenFeign + Jackson
-
okhttp-gson - OkHttp + Gson
-
retrofit (veraltet) - Nachrüstung1 / OkHttp + Gson
-
retrofit2 - Nachrüstung2 / OkHttp + Gson
-
rest-template - Spring RestTemplate + Jackson
-
rest-easy - Resteasy + Jackson
In diesem Artikel haben wirrest-template ausgewählt, da es Teil des Spring-Ökosystems ist.
3. Spring Boot-Projekt generieren
Erstellen wir jetzt ein neues Spring Boot-Projekt.
3.1. Maven-Abhängigkeit
Wir werden zuerst die Abhängigkeit der generierten API-Client-Bibliothek zur Datei unseres Projektspom.xmlhinzufügen:
com.example
spring-swagger-codegen-api-client
0.0.1-SNAPSHOT
3.2. Stellen Sie API-Klassen als Spring Beans bereit
Um auf die generierten Klassen zugreifen zu können, müssen sie als Beans konfiguriert werden:
@Configuration
public class PetStoreIntegrationConfig {
@Bean
public PetApi petApi() {
return new PetApi(apiClient());
}
@Bean
public ApiClient apiClient() {
return new ApiClient();
}
}
3.3. API-Client-Konfiguration
Die KlasseApiClientwird zum Konfigurieren der Authentifizierung, des Basispfads der API und der allgemeinen Header verwendet und ist für die Ausführung aller API-Anforderungen verantwortlich.
Wenn Sie beispielsweise mit OAuth arbeiten:
@Bean
public ApiClient apiClient() {
ApiClient apiClient = new ApiClient();
OAuth petStoreAuth = (OAuth) apiClient.getAuthentication("petstore_auth");
petStoreAuth.setAccessToken("special-key");
return apiClient;
}
3.4. Spring Hauptanwendung
Wir müssen die neu erstellte Konfiguration importieren:
@SpringBootApplication
@Import(PetStoreIntegrationConfig.class)
public class PetStoreApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(PetStoreApplication.class, args);
}
}
3.5. API-Nutzung
Da wir unsere API-Klassen als Beans konfiguriert haben, können wir sie frei in unsere Spring-Managed-Klassen einfügen:
@Autowired
private PetApi petApi;
public List findAvailablePets() {
return petApi.findPetsByStatus(Arrays.asList("available"));
}
4. Alternativlösungen
Es gibt andere Möglichkeiten, einen REST-Client zu generieren, als die Ausführung von Swagger Codegen CLI.
4.1. Maven Plugin
Einswagger-codegen Maven plugin, das einfach in Ihrempom.xml konfiguriert werden kann, ermöglicht das Generieren des Clients mit denselben Optionen wie die Swagger Codegen CLI.
Dies ist ein grundlegendes Code-Snippet, das wir inpom.xmlunseres Projekts aufnehmen können, um den Client automatisch zu generieren:
io.swagger
swagger-codegen-maven-plugin
2.2.3
generate
swagger.yaml
java
resttemplate
4.2. Online Generator API
Eine bereits veröffentlichte API, die uns beim Generieren des Clients hilft, indem eine POST-Anforderung an die URLhttp://generator.swagger.io/api/gen/clients/javagesendet wird, die die Spezifikations-URL zusammen mit anderen Optionen im Anforderungshauptteil übergibt.
Lassen Sie uns ein Beispiel mit einem einfachen Curl-Befehl erstellen:
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
Die Antwort wäre ein JSON-Format, das einen herunterladbaren Link enthält, der den generierten Clientcode im ZIP-Format enthält. Sie können dieselben Optionen wie in der Swagger Codegen-CLI verwenden, um den Ausgabe-Client anzupassen.
https://generator.swagger.io enthält eine Swagger-Dokumentation für die API, in der wir die Dokumentation überprüfen und ausprobieren können.
5. Fazit
Mit Swagger Codegen können Sie schnell REST-Clients für Ihre API in vielen Sprachen und mit der Bibliothek Ihrer Wahl generieren. Wir können die Client-Bibliothek mit dem CLI-Tool, dem Maven-Plugin oder der Online-API generieren.
Die Implementierung dieses Beispiels finden Sie inGitHub project. Dies ist ein Maven-basiertes Projekt, das zwei Maven-Module, den generierten API-Client und die Spring Boot-Anwendung enthält.