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を比較すると、やはり一致していました。