[OutSystems]Expose REST APIのOnResponseを試す


OutSystemsでREST APIを作って公開するExpose REST APIの機能には、前処理を行えるOnRequest、後処理を行えるOnResponseというプロパティがあります。

OnResponse(後処理)の動作を確認してみました。
ExposeしたREST APIで、各メソッドの処理を実行した後に動作するActionを作れる機能です。
出力パラメータをText型またはBinary型として受取り、その値を修正して出力パラメータに設定することで後処理できます。

OnRequest(前処理)については、
Expose REST APIのOnRequestを試すで確認しています。

確認環境

Personal Environment(Version 11.10.0 (Build 22910))
Service Studio(Version 11.10.13)

操作対象はBODY

これはOnRequestのときと同じ。
Expose REST APIの機能としては、ヘッダに値を出力することもできますが、OnResponseで提供する仕組みではその値にアクセスできません。

出力変数の属性が1つのときは値そのものが来る

出力変数の属性が1つだけで、Basic Typeである場合です。
以下のようなREST APIメソッド(出力変数はText型1つ)。

OnResponseに来た出力は以下の形式でした。JSONでなくただのテキスト形式で届くようです。

この変数を編集してみます。
値を変更するときは、OnResponse ActionのCustomizedResponse出力変数に、Response入力変数を編集したものを設定します。

ブラウザには以下のレスポンスが返ってきました。

メッセージテキスト メソッドで追加 OnResponseで追加

出力変数の属性が複数のときはJSON

Expose REST APIでは、BODYに出力する変数は1つだけに限られています。
では、どうやって複数の値を返せばいいかと言うと、複数の属性を持つStructureを定義して、APIの出力変数の型に設定します。

ここでは、Text型のMessageとInteger型のNumberを持つStructureを出力変数の方に定義しました。

この状態でOnResponseに渡ってくる値を確認してみます。
結果は特に指定していないのですが、JSONになっていました。

"{""Message"":""メッセージテキスト メソッドで追加"",""Number"":1230}"

次に、この値を書き換えて見ます。
後処理で決まった項目を追加するような状況を想定して、JSONの最後の属性として、実行日時を足す。

ちょっと手を抜いて、JSON末尾に「}」を「, RunAt="日時"}」で置き換え(属性に複合型が含まれていると誤動作する)。

上のAssignは、実行日時を「年/月/日 時:分:秒」形式で取得。
下のAssignが、出力変数に、JSON末尾に「, RunAt="日時"」を追加する処理。

RunAt=FormatDateTime(CurrDateTime(), "yyyy/MM/dd HH:mm:ss")

CustomizedResponse.ResponseText = Replace(Response.ResponseText, "}", ", ""RunAt"": """ + RunAt + """}")

ResponseBinaryはResponseTextをBinaryに変換したもの

OnResponseで、入力変数のResponse.ResponseBinaryをText型に戻して、どんな値が入っているか確認。

BinaryData型をText型に変換したいときは、BinaryDataモジュールのBinaryDataToText Actionです。変換時に元データを解釈するエンコーディングを指定する必要があります(ないとASCIIとして読んでしまう)。

Debuggerで止めて、Response.ResponseTextとText型に変換したResponse.ResponseBinaryを比較すると、やはり一致していました。