[OutSystems] Expose REST API의 OnResponse 사용

3849 단어 restoutsystems
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에서 제공하는 메커니즘에서는 해당 값에 액세스할 수 없습니다.

출력 변수의 속성이 하나일 때는 값 그 자체가 온다



출력 변수의 속성이 하나만 있고 Basic Type인 경우입니다.
아래와 같은 REST API 메소드(출력 변수는 Text형 1개).


OnResponse에 온 출력은 다음 형식이었습니다. JSON이 아닌 단순한 텍스트 형식으로 도착하는 것 같습니다.


이 변수를 편집해 봅니다.
값을 변경할 때 OnResponse Action의 CustomizedResponse 출력 변수에 Response 입력 변수를 편집한 값을 설정합니다.



브라우저에는 다음 응답이 반환되었습니다.
メッセージテキスト メソッドで追加 OnResponseで追加

출력 변수의 속성이 여러 개인 경우 JSON



Expose REST API에서 BODY에 출력하는 변수는 하나만 제한됩니다.
그렇다면 여러 값을 반환하는 방법은 여러 속성을 가진 Structure를 정의하고 API의 출력 변수 유형으로 설정합니다.

여기에서는 Text형의 Message와 Integer형의 Number를 가지는 Structure를 출력 변수 쪽으로 정의했습니다.


이 상태에서 OnResponse에 건너오는 값을 확인해 보겠습니다.
결과는 특별히 지정하지 않았지만 JSON이되었습니다.
"{""Message"":""メッセージテキスト メソッドで追加"",""Number"":1230}"

그런 다음 이 값을 다시 작성해 보겠습니다.
후처리로 정해진 항목을 추가하는 상황을 상정하고, JSON의 마지막 속성으로서 실행 일시를 더한다.

조금 손을 빼고, JSON 말미에 「}」를 「, RunAt="일시"}」로 옮겨놓는다(속성에 복합형이 포함되어 있으면 오동작한다).

위의 Assign은 실행일시를 「년/월/일시:분:초」형식으로 취득.
아래의 Assign이 출력 변수에 JSON 끝에 ", RunAt = "datetime""을 추가하는 처리.
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를 비교하면 다시 일치했습니다.

좋은 웹페이지 즐겨찾기