0
0

More than 3 years have passed since last update.

[OutSystems]Expose REST APIのOnRequestを試す

Last updated at Posted at 2021-03-13

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

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

確認環境

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

ドキュメント

REST APIリクエストを前処理する

操作対象はBODY

パラメータを渡す方法として、URL(クエリストリング)・Header・Bodyがあります。
OnRequestで操作できるのはリクエストデータの内、BODYの部分だけのようです。OnRequestは各個別メソッドより前に動作するため、メソッドでどういうパラメータを指定しているかは関係ないはずですが、念の為確認してみました。

URL渡しのパラメータは操作できないのでGETは対象外

HTTP Method=GET、かつ入力パラメータをURLで受け取るメソッドを作って以下のパラメータで動作確認。
<モジュールパス>/rest/SampleExposedAPI/RESTAPIMethod2?Message=%E3%83%86%E3%82%B9%E3%83%88%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8&Number=123&dummy=2012

この条件で入力パラメータをデバッガで確認したところ、空文字列でした。よって、GET MethodのAPIにはこのカスタマイズは使えなさそうです。
image.png

POSTのAPIに渡したパラメータが、OnRequestでどのように見えるか

Chrome ExtensionのRestManで確認してみます。
用意したメソッドは、HTTP Method=POSTで、Receive In=Bodyの入力パラメータはStructure(Text型のMessageとInteger型のNumber属性を持つ)という構成。

指定したヘッダ(複合型を渡すときはContent-Type:application/jsonを渡す必要がある):
image.png

指定したリクエストボディ:

{
"Message": "メッセージテキスト",
"Number": 123,
"DummyData": "DummyText"
}

OnRequestのRequest入力パラメータに渡ってきたデータ(デバッガで確認):
image.png

渡したリクエストボディがそのまま、Request.RequestText属性に入っているようですね。
また、ヘッダで渡した値は、やはりRequestには入っていないようです。

Request.RequestBinaryの正体

OnRequestの入力パラメータRequestには、ここまで見てきたRequestTextの他に、RequestBinaryという属性もあります。
上の項目と同じパラメータを使って、RequestBinaryを確認してみます。

この属性はBinary型なので、OnRequest中で、BinaryDataモジュールのBinaryDataToTextを使ってText型に戻して値を確認してみます。1

Encodingを指定しておきます(ないと、ASCIIとして解釈してしまうので)。
image.png

変換してみた結果。完全に入力(リクエストボディ)と一致していますね。入力データのバイナリデータ表現ということですね。
image.png

前処理でパラメータを書き換えてみる

実験として、OnRequest内で受け取った値を変更してみたらどうなるかを確認してみます。

やり方としては、
1. JSON Deserializeする(REST APIメソッドで受け取りに使っている型)
2. 変数の1つを上書き
3. JSON Serializeする
4. 結果をRequest.RequestTextに編集
5. デバッガを使ってREST APIメソッドに渡ってきた値を確認

image.png

デバッガで確認した画面。想定通り値が変更されました。
image.png


  1. 使い方は以前書いたOutSystemsでShift-JISやEUC-JPのデータを扱うを参照 

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