Flex Gateway新着情報
Governance新着情報
Monitoring API Managerこの DataWeave の例では、出力 MIME タイプと、出力データを書式設定する MIME タイプを区別する方法を示します。このような区別により、Mule アプリケーションは、クライアントがアプリケーションの出力データの表示方法の決定に使用できる MIME タイプを出力できます。たとえば、HTTP は MIME タイプを使用してその Content-Type ヘッダーを生成します。
開始する前に、DataWeave バージョン 2 (%dw 2.0) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave バージョン 1 (%dw 1.0) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクターを使用できます。
最初の例では、API の「問題の詳細」標準を使用します。この標準では、レスポンスヘッダーに application/problem+json コンテンツタイプが必要になり、特定のキーが含まれる JSON 形式のレスポンスボディも必要になります。
この例として、HTTP 要求を処理するが常に失敗する Mule フローが挙げられます。失敗により、エラーハンドラーがトリガーされます。エラーハンドラーは、状況コードを 400 に設定し、DataWeave スクリプトを使用してこの標準に準拠する応答を生成します。
DataWeave 出力ディレクティブ output application/problem+json with json は、application/problem+json MIME タイプと JSON 形式の本文が含まれる応答を生成するようにスクリプトに指示します。
400 エラーを受信したクライアントは、応答で Content-Type: application/problem+json を使用して、標準的な方法 (想定される title キーの使用など) で応答データを処理できるかどうかを判断します。一方、problem+ のない MIME タイプ Content-Type: application/json は、そのような方法でクライアントがエラーを処理できるかどうかを示すことができません。
<flow name="problemDetailFlow">
		<http:listener config-ref="HTTP_Listener_config" path="/test">
			<http:error-response statusCode="#[vars.statusCode]" >
				<http:body ><![CDATA[#[payload]]]></http:body>
			</http:error-response>
		</http:listener>
		<raise-error doc:name="Raise error" type="CUSTOM:FORCED" description="This is a manual error to force the execution of the error handler."/>
		<error-handler >
			<on-error-propagate>
				<set-variable value="#[400]" variableName="statusCode"/>
				<ee:transform>
					<ee:message>
						<ee:set-payload><![CDATA[%dw 2.0
output application/problem+json with json
---
{
  "type": "https://example.org/out-of-stock",
  title: "Out of Stock",
  status: vars.statusCode,
  detail: "Item B00027Y5QG is no longer available",
  product: "B00027Y5QG"
}]]></ee:set-payload>
					</ee:message>
				</ee:transform>
			</on-error-propagate>
		</error-handler>
	</flow>
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json; charset=UTF-8
Content-Length: 173
Date: Thu, 02 Apr 2020 19:48:23 GMT
Connection: close
[data-source-url=modules/ROOT/pages/_partials/cookbook-dw/change-script-output-mime-ex1-partial-solution]
{
  "type": "https://example.org/out-of-stock",
  "title": "Out of Stock",
  "status": 400,
  "detail": "Item B00027Y5QG is no longer available",
  "product": "B00027Y5QG"
}
次の例では、Mule フローは DataWeave によって生成された text/markdown コンテンツを単純なテキストとして返します。マークダウンがサポートされているブラウザーでは、アスタリスクを使用してプレーンテキストで入力を表示する代わりに、マークダウンのルールに従って箇条書きのコンテンツとして表示できます。
<flow name="listFlow">
  <http:listener config-ref="HTTP_Listener_config" path="/some.md"/>
  <ee:transform>
    <ee:message>
      <ee:set-payload ><![CDATA[%dw 2.0
output text/markdown with text
---
"* idea 1
* some other idea"]]></ee:set-payload>
    </ee:message>
  </ee:transform>
</flow>
HTTP/1.1 200
Content-Type: text/markdown; charset=UTF-8
Content-Length: 26
Date: Thu, 02 Apr 2020 21:28:36 GMT
* idea 1
* some other idea