REST API の例

次の例では、Anypoint Studio または Mule Runtime Engine のスタンドアロン XML を使用して、公開されている REST API からデータを取得する API を記述する方法を説明しています。この API の例では、lorem ipsum テキストを生成し、次の場所にある Bacon Ipsum REST API を照会します。

http://baconipsum.com/

Anypoint Studio で REST API をコンシュームする

Studio で REST API をコンシュームするには、HTTP Connector を設定し、File Write 操作を追加して、アプリケーションを実行します。

  1. 最初に、Studio で HTTP リスナーと HTTP Request Connector を追加して設定します。HTTPS を使用したりアカウントをセットアップしたりする必要はありません。

HTTP Listener Connector と HTTP Request Connector を使用した ConsumeRestAPI フロー
Figure 1. HTTP Listener Connector と HTTP Request Connector を使用した ConsumeRestAPI フロー。

この時点で、API をコールして Web ブラウザーで ​bacon ipsum​ テキストを受信できます。

  1. 次に、File Write コンポーネントを追加して ​bacon ipsum​ テキストの要求の出力をファイルシステムのファイルに保存します。

HTTP Listener Connector、HTTP Request Connector、File Write コンポーネントを使用したフロー
Figure 2. HTTP リスナー、HTTP Request Connector、File Write コンポーネントを使用したフロー。

最初の要素である HTTP Listener は、ローカルホストポート 8081 (デフォルト) 上で受信 GET 要求をリスンします。ブラウザーからリスナーをコールすると、フローがトリガーされます。

  1. 最後に、次の構文を使用して要求を送信します。

http://localhost:8081?<query>

<query>​ は REST API によって受け入れられるパラメーターで構成されます。HTTP Listener が HTTP Request を受信すると、アプリケーションによって ​<query>​ が一連のクエリパラメーターとして記録されます。HTTP Listener によってこれらのパラメーターがフローの次の要素である HTTP Request 操作に渡されます。この操作は、​http://baconipsum.com/api​ でリモート REST API を照会するように設定されています。HTTP Request Connector では DataWeave 式を使用してメッセージのプロパティからクエリパラメーターを抽出し、クエリパラメーターを含めてリモート API の完全な URL を作成します。

たとえば、次のローカルブラウザー要求を入力するとします。

http://localhost:8081?type=meat-and-filler

結果として、アプリケーションで次のクエリが発行されます。

http://baconipsum.com/api/?type=meat-and-filler

HTTP Connector を設定する

HTTP リスナーと HTTP Request Connector を設定して、API をコールする方法と返す内容を指定します。

HTTP リスナー

HTTP リスナーを設定するには、次の手順に従います。

  1. HTTP Listener コンポーネントを選択します。

  2. [Connector Configuration (コネクタ設定)]​ で ​mruntime add plus​ をクリックし、​[Host (ホスト)]​ を ​localhost​、​[Port (ポート)]​ を ​8081​ に設定します。

  3. [OK]​ をクリックします。

ホストとポートを使用した HTTP リスナー設定
Figure 3. ホストとポートを使用した HTTP リスナー設定。
  1. HTTP リスナーのプロパティエディターで、​[Path (パス)]​ を ​/​ に設定します。

パスを使用した HTTP リスナーのプロパティエディター
Figure 4. パスを使用した HTTP リスナーのプロパティエディター。

HTTP 要求

  1. [Connector Configuration (コネクタ設定)]​ で ​mruntime add plus​ をクリックし、​[Host (ホスト)]​ を ​baconipsum.com​、​[Port (ポート)]​ を ​80​、​[Base Path (ベースパス)]​ を ​api​ に設定します。この設定により、要求は ​http://baconipsum.com/api​ に送信されます。

  2. [OK]​ をクリックします。

HTTP Request Connector の設定
Figure 5. HTTP Request Connector の設定。
  1. プロパティエディターで、​[Path (パス)]​ を ​/​ に、​[Method (メソッド)]​ を ​GET​ に設定します。

  2. [Query Parameters (クエリパラメーター)] タブで、2 つのクエリパラメーターを追加します。
    各 ​value​ 項目に、最初に HTTP リスナーに到達した要求のクエリパラメーターから指定された値を取得する Mule 式を入力します。

パラメーター

Type (型)

query-param

Name (名前)

type

Value (値)

#[message.attributes.queryParams['type']]

パラメーター

Type (型)

query-param

Name (名前)

sentences

Value (値)

`#[message.attributes.queryParams['sentences']]

名前と値が含まれるクエリパラメーター
Figure 6. 名前と値が含まれるクエリパラメーター。

Bacon Ipsum API ページには使用できるパラメーターのリストが記載されていますが、このアプリケーションでは ​type​ と ​sentences​ パラメーターのみを使用します。省略可能な ​sentences​ パラメーターによって、JSON 応答で返す文の数が決定されます。

File Write 操作

アプリケーションの出力をファイルに保存するように File Write コンポーネントのプロパティをセットアップします。

  1. File Write コンポーネントをキャンバスにドラッグします。

  2. プロパティエディターで、出力を保存するためのディレクトリとファイル名を設定します: /tmp/output​。

    mruntime rest api example 2
  3. プロパティエディターで、​[Path (パス)]​ のファイルシステムの実際のパスを指定します。

File Write プロパティエディターと [Path (パス)]
Figure 7. File Write プロパティエディターと [Path (パス)]。

アプリケーションを実行して REST API をコンシュームする

以下の手順でアプリケーションを実行します。

  1. Studio のプロジェクト内で ​2%​ をクリックして Mule アプリケーションとして例を実行します。テスト

  2. Web ブラウザーウィンドウでローカルホストポート 8081 で HTTP Listener を照会して、アプリケーションのフローをトリガーします。

http://localhost:8081?type=meat-and-filler

Bacon Ipsum API ページには使用できるパラメーターのリストが記載されていますが、HTTP Request Connector を設定するときは、​type​ と ​sentences​ パラメーターのみを使用するようにコネクタをセットアップします。

  • 最初のパラメーター=値のペアの前に ​?​ 演算子を追加する必要があります。

  • 追加のパラメーター=値のペアを挿入するには、​&​ 演算子を使用します。

次のクエリは、ローカルホストポート 8081 で HTTP リスナーに送信できる例です。

http://localhost:8081?type=meat-and-filler
http://localhost:8081?sentences=2
http://localhost:8081?type=all-meat&sentences=3

type=meat-and-filler​ の例では、次の出力が返されます。

["Doner ullamco ea non, porchetta incididunt brisket ball tip in chuck ex bresaola beef tongue.  Et aute ham hock kielbasa chuck fatback short ribs.  Kevin in reprehenderit est esse, ham bacon ut ball tip.  Laborum ut nulla ex irure t-bone flank, biltong cupidatat venison proident aliquip pork belly ham hock.  In consequat proident, cillum labore pariatur nisi.  Reprehenderit boudin beef ribs, frankfurter cillum enim pork loin consectetur kielbasa laboris.  Hamburger prosciutto nisi, jerky biltong ex pork chop venison.","Fatback tongue anim, irure ut ut cupidatat occaecat eiusmod ham hock laborum commodo.  Anim pig shank kielbasa, drumstick corned beef esse nostrud ham salami id laborum ribeye aute.  Duis pancetta sunt magna occaecat dolor leberkas, short loin meatloaf flank enim pastrami.  Prosciutto proident landjaeger deserunt tenderloin short loin.  Adipisicing aute in bresaola meatball, ut frankfurter pastrami shoulder porchetta turducken strip steak doner.  In filet mignon bresaola, sed deserunt pariatur eu mollit commodo shankle laborum.  Andouille aliqua jowl pork chop jerky sed consequat turkey voluptate bacon pastrami.","Ground round elit boudin reprehenderit.  Brisket shankle esse, leberkas veniam andouille rump proident drumstick.  Consequat sausage do ut prosciutto nostrud andouille tongue ullamco bacon est exercitation.  Do fugiat biltong est tempor short ribs reprehenderit adipisicing shoulder.  Tail venison shank incididunt, hamburger adipisicing voluptate corned beef fugiat sirloin fatback in tri-tip nisi ut.  Tail non excepteur, fugiat veniam corned beef dolore ex pig pork belly sint mollit chuck pork.","Pig hamburger dolore proident brisket landjaeger in boudin kielbasa ut elit.  Velit incididunt boudin qui.  Fatback anim adipisicing, pig jowl voluptate sirloin drumstick chicken esse.  Strip steak consequat tenderloin pastrami, ullamco brisket hamburger bacon beef adipisicing.  Tri-tip ham hock eu non et, flank dolore kevin.  Et duis frankfurter, ut ullamco do non quis boudin andouille aliqua venison ham.  Ut aliqua shoulder, aliquip pariatur bacon spare ribs irure.","Aliqua jerky frankfurter, swine ham in ground round sed qui laborum cow.  Sint turducken shank ut ea id.  Kevin dolore pig excepteur, anim ut magna.  Enim consequat short ribs corned beef ham hock nostrud fugiat chuck.  Tail spare ribs dolore boudin, andouille incididunt laboris occaecat strip steak.  Cow frankfurter capicola, landjaeger cupidatat porchetta ad ground round voluptate."]

スタンドアロン XML で REST API をコンシュームする

スタンドアロン XML で REST API をコンシュームするには、HTTP リスナーと HTTP Request Connector を設定すると共に File Write コンポーネントを追加する必要があります。

HTTP Connector を設定する

HTTP リスナーと HTTP Request Connector を設定して、API をコールする方法と返す内容を指定します。

HTTP リスナー

HTTP リスナーを設定するには、​[Connector Configuration (コネクタ設定)]​ と呼ばれる抽象的な要素を参照してください。ここには、概要レベルの必須設定プロパティがいくつか含まれます。

<http:listener config-ref="HTTP_Listener_config" path="/"/>

コネクタの ​config-ref​ 属性は、このコネクタ設定要素を参照します。今度は、参照される名前に一致する要素をフローの外側で作成する必要があります。

<http:listener-config name="HTTP_Listener_config">
	<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>

HTTP 要求

HTTP 要求を設定するには、​[Connector Configuration (コネクタ設定)]​ と呼ばれる抽象的な要素を参照する必要があります。ここには、概要レベルの必須設定プロパティがいくつか含まれます。

<http:request method="GET" config-ref="HTTP_Request_configuration" path="/">
	<http:query-params >
		<![CDATA[#[output application/java
			---
			{
				"type" : message.attributes.queryParams['type'],
				"sentences" : message.attributes.queryParams['sentences']
			}
		]]]>
	</http:query-params>
</http:request>

コネクタの ​config-ref​ 属性は、このコネクタ設定要素を参照します。今度は、参照される名前に一致する要素をフローの外側で作成する必要があります。

<http:request-config name="HTTP_Request_configuration" basePath="/api">
		<http:request-connection host="baconipsum.com" port="80"/>
	</http:request-config>

File Write 操作

最後に、XML で File Write 操作を追加します。

<file:write path="/Users/max/output.txt"/>

XML

完成した XML を確認します。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:file="http://www.mulesoft.org/schema/mule/file"
	xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
	<http:request-config name="HTTP_Request_configuration" basePath="/api">
		<http:request-connection host="baconipsum.com" port="80"/>
	</http:request-config>
	<http:listener-config name="HTTP_Listener_config">
		<http:listener-connection host="0.0.0.0" port="8081" />
	</http:listener-config>

	<flow name="consumeRestAPI">
		<http:listener config-ref="HTTP_Listener_config" path="/"/>
		<http:request method="GET" config-ref="HTTP_Request_configuration" path="/">
			<http:query-params ><![CDATA[#[output application/java
				---
				{
					"type" : message.attributes.queryParams['type'],
					"sentences" : message.attributes.queryParams['sentences']
				}]]]>
			</http:query-params>
		</http:request>
		<file:write path="/Users/max/output.txt"/>
	</flow>
</mule>