Flex Gateway新着情報
Governance新着情報
Monitoring API Managerビジネスロジックを含む Mule プロジェクトとアプリケーションに対してバックエンドファーストの設計アプローチを選択した場合、それらを APIkit プロジェクトに変換し、REST サービスとして公開できます。次のいずれかのアプローチを使用します。
最適なアプローチを決定するときは、アプリケーションのサイズと複雑さを考慮してください。
これらのアプローチの例は、データベースからユーザーを取得する次の Mule アプリケーションに基づいています。
<mule>
<http:listener-config name="HTTP_Listener_config">
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<db:config name="Database_Config">
<db:my-sql-connection host="localhost" port="3306" user="admin" password="admin" database="usersdb" />
</db:config>
<flow name="GET-Users-FLOW">
<http:listener config-ref="HTTP_Listener_config" path="/users"/>
<db:select config-ref="Database_Config">
<db:sql ><![CDATA[SELECT * FROM USERS]]></db:sql>
</db:select>
</flow>
<flow name="GET-User-By-Id-FLOW">
<http:listener config-ref="HTTP_Listener_config" path="/userById" />
<db:select config-ref="Database_Config" >
<db:sql ><![CDATA[SELECT * FROM USERS WHERE :userIdParameter == userID]]></db:sql>
<db:input-parameters ><![CDATA[#[{userIdParameter: attributes.queryParams.id}]]]></db:input-parameters>
</db:select>
</flow>
</mule>
サービスの API 仕様を定義するには、「REST API の構築、実装、テスト」の「API 仕様の設計」を参照してください。この例を説明するために、そのワークフローで使用される API 仕様と JSON サンプルを /src/main/resources/api
フォルダーに作成またはコピーします。
既存のフローで機能するルーターを手動で設定するには、次の手順に従います。
APIkit プロジェクト内で、エントリポイントとして機能するメインフローを作成します。
次のコンポーネントを Mule パレットからキャンバスにドラッグします。
フローソースとしての [HTTP Listener (HTTP リスナー)] ソース
フロープロセス内の [APIkit Router (APIkit ルーター)] 操作
[HTTP Listener (HTTP リスナー)] のプロパティエディターの [Connector Configuration (コネクタ設定)] で、既存の [HTTP_Listener_Config] を選択します。
[Path (パス)] に /api/*
を入力して、APIkit ルーターのリスナーパスを指定します。
APIkit ルーターのプロパティエディターの [Router Configuration (ルーター設定)] で、[Add (追加)] をクリックして新しい設定を作成します。
[Global Element Properties (グローバル要素のプロパティ)] ウィザードが表示されます。
[API Definition (API 定義)] で、api/api.raml
パスを選択します。
設定を受け入れます。
GET-Users-FLOW
から [HTTP Listener (HTTP リスナー)] を削除します。
GET-User-By-Id-FLOW
から [HTTP Listener (HTTP リスナー)] を削除します。
<mule>
<apikit:config outboundHeadersMapName="outboundHeadersMapName" httpStatusVarName="httpStatus" name="Router" api="api/api.raml" />
<http:listener-config name="HTTP_Listener_config">
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<db:config name="Database_Config">
<db:my-sql-connection host="localhost" port="3306" user="admin" password="admin" database="usersdb" />
</db:config>
<flow name="apiFlow">
<http:listener config-ref="HTTP_Listener_config" path="/api/*"/>
<apikit:router config-ref="Router"/>
</flow>
<flow name="GET-Users-FLOW">
<db:select config-ref="Database_Config">
<db:sql ><![CDATA[SELECT * FROM USERS]]></db:sql>
</db:select>
</flow>
<flow name="GET-User-By-Id-FLOW">
<db:select config-ref="Database_Config" >
<db:sql ><![CDATA[SELECT * FROM USERS WHERE :userIdParameter == userID]]></db:sql>
<db:input-parameters ><![CDATA[#[{userIdParameter: attributes.queryParams.id}]]]></db:input-parameters>
</db:select>
</flow>
</mule>
デフォルトでは、各 APIkit フローはルーティング目的で、次のパターンを特徴とする命名規則に従います。
action:\resource[:content-type][:config-name]
名前 | 説明 |
---|---|
|
HTTP メソッド |
|
HTTP リソース |
|
ペイロードのコンテンツタイプ (省略可能) |
|
APIkit ルーター設定名 (省略可能) |
元のフロー名を保持し、各 API リソースとアクションをそれらにマップするには、次の手順に従ってこの動作を上書きします。
[APIkit Router (APIkit ルーター)] を選択して、プロパティエディターを開きます。
[Router configuration (ルーター設定)] で [Edit (編集)] をクリックします。
[Global Element Properties (グローバル要素のプロパティ)] ウィザードが表示されます。
[Mappings (マッピング)] で、[Add (追加)]
をクリックして新しいマッピング設定を作成します。
[New Mapping (新規マッピング)] ダイアログが表示されます。
ドロップダウンを使用して、リソースをアクションにマップします。
[Resource (リソース)] で [/users]
を選択します。
[Action (アクション)] で [Get] を選択します。
[Flow (フロー)] で [GET-Users-FLOW]
を選択します。
[OK] をクリックします。
[Mappings (マッピング)] で [Add (追加)] をクリックします。
[New Mapping (新規マッピング)] ダイアログが表示されます。
ドロップダウンを使用して、リソースをアクションにマップします。
[Resource (リソース)] で [/users/userbyid]
を選択します。
[Action (アクション)] で [Get]
を選択します。
[Flow (フロー)] で、get users アクションを含むフロー [GET-User-By-Id-FLOW]
を選択します。
[OK] をクリックします。
<mule>
<apikit:config outboundHeadersMapName="outboundHeadersMapName" httpStatusVarName="httpStatus" name="Router" api="api/api.raml" >
<apikit:flow-mappings >
<apikit:flow-mapping resource="/users" action="get" flow-ref="GET-Users-FLOW" />
<apikit:flow-mapping resource="/users/userbyid" action="get" flow-ref="GET-User-By-Id-FLOW" />
</apikit:flow-mappings>
</apikit:config>
<http:listener-config name="HTTP_Listener_config">
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<db:config name="Database_Config">
<db:my-sql-connection host="localhost" port="3306" user="admin" password="admin" database="usersdb" />
</db:config>
<flow name="apiFlow">
<http:listener config-ref="HTTP_Listener_config" path="/api/*"/>
<apikit:router config-ref="Router"/>
</flow>
<flow name="GET-Users-FLOW">
<db:select config-ref="Database_Config">
<db:sql ><![CDATA[SELECT * FROM USERS]]></db:sql>
</db:select>
</flow>
<flow name="GET-User-By-Id-FLOW">
<db:select config-ref="Database_Config" >
<db:sql ><![CDATA[SELECT * FROM USERS WHERE :userIdParameter == userID]]></db:sql>
<db:input-parameters ><![CDATA[#[{userIdParameter: attributes.queryParams.id}]]]></db:input-parameters>
</db:select>
</flow>
</mule>
[before-you-begin]のプロセスに従います。完了したら、API 仕様をスキャフォールディングするための代替ワークフローを含めます。
このアプローチでは、APIkit ルーター設定、エラーハンドラー、およびコンソールフローを標準で使用できます。各リソースをマップするフローも得ることができます。
API をスキャフォールディングして、メイン、コンソール、およびリソースフローを自動生成します。
Package Explorer で、/src/main/resources/api/api.raml
を右クリックします。
[Mule] を選択します。
[Generate Flows from Local REST API (ローカル REST API からフローを生成)] をクリックします。
API と同じ名前の新しい XML ファイルが作成されます。このファイルにはスキャフォールディングフローが含まれます。
次のいずれかの操作を実行します。
[step-2-map-api-resources-and-actions-to-flows]で説明されているように、各リソースのスキャフォールディングフローを削除し、元のフローをマップする。
スキャフォールディングフローからすべての操作を削除し、削除された操作を含むフロー参照を追加する。このオプションを選択すると、すべてのフローが操作を含むフローを参照するため、間接参照が追加されますが、シナリオによってはこのような間接参照は不便な可能性があります。
<mule>
...
<flow name="get:\users\userbyid:api-config">
<flow-ref name="GET-User-By-Id-FLOW"/>
</flow>
<flow name="get:\users:api-config">
<flow-ref name="GET-Users-FLOW"/>
</flow>
</mule>
既存のフローのコンテンツをルーティング命名規則に準拠したスキャフォールディングフローに転送する。アプリケーションが大きい場合、これらの変更を実行するのは手間がかかる可能性があります。
<mule>
...
<flow name="get:\users:api-config">
<db:select config-ref="Database_Config">
<db:sql ><![CDATA[SELECT * FROM USERS]]></db:sql>
</db:select>
</flow>
<flow name="get:\users\userbyid:api-config">
<db:select config-ref="Database_Config" >
<db:sql ><![CDATA[SELECT * FROM USERS WHERE :userIdParameter == userID]]></db:sql>
<db:input-parameters ><![CDATA[#[{userIdParameter: attributes.queryParams.id}]]]></db:input-parameters>
</db:select>
</flow>
</mule>
新しいプロジェクトがセットアップされたので、API をテストする準備が整いました。