適用対象: Azure Logic Apps (従量課金プラン + Standard)
Azure Logic Apps では、JSON、XML、フラット ファイル、バイナリ データなどのすべてのコンテンツ タイプがサポートされています。 一部のコンテンツ タイプにはネイティブサポートがあり、キャストや変換は必要ありませんが、他のコンテンツ タイプでは必要な形式を提供するために何らかの作業が必要です。
ワークフロー内のコンテンツまたはデータを処理する最適な方法を決定するために、Azure Logic Apps では、ワークフローが外部の呼び出し元から取得する HTTP 要求で Content-Type ヘッダー値を使用します。
次の一覧には、ワークフローで発生する可能性がある Content-Type 値の例を示します。
- application/json (ネイティブ型)
- text/plain (ネイティブ型)
- application/xml および application/octet-stream
- その他のコンテンツ タイプ
このガイドでは、Azure Logic Apps がさまざまなコンテンツ タイプを処理する方法について説明し、必要に応じてこれらの種類を正しくキャストまたは変換する方法を示します。
application/json
Content-Type ヘッダー値が application/json である HTTP 要求の場合、Azure Logic Apps はコンテンツを JavaScript Object Notation (JSON) オブジェクトとして格納して処理します。 既定では、キャストや変換を行わずに JSON コンテンツを解析できます。
式を使用して、このコンテンツを解析することもできます。
たとえば、次の式では、 body() 関数と My_action が使用されます。これは、ワークフロー内の先行アクションの JSON 名です。
body('My_action')['client']['animal-type'][0]
次の手順では、キャストや変換を行わずに式がどのように動作するかを説明します。
body()関数は、bodyアクションからMy_action出力オブジェクトを取得します。返された
bodyオブジェクトから、関数はclientオブジェクトにアクセスします。clientオブジェクトには、配列に設定されたanimal-typeプロパティが含まれています。関数は配列内の最初の項目にアクセスし、キャストや変換を行わずに値 dog を直接返します。
Content-Type ヘッダーを使用しない JSON データを使用する場合は、json() 関数を使用してそのデータを手動で JSON に変換できます。次に例を示します。
json(triggerBody())['client']['animal-type']
triggerBody()関数は、ワークフローのトリガー出力からbodyオブジェクトを取得します。 通常、このオブジェクトは JSON オブジェクトです。bodyオブジェクトのソースは、ワークフロー トリガーによって受信された受信 HTTP 要求またはイベントから生成されます。json()関数は、body関数から返されたtriggerBody()オブジェクトを JSON オブジェクトとして明示的に解析します。この動作は、たとえば、トリガー本体が JSON としての処理を必要とする文字列である場合に便利です。
残りの式の動作は、前の例のようになります。
JSON のプロパティに使用するトークンの作成
Azure Logic Apps では、JSON コンテンツのプロパティを表すわかりやすいトークンを生成できます。 その後、これらのトークンを使用して、ワークフローでこれらのプロパティとその値をより簡単に参照できます。
次の一覧では、一般的なワークフロー操作と、JSON コンテンツ内のプロパティのトークンを生成できる対応する方法について説明します。
HTTP 要求が受信されたとき
という名前の トリガー请求要求トリガーを使用してデザイナーで作業する場合は、必要に応じて、各プロパティ値の JSON オブジェクト、プロパティ、および予想されるデータ型を定義する JSON スキーマを指定できます。 JSON スキーマがない場合は、使用できる JSON スキーマを生成するペイロードの例を指定できます。
トリガーでは、スキーマを使用して受信 HTTP 要求からの JSON コンテンツを解析し、JSON コンテンツのプロパティを表すトークンを生成します。 その後、ワークフロー内の後続のアクションで、これらのプロパティとその値を簡単に参照して使用できます。
次の手順では、JSON スキーマを生成するペイロードの例を指定する方法について説明します。
デザイナーで、[ 要求 ] トリガーを選択して情報ウィンドウを開きます。
[ パラメーター ] タブの [ 要求本文の JSON スキーマ ] ボックスで、[ サンプル ペイロードを使用してスキーマを生成する] を選択します。
[ サンプル JSON ペイロードの入力または貼り付け ] ボックスにサンプル ペイロードを入力し、[ 完了] を選択します。
生成されたスキーマがトリガーに表示されます。
コード ビュー エディターでは、 要求 トリガーの基になる JSON 定義を確認できます。
"triggers": { "When_an_HTTP_request_is_received": { "type": "Request", "kind": "Http", "inputs": { "schema": { "type": "object", "properties": { "client": { "type": "object", "properties": { "animal-type": { "type": "array", "items": { "type": "string" }, }, "name": { "type": "string" } } } } } } } }ワークフローをトリガーするには、 ワークフロー URL またはトリガーの HTTP URL を取得します。これは、ワークフローを初めて保存した後に生成されます。
ワークフローをテストするには、HTTP 要求をワークフロー URL またはトリガー URL に送信できるクライアント ツールまたはアプリを使用します。 要求に Content-Type という名前のヘッダーが含まれており、ヘッダー値が application/json に設定されていることを確認します。
Parse JSON アクション
デザイナーでこのアクションを使用すると、JSON 出力を解析し、JSON コンテンツのプロパティを表すわかりやすいトークンを生成できます。 その後、ロジック アプリのワークフローの至る所で、これらのプロパティを簡単に参照して使用することができます。
要求トリガーと同様、解析したい JSON コンテンツの JSON スキーマを指定または生成することができます。 これにより、Azure Service Bus や Azure Cosmos DB などのデータが利用しやすくなります。
text/plain
ワークフローが HTTP 要求を受信した場合、 Content-Type ヘッダー値は テキスト/プレーンです。 Azure Logic Apps は、生の形式でコンテンツを格納および処理します。 キャストや変換を行わずに後続のワークフロー アクションでこのコンテンツを参照または使用する場合、送信要求にも Content-Type ヘッダー値が text/plain に設定されます。
たとえば、フラット ファイルを使用していて、受信 HTTP 要求に Content-Type ヘッダー値が text/plain に設定されている場合です。
Date,Name,Address
Oct-1,Frank,123 Ave
要求本文を使用して別の要求を送信する後続のアクションにこの要求を送信した場合、2 番目の要求にも Content-Type ヘッダー値が text/plain に設定されます。 プレーン テキストでデータを操作してもヘッダーを指定しなかった場合は、 string() 関数を使用して手動でこのデータをテキストにキャストできます。次に例を示します。
string(triggerBody())
application/xml と application/octet-stream
Azure Logic Apps では、受信 HTTP 要求または応答で常に Content-Type ヘッダー値が保持されます。 ワークフローで、 Content-Type が application/octet-stream に設定されたコンテンツを受信し、そのコンテンツをキャストせずに後続のアクションに含める場合、送信要求では Content-Type も application/octet-streamに設定されます。 この方法により、ワークフローを移動するときにデータが失われないようにします。 ステートフル ワークフローでは、後続のアクションの状態、入力、出力は JSON オブジェクトに格納され、状態はワークフロー内を移動します。
コンバーター関数
一部のデータ型を保持するために、Azure Logic Apps はコンテンツをバイナリの base64 でエンコードされた文字列に変換します。 この文字列には、 $content ペイロードと、自動的に変換される $content-typeの両方を保持する適切なメタデータがあります。
次の一覧では、特定の 関数を使用するときに Azure Logic Apps によってコンテンツがどのように変換されるかについて説明します。
-
json(): データをapplication/jsonにキャストします。 -
xml(): データをapplication/xmlにキャストします。 -
binary(): データをapplication/octet-streamにキャストします。 -
string(): データをtext/plainにキャストします。 -
base64(): コンテンツを base64 でエンコードされた文字列に変換します。 -
base64toString(): base64 でエンコードされた文字列をtext/plainに変換します。 -
base64toBinary(): base64 でエンコードされた文字列をapplication/octet-streamに変換します。 -
dataUri(): 文字列をデータ URI に変換します。 -
dataUriToBinary(): データ URI をバイナリ文字列に変換します。 -
dataUriToString(): データ URI を文字列に変換します。
たとえば、ワークフロー トリガーが HTTP 要求を受け取り、そのコンテンツが次のサンプルのようにContent-Typeがapplication/xmlに設定されているとします。
<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>
このコンテンツは、 xml() 関数と triggerBody() 関数を使用する次の式を使用してキャストできます。
xml(triggerBody())
その後、ワークフロー内の後続のアクションで結果のコンテンツを使用できます。 または、代わりに xpath() 関数と xml() 関数を使用する次の式を使用することもできます。
xpath(xml(triggerBody()), '/CustomerName')
他のコンテンツ タイプ
Azure Logic Apps では他のコンテンツ タイプがサポートされていますが、 $content 変数をデコードして HTTP 要求からメッセージ本文を手動で取得する必要がある場合があります。
たとえば、 Content-Type が application/x-www-url-formencoded に設定されている HTTP 要求をワークフローが受信するとします。 すべてのデータを保持するために、要求本文には、ペイロードが base64 文字列としてエンコードされる $content 変数が含まれています。
CustomerName=Frank&Address=123+Avenue
このコンテンツ タイプはプレーン テキストまたは JSON 形式ではないので、Azure Logic Apps では、次のCustomerName=Frank&Address=123+Avenue変数と$content-type変数を使用して$contentが格納されます。
"body": {
"$content-type": "application/x-www-url-formencoded",
"$content": "AAB1241BACDFA=="
}
Azure Logic Apps には、フォーム データを処理するためのネイティブ関数も含まれています。次に例を示します。
または、次の例のような式を使用して、データに手動でアクセスできます。
string(body('formdataAction'))
送信要求で application/x-www-url-formencoded を Content-Type ヘッダー値として使用するには、 body('formdataAction')などの式を使用してキャストせずに、要求の内容をアクション本文に追加します。 このメソッドは、アクション本文が body 入力オブジェクト内の唯一のパラメーターである場合にのみ機能します。 コンテンツ タイプがbody('formdataAction')されている要求でapplication/json式を使用すると、本文がエンコードされて送信されるため、ランタイム エラーが発生します。