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?

OutSystemsから呼び出したRestAPIのHTTPステータスコードを取得する

Posted at

はじめに

OutSystemsから外部のRestAPIを呼び出し、そのHTTPステータスコードによりその後の処理を分岐させたい。
ConsumeRestAPIを定義し、外部APIを呼び出し、OnAfterResponseにてHTTPステータスコードを取得して、Response内に格納して返却するようにした。
しかし、500番が返却されるようにAPIを実行した場合、ConsumeRestAPIは例外を発生させてしまい、HTTPステータスコードを取得することができなかった。
ConsumeRestAPIが返却されたHTTPステータスコードによってどのような挙動をするのか調査してみた。

環境

Service Studio Version 11.54.37

検証

検証内容

呼び出したAPIのHTTPステータスコードによりConsumeAPIはどう例外を発生させるか。

検証用のExposeAPIの準備

GetのAPIを準備した。
URL内で返却するHTTPステータスコードを指定すると、その通りにレスポンスを返す単純なAPI。

検証用のConsumeAPIの準備

上記のExposeAPIを実行するConsumeAPI。

検証結果

ConsumeAPIを実行した結果。
ExposeAPIのHTTPステータスコードにより以下のように例外が発生した。例外の文言は基本的に「HTTPステータスコード 詳細」というメッセージになる。

100番台:例外
200番台:正常終了
300番台:正常終了
400番台:例外
500番台:例外

要求を実現するには

仮説

ConsumeAPIの後処理で、StatusCodeにより処理が分岐し200番台および300番台以外の場合は例外を発生させている?StatusCodeを上書きすることで例外を回避できないか。

検証用のConsumeAPIの準備

OnAfterResponseCustomizedResponse.StatusCodeを200番に上書きしたうえで、CustomizedResponse.ResponseTextにHTTPステータスコードを付加する。

検証結果

おおむね臨むとおりにHTTPステータスコードを取得することができた。
一部のHTTPステータスコードでは「サーバーによってプロトコル違反が発生しました. Section=ResponseStatusLine」との例外が発生してしまうことが分かった。
例えば、100102で発生する。
以下は推測となる。
リクエストヘッダにExpect: 100-continueを付加してアクセスするとリクエストを検証する、その際の応答として100が返される。今回はその作法にのっとっていないため例外として処理されている可能性がある。
また、102はすでに非推奨となっているコードのため例外として処理されている可能性がある。これらはOnAfterResponseで置き換える前に例外が発生していると考えられ、400番台等とは別の処理でエラーとなっていることが想像できる。

結論

OnAfterResponseCustomizedResponse.StatusCodeを200番に上書きしたうえで、CustomizedResponse.ResponseTextにHTTPステータスコードを付加する。
上記の方法によりHTTPステータスコードを取得することができた。しかしそれでもHTTPステータスコードによっては、回避できない例外が発生することを確認できた。
ConsumeAPIをラップする形でアクションを作成し、そこで例外をキャッチして処理を分岐するのが想定された処理なのでないかと考える。
もう少しOutsystemsのConsumeAPI処理の流れを理解してみたいと思った調査だった。

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?