SOAP APIレシピウォークスルー
このウォークスルーでは、WorkatoでSOAPエンドポイントを手動で構築する方法を示します。 エンドポイントはraw XMLを受け入れ、レシピはリクエストをprivate serverでホストされているターゲットAPIに渡す前に、SOAPエンベロープを解析して検証します。 これにより、外部のビジネスパートナーや内部の関係者は、ターゲットAPIに直接接続することなくAPIのデータにアクセスできます。
このウォークスルーでは、ターゲットAPI自体ではなく、ターゲットAPIの前にあるWorkato側のエンドポイントを構築します。 ターゲットAPIが利用可能になる前にエンドポイントの大部分を構築してテストできますが、そのAPIに到達可能になって初めて、レシピはターゲットAPIからデータを返すことができます。
構築するもの
このウォークスルーでは、次のコンポーネントを構築します:
- XMLリクエストを受け入れ、リクエストされた操作を識別し、その操作が承認されているかどうかを確認して、承認済みリクエストをターゲットAPIに転送するSOAP APIレシピ。
- SOAP APIを説明するWSDLを返す別のAPIレシピ。
- 両方のレシピをエンドポイントとして公開するAPIレシピコレクション。
SOAP APIレシピでは、次の3つのレスポンスパスを使用します:
- ターゲットAPIリクエストが成功した場合は
success。 - リクエストされた操作が承認済みリストにない場合は
not_found。 - ターゲットAPIへのリクエストが失敗した場合は
error。
前提条件
SOAP APIレシピを作成する前に、次の点を確認してください:
- API platformへのアクセス。 API platformは、特定の料金プランのお客様が利用できます。 詳細については、料金プランと契約を参照してください。
- APIコレクションとエンドポイントおよびレシピの作成権限。
- エンドポイントで許可するSOAP操作を含むルックアップ テーブル。
- ターゲットAPI用のHTTPコネクション。 private serverでホストされているAPIに到達するには、オンプレミスグループを使用するようにコネクションを設定します。
- ターゲットAPIを呼び出すために必要なリクエストの詳細(URL、メソッド、ヘッダー、ペイロード形式など)。
- このウォークスルーでWSDLエンドポイントを公開する予定がある場合は、SOAP APIを説明するWSDL。 このウォークスルーでは、WSDLを返す方法を示します。WSDLを作成する方法ではありません。
SOAP APIレシピを作成する
SOAP APIレシピを作成するには、次の手順を実行します:
新しいレシピを作成し、名前を付けます。
レシピのフォルダを選択します。
開始点としてAPIエンドポイントを構築をクリックします。
ビルドを開始をクリックします。
Build an API endpoint開始ポイントでは、New API requestトリガーとRespond to API requestアクションを含むレシピが自動的に作成されます。
レシピのトリガーを定義する
New API requestトリガーは、エンドポイントのリクエスト構造とレスポンス構造を定義します。
リクエスト構造を定義する
リクエスト構造を定義するには、次の手順を実行します:
トリガーをクリックして、その設定タブを開きます。
Requestセクションがまだ開いていない場合は展開します。
Content typeフィールドでText/XMLを選択します。 これにより、トリガーはリクエストをJSONとして解析する代わりに、SOAPリクエストのraw XML本文を受け入れることができます。 コンテンツタイプオプションの完全なリストについては、サポートされているデータ型を参照してください。
呼び出し元がリクエストヘッダーを提供する必要がある場合は、Request headerセクションで定義します。
レスポンス構造を定義する
レスポンス構造は、SOAP APIレシピが返すことができる出力を定義します。 このレシピでは、3つのレスポンスを使用します: success、承認済みリストにない操作用のnot_found、ターゲットAPIリクエストが失敗した場合のerror。
レスポンス構造を定義するには、次の手順を実行します:
Responseセクションがまだ開いていない場合は展開します。
Content typeフィールドでText/XMLを選択します。
エンドポイントがレスポンスヘッダーを返す必要がある場合は、Response headersフィールドで定義します。
ResponsesフィールドからAdd responseを選択します。
Nameフィールドにsuccessと入力します。
HTTP status codeフィールドを使用して、レスポンスコードが標準かカスタムかを指定します。
- 標準レスポンスを選択した場合は、ピックリストからHTTPステータスコードを選択します。 たとえば、
successレスポンスの場合は200 - OKです。 - カスタムレスポンスを選択した場合は、カスタムHTTPステータスコードを入力します。 2xxから5xxまでのレスポンスコードを指定できます。
前の2つの手順を繰り返して、not_foundレスポンス(404 - Not Found)とerrorレスポンス(500 - Internal Server Error)を追加します。
SOAPリクエストを処理する
SOAPエンベロープを解析し、リクエストされた操作を検証して、ターゲットAPIを呼び出すステップをレシピに追加します:
XMLペイロードを解析して検査する
SOAPリクエストは、リクエスト本文内のSOAPエンベロープとして到着します。 例:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<OperationName>
<Parameter>value</Parameter>
</OperationName>
</soap:Body>
</soap:Envelope>XMLペイロードを解析して検査するには、次の手順を実行します:
XML Tools by WorkatoからParse XML documentアクションを追加します。 アクションでSOAP本文から必要な値のデータピルが生成されるように、代表的なSOAPエンベロープをSample documentとして入力します。
次のステップで、リクエストされた操作を識別するデータピルを使用します。 サンプルドキュメントは、エンドポイントが受信するSOAPリクエストの構造と一致している必要があります。
Lookup tables by WorkatoからSearch entriesアクションを追加します。 SOAP本文から解析された操作値を使用して、承認済み操作を含むルックアップ テーブルを検索します。
操作が承認されているか確認する
リクエストされた操作がルックアップ テーブルに含まれているかどうかに基づいて、レシピを分岐します。
ルックアップ テーブル検索で一致が返されたかどうかを確認するIF条件を追加します: 前のステップのエントリIDがis presentであること。
ルックアップ テーブル検索で一致が返されない場合に、リクエストされた操作を拒否するELSEブロックを追加します。
ELSEブロック内で、returnアクション(Action in an app > API platform by Workato > Respond to API request)を選択し、not_foundレスポンスを選択します。
ターゲットサービスを呼び出してエラーを処理する
IFブロック内で、ターゲットAPIへの呼び出しをHandle errors制御ステートメントでラップします。 これにより、ターゲットAPIリクエストが失敗した場合に、エンドポイントは定義済みAPIレスポンスを返すことができます。
次の手順を完了します:
IFブロック内で、+ Add stepをクリックし、Handle errorsを選択します。 Workatoは、Monitor actions for errorブロックとError found?ブロックを作成します。
Monitor actions for errorブロック内で、Action in an app > HTTP > Send requestを追加します。 ターゲットAPI用のHTTPコネクションを選択します。 private serverでホストされているターゲットAPIの場合は、オンプレミスグループ経由でリクエストを転送するコネクションを使用します。
ターゲットAPIが想定するURL、メソッド、ヘッダー、ペイロードを使用してリクエストを設定します。
Monitor actions for errorブロック内のまま、Send requestアクションの直後に、Action in an app > API platform by Workato > Respond to API requestを追加します。 successレスポンスを選択し、ターゲットAPIから返されたペイロードをレスポンス本文にマッピングします。
Error found?ブロックを設定します。 ターゲットAPIリクエストを再試行するかどうか、および再試行回数を選択します。
Error found?ブロック内で、Action in an app > API platform by Workato > Respond to API requestを追加し、errorレスポンスを選択します。 このレスポンスは、設定済みの再試行後もターゲットAPIリクエストが失敗する場合に実行されます。
WSDLを返すレシピを作成する
SOAP APIを説明するWSDLを返す別のAPIレシピを作成します。 このレシピをSOAP APIレシピと同じフォルダに作成し、両方のレシピを同じAPIレシピコレクションに追加できるようにします。
WSDLはWorkato FileStorageに保存できます。 WSDLを取得し、その内容をレスポンス本文として返すようにレシピを設定します。
WSDL APIレシピ
レシピロジックをテストする
SOAP APIレシピを構築しながら保存してテストします。 小さなステップでレシピを構築すると、エンドポイント全体をテストする前に問題を切り分けやすくなります。
リクエスト解析と操作検証をテストする
トリガー、XML解析、ルックアップ テーブルロジックをテストするために、ターゲットAPIに到達可能である必要はありません。
Send requestアクションをスキップし、サンプルSOAPリクエストを送信して、次の点を確認します:
- レシピが、リクエストされた操作の識別に使用される値を解析する。
- 承認済み操作がIF分岐に進む。
- ルックアップ テーブルにない操作がELSE分岐に進み、
not_foundレスポンスを返す。
エラーパスをテストする
ターゲットAPIが利用可能になる前に、errorレスポンスをテストすることもできます。 Send requestアクションを有効のままにし、ターゲットAPIが利用できない状態、またはHTTPリクエストが失敗する原因となる状態で、そのステップに到達するリクエストを送信します。
失敗したリクエストはError found?ブロックに入り、設定済みの再試行後にerrorレスポンスを返します。
パブリックAPIで成功パスをテストする
ターゲットAPIが利用可能になる前にレシピの成功パスをテストするために、Send requestアクションをhttps://jsonplaceholder.typicode.com/todosなどの到達可能なパブリックテストAPIに一時的に向けることができます。
このテストでJSONPlaceholderを使用する場合:
- private target APIではなく、パブリックテストエンドポイント用にSend requestアクションを設定します。
- Request content typeフィールドを、送信するペイロードに合わせます。
- Response content typeフィールドをTextに設定して、レスポンスをXMLまたはJSONとして解析せずにそのまま渡します。
- レシピフローを検証したら、Send requestアクションを実際のターゲットAPI設定に戻します。
レシピをコレクションにグループ化する
SOAP APIレシピとWSDLレシピをAPIレシピコレクションにグループ化します。 Use existing recipesを選択し、両方のレシピを含むフォルダを選択します。
これにより、SOAPリクエストを処理するエンドポイントとWSDLを返すエンドポイントの2つが作成されます。
新しいエンドポイントはデフォルトで非アクティブ
新しいエンドポイントはデフォルトで非アクティブです。 他のレシピやアプリがこれらを呼び出せるようにするには、両方のエンドポイントをアクティブ化する必要があります。 詳細については、エンドポイントのアクティブ化または非アクティブ化を参照してください。
エンドポイントをエンドツーエンドでテストする
エンドポイントをアクティブ化し、APIに到達可能になったら、実際のターゲットAPIでSOAPエンドポイントをテストできます。
承認済み操作を送信し、フロー全体を確認します:
- エンドポイントはSOAPリクエストをraw XMLとして受け入れる。
- レシピはSOAP本文を解析し、リクエストされた操作を識別する。
- ルックアップ テーブルは、その操作が承認されていることを確認する。
- HTTPアクションはリクエストをターゲットAPIに送信する。
- レシピは、
successレスポンスを通じてターゲットAPIペイロードを返す。
curlまたは別のHTTPクライアントでリクエストを送信できます。 Try it outテスターにはrawリクエスト本文用のフィールドが表示されないため、SOAPエンベロープを直接送信できるクライアントを使用します:
curl -X POST 'ENDPOINT_URL' \
-H 'api-token: API_KEY' \
-H 'Content-Type: text/xml' \
--data-binary '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><OperationName><Parameter>APPROVED_OPERATION</Parameter></OperationName></soap:Body></soap:Envelope>'curlリクエストに必要なAPIクライアントとキーの作成方法については、レシピエンドポイントをテストするを参照してください。
SOAP APIレシピをターゲットAPIで実装する準備ができました。
最終更新日: