0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[OutSystems]Expose REST APIのOnResponseを試す

Posted at

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つ)。
image.png

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

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

image.png

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

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

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

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

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

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

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

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

ちょっと手を抜いて、JSON末尾に「}」を「, RunAt="日時"}」で置き換え(属性に複合型が含まれていると誤動作する)。
image.png
上の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として読んでしまう)。
image.png

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?