SwaggerでSpring Boot RESTクライアントを生成する

1前書き

この記事では、https://github.com/swagger-api/swagger-codegen[Swagger CodeGen]プロジェクトを使ってhttps://swagger.io/specification/[OpenAPI/SwaggerからRESTクライアントを生成しますspec]ファイル

また、Spring Bootプロジェクトを作成し、そこで生成されたクラスを使用します。

すべてにhttp://petstore.swagger.io/[Swagger Petstore]APIの例を使用します。

2 RESTクライアントを生成

Swaggerは、さまざまなプログラミング言語や複数のフレームワーク用のRESTクライアントを生成するためのユーティリティjarを提供しています。

2.1. Jar Fileをダウンロードする

code-gen cli.jar__はhttps://search.maven.org/classic/remotecontent?filepath=io/swagger/swagger-codegen-cli/2.2.3/swagger-codegen-cli-2.2.3からダウンロードできます。瓶[ここ]。

最新バージョンについては、https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22io.swagger%22%20AND%20a%3A%22swagger-codegen-cli%22を確認してください。[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.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

提供された引数は以下から構成されます。

  • ソースswaggerファイルのURLまたはパス - -i 引数を使用して提供

  • 生成されたクラスのためのパッケージの名前 - を使って提供される

– api-package – model-package – invoker-package ** 生成されたMavenプロジェクトプロパティ – group-id – artifact-id

- 成果物バージョン ** 生成されたクライアントのプログラミング言語 - -l を使って提供されます。

  • 実装フレームワーク - - library を使用して提供

  • 出力ディレクトリ - -o を使用して提供

すべてのJava関連オプションをリストするには、次のコマンドを入力してください。

java -jar swagger-codegen-cli.jar config-help -l java

Swagger Codegenは、次のJavaライブラリ(HTTPクライアントとJSON処理ライブラリのペア)をサポートしています。

  • ジャージ1 - ジャージー1ジャクソン

  • ジャージ2 - ジャージー2 +ジャクソン

  • feign - OpenFeign + Jackson

  • okhttp-gson - OkHttp Gson

  • レトロフィット (廃止) - レトロフィット1/OkHttp + Gson

  • __レトロフィット2 - レトロフィット2/OkHttp + Gson

  • rest-template - 春の休息テンプレート+ Jackson

  • rest-easy - Resteasy Jackson

今回の記事では、Springエコシステムの一部として rest-template を選択しました。

3 Spring Bootプロジェクトを生成

それでは、新しいSpring Bootプロジェクトを作成しましょう。

3.1. Mavenの依存関係

まず、Generated API Clientライブラリの依存関係をプロジェクトの pom.xml ファイルに追加します。

<dependency>
    <groupId>com.baeldung</groupId>
    <artifactId>spring-swagger-codegen-api-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

3.2. Spring BeansとしてAPIクラスを公開する

生成されたクラスにアクセスするには、それらをBeanとして設定する必要があります。

@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. 春のメインアプリケーション

新しく作成した設定をインポートする必要があります。

@SpringBootApplication
@Import(PetStoreIntegrationConfig.class)
public class PetStoreApplication {
    public static void main(String[]args) throws Exception {
        SpringApplication.run(PetStoreApplication.class, args);
    }
}

3.5. APIの使い方

APIクラスをBeanとして構成したので、それらをSpring管理クラスに自由に注入できます。

@Autowired
private PetApi petApi;

public List<Pet> findAvailablePets() {
    return petApi.findPetsByStatus(Arrays.asList("available"));
}

4.代替ソリューション

Swagger Codegen CLIを実行する以外に、RESTクライアントを生成する方法は他にもあります。

4.1. Mavenプラグイン

あなたの pomで簡単に設定できるhttps://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen-maven-plugin/README.md[swagger-codegen Mavenプラグイン]。 xml はSwagger Codegen CLIと同じオプションでクライアントを生成できます。

これは、クライアントを自動的に生成するためにプロジェクトの 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>

4.2. オンラインジェネレータAPI

URL http://generator.swagger.io/api/gen/clients/java にPOSTリクエストを送信してクライアントを生成するのに役立つ、すでに公開されているAPI。リクエスト本体の他のオプションと一緒にspec 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

応答は、zip形式で生成されたクライアントコードを含むダウンロード可能なリンクを含むJSON形式になります。 Swaager Codegen CLIで使用されているのと同じオプションを渡して、出力クライアントをカスタマイズできます。

5結論

Swagger Codegenを使用すると、さまざまな言語および選択したライブラリを使用して、APIを迅速に作成してRESTクライアントを作成できます。 CLIツール、Mavenプラグイン、またはOnline APIを使用してクライアントライブラリを生成できます。

この例の実装はこのhttps://github.com/eugenp/tutorials/tree/master/spring-swagger-codegen[GitHubプロジェクト]にあります。これは、2つのMavenモジュール、生成されたAPIクライアント、およびSpring Bootアプリケーションを含むMavenベースのプロジェクトです。

前の投稿:HttpClientのタイムアウト
次の投稿:Java Weekly、Issue 232