4.5. OpenAPI Integration


概要

OpenAPI サービスを使用して、CamelContext ファイルの REST 定義ルートおよびエンドポイントの API ドキュメントを作成できます。これには、純粋に Java ベースの camel-openapi-java モジュールと Camel REST DSL を使用します。camel-openapi-java モジュールは、CamelContext と統合し、各 REST エンドポイントから情報をプルして JSON または YAML 形式の API ドキュメントを生成するサーブレットを作成します。

Maven を使用する場合は、pom.xml ファイルを編集して camel-openapi-java コンポーネントに依存関係を追加します。

<dependency>
   <groupId>org.apache.camel</groupId>
   <artifactId>camel-openapi-java</artifactId>
   <version>x.x.x</version>
   <!-- Specify the version of your camel-core module. -->
</dependency>

OpenAPI を有効にする CamelContext の設定

Camel REST DSL で OpenAPI の使用を有効にするには、api ContextPath() を呼び出して OpenAPI が生成する API ドキュメントのコンテキストパスを設定します。以下に例を示します。

public class UserRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        // Configure the Camel REST DSL to use the netty4-http component:
        restConfiguration().component("netty4-http").bindingMode(RestBindingMode.json)
            // Generate pretty print output:
            .dataFormatProperty("prettyPrint", "true")
            // Set the context path and port number that netty will use:
            .contextPath("/").port(8080)
            // Add the context path for the OpenAPI-generated API documentation:
            .apiContextPath("/api-doc")
                .apiProperty("api.title", "User API").apiProperty("api.version", "1.2.3")
                // Enable CORS:
                .apiProperty("cors", "true");

        // This user REST service handles only JSON files:
        rest("/user").description("User rest service")
            .consumes("application/json").produces("application/json")
            .get("/{id}").description("Find user by id").outType(User.class)
                .param().name("id").type(path).description("The id of the user to get").dataType("int").endParam()
                .to("bean:userService?method=getUser(${header.id})")
            .put().description("Updates or create a user").type(User.class)
                .param().name("body").type(body).description("The user to update or create").endParam()
                .to("bean:userService?method=updateUser")
            .get("/findAll").description("Find all users").outTypeList(User.class)
                .to("bean:userService?method=listUsers");
    }
}

OpenAPI モジュール設定オプション

以下の表に記載されているオプションを使用すると、OpenAPI モジュールを設定できます。以下のようにオプションを設定します。

  • camel-openapi-java モジュールをサーブレットとして使用する場合は、web.xml ファイルを更新し、設定する各設定オプションに init-param 要素を指定してオプションを設定します。
  • Camel REST コンポーネントから camel-openapi-java モジュールを使用している場合は、enable CORS()、host()、または contextPath( ) などの適切な RestConfigurationDefinition メソッドを呼び出してオプションを設定します。api.xxx オプションを RestConfigurationDefinition.apiProperty() メソッドで設定します。
オプション説明

api.contact.email

文字列

API 関連の連絡先に使用するメールアドレス。

api.contact.name

文字列

API 関連の連絡先に使用する個人または組織の名前。

api.contact.url

文字列

API 関連の問い合わせ先の Web サイトへの URL。

apiContextIdListing

ブール値

アプリケーションに複数の CamelContext オブジェクトを使用している場合、デフォルトの動作では、現在の CamelContext のみに REST エンドポイントが一覧表示されます。REST サービスを実行している JVM で、実行されている個々の CamelContext の REST エンドポイントのリストが必要な場合は、このオプションを true に設定します。apiContextIdListing が true の場合、OpenAPI はルートパス(例: /api-docs )で CamelContext ID を JSON 形式の名前の一覧として出力します。OpenAPI が生成するドキュメントにアクセスするには、REST コンテキストパスを CamelContext ID に追加します(例: api-docs/myCamel )。apiContextIdPattern オプションを使用して、この出力リストの名前をフィルタリングできます。

apiContextIdPattern

文字列

コンテキストリストに表示される CamelContext ID のフィルターパターン。正規表現を指定し、ワイルドカードとして * を使用することができます。これは、Camel Intercept 機能で使用されるのと同じパターンマッチング機能です。

api.license.name

文字列

API に適用されるライセンス名。

api.license.url

文字列

API に適用されるライセンスの URL。

api.path

文字列

ドキュメントを生成する REST API が使用可能なパスを設定します (例: /api-docs)。相対パスで指定します。たとえば、http または https は指定しないでください。camel-openapi-java モジュールは、プロトコル://host:port/context-path/api-path の形式のランタイム時に絶対パスを計算します。

api.termsOfService

文字列

API の利用規約への URL。

api.title

文字列

アプリケーションの名前。

api.version

文字列

API のバージョン。デフォルトは 0.0.0 です。

base.path

文字列

必須。REST サービスが利用できるパスを設定します。相対パスで指定します。たとえば、http または https は指定しないでください。camel-openapi-java modul は、protocol:// host:port/context-path/base.path の形式のランタイム時に絶対パスを計算します。

cors

ブール値

CORS (オリジン間リソース共有) を有効にするかどうか。これにより、CORS は REST API ドキュメントを閲覧する場合のみ有効になり、REST サービスにアクセスする場合には有効になりません。デフォルトは false です。この表の後で説明するように、代わりに CorsFilter オプションを使用することをお勧めします。

host

文字列

OpenAPI サービスが実行されているホストの名前を設定します。デフォルトでは、localhost に基づいてホスト名が計算されます。

schemes

文字列

使用するプロトコルスキーム。複数の値はカンマで区切ります (例: "http,https".)。デフォルトは http です。

openapi.version

文字列

OpenAPI 仕様バージョン。デフォルトは 3.0 です。

JSON または YAML 形式の出力

Camel 3.1 より、camel-openapi-java モジュールは JSON および YAML 形式の出力の両方をサポートします。必要な出力を指定するには、/openapi.json または /openapi.yaml を要求 URL に追加します。リクエスト URL が形式を指定しない場合、camel-openapi-java モジュールは HTTP Accept ヘッダーを検査して JSON または YAML を許可するかどうかを検出します。両方が受け入れられるか、両方が受け入れられないと検知された場合は、デフォルトの JSON 形式が出力されます。

Apache Camel 3.x ディストリビューションでは、camel-example-openapi-cdi および camel-example- openapi-java モジュールの使用を実証します。

Apache Camel 2.x ディストリビューションでは、camel-example-swagger-cdi および camel-example- swagger-java モジュールの使用を実証します。

OpenAPI によって生成されるドキュメントの改良

Camel 3.1 以降では、名前、説明、データタイプ、パラメータータイプなどのパラメーターの詳細を定義することで、OpenAPI によって生成されたドキュメントを強化できます。XML DSL を使用している場合は、param 要素を指定してこれらの情報を追加します。以下の XML DSL の例は、ID パスパラメーターに関する情報を補足する方法を示しています。

<!-- This is a REST GET request to view information for the user with the given ID: -->
<get uri="/{id}" outType="org.apache.camel.example.rest.User">
     <description>Find user by ID.</description>
     <param name="id" type="path" description="The ID of the user to get information about." dataType="int"/>
     <to uri="bean:userService?method=getUser(${header.id})"/>
</get>

以下は Java DSL の例です。

.get("/{id}").description("Find user by ID.").outType(User.class)
   .param().name("id").type(path).description("The ID of the user to get information about.").dataType("int").endParam()
   .to("bean:userService?method=getUser(${header.id})")

名前が body のパラメーターを定義する場合は、そのパラメーターの型として body も指定する必要があります。以下に例を示します。

<!-- This is a REST PUT request to create/update information about a user. -->
<put type="org.apache.camel.example.rest.User">
     <description>Updates or creates a user.</description>
     <param name="body" type="body" description="The user to update or create."/>
     <to uri="bean:userService?method=updateUser"/>
</put>

以下は Java DSL の例です。

.put().description("Updates or create a user").type(User.class)
     .param().name("body").type(body).description("The user to update or create.").endParam()
     .to("bean:userService?method=updateUser")

Apache Camel ディストリビューションの examples/camel-example-servlet-rest-tomcat も参照してください。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.