변환
IBM® Verify에서 웹훅을 적용할 때 테넌트 관리자가 항상 작성하고 배치하지 않는 원격 시스템에 연결하는 작업이 포함됩니다. 이러한 원격 시스템은 견고한 API를 노출할 수 있으므로 Verify와 원격 시스템 간의 기능 통합을 달성하기 위해 웹훅 호출의 요청 또는 응답 페이로드를 변경해야 할 수 있습니다.
이 통합을 달성하기 위해 웹훅은 변환이라는 기능을 노출합니다. 관리자는 이 기능을 사용하여 HTTP 요청 및 응답을 변경하는 표현식을 작성할 수 있습니다.
웹훅 변환은 잘 알려진 키가 포함된 맵의 출력인 CEL 표현식입니다. 이러한 키는 HTTP 요청 또는 응답을 구성하는 부분에 맵핑됩니다. 변환 출력의 각 키는 선택사항이며 제공되지 않는 경우 요청 또는 응답의 해당 부분은 수정되지 않습니다.
송신 변환
송신 변환은 웹훅 대상으로 전송되기 전에 HTTP 요청에 적용됩니다.
다음 표는 송신 변환 입력 인수를 보여줍니다.
이러한 매개변수는
| 이름 | 유형 | 읽기 전용 | 참고 |
|---|---|---|---|
body |
map[string]object |
N | |
header |
map[string]list[string] |
N | |
method |
string |
N | |
path |
string |
N | |
host |
string |
Y | 호스트가 구성된 모든 URL에서 일관된 경우에만 표시됩니다. |
CEL 스펙에 따라 참조될 수 있습니다.CEL 표현식은 다음 예제에 표시된 대로 잘 알려진 키로 선언된 맵입니다.{
"body":body,
"header":header,
"path":path
}참고: 변경 사항이 없는 경우에는 키를 포함할 필요가 없습니다. 앞의 예는 맵 형식을 설명하기 위한 것입니다.
다음 표는 송신 변환 키를 보여줍니다.
| 이름 | 유형 | 참고 |
|---|---|---|
body |
map[string]object 또는 string |
|
header |
map[string]list[string] 또는 map[string]string |
|
method |
string |
|
path |
string |
|
query |
map[string]string 또는 map[string]list[string] |
|
skip_authentication |
boolean |
true로 설정하면 구성된 인증 메커니즘이 사용되지 않습니다. 변환이 요청에 권한 부여 세부사항을 추가하는 상황에 이 키를 사용하십시오. |
title_case_bearer |
boolean |
수신 API가 헤더를 올바르게 처리하기 위해 대문자 사용을 요구하는 경우 이 변환을 사용하십시오. true로 설정하면, 헤더에 인 경우 해당 authorization 헤더의 authorization-type 지정자가 bearer Title Case로 변환됩니다 (bearer -> Bearer). |
수신 변환
수신 변환은 시작된 웹훅에서 수신되는 대로 HTTP 응답에 적용됩니다.
다음 표는 수신 변환 입력 인수를 보여줍니다.
| 이름 | 유형 | 읽기 전용 | 참고 |
|---|---|---|---|
body |
map[string]object |
N | |
header |
map[string]list[string] |
Y | |
status_code |
integer |
Y | |
request |
map[string]object |
Y | 발신 변환 인수를 포함합니다. 예를 들어, request.body 원본 요청 본문에 접근하려면. |
참고:
- 수신 변환의 본문만 수정할 수 있습니다.
header또는status_code에 대한 변경사항은 적용되지 않습니다. - 수신 변환은 상태 코드의 유효성이 검증된 후에만 시작됩니다. 웹훅 또는 자원의
expectedStatus필드가 적절하게 설정되어 있는지 확인하십시오.
변환의 일반적인 버그
유사한 일반적인 문제가 발생할 수 있습니다.
- 숫자 동등성 실패
- HTTP 본문에서 나오는 숫자에 대해 비교를 수행할 때 동등성 검사가 숫자에 대해 예상대로 작동하지 않을 수 있습니다. 다음 코드는 페이로드, 페이로드에 적용된
CEL및 출력의 예제입니다.body argument value:{ "value": 2 }CEL:{ "body" : body.put("gte": body.value >= 2) }Result:{ "value":2, "gte": false }이 결과는
body.value표현식이 10진수 값을 산출하기 때문입니다. JSON으로서 숫자는 정의에 따라 정수가 아닙니다. 캐스트가 이 동작을 정정합니다. 다음 예제를 참조하십시오.Incoming body:{ "value": 2 }CEL:{ "body" : body.put("gte": int(body.value) >= 2) }Result:{ "value":2, "gte": true } - 요청에서 본문 제거하기
- 일부 API는 모든 정보를 요청 헤더( URL )에 포함하고, 요청 본문(body)은 포함하지 않도록 요구할 수 있습니다. 이러한 API의 경우, 요청에서 전송되는 HTTP 본문을 제거하기 위해 변환이 필요할 수 있습니다. 발송 요청에서 본문을 제거하려면 다음 단계를 따르십시오.
- 콘텐츠 유형을 빈 문자열로 설정합니다.
- HTTP 의 본문을 빈 문자열로 설정합니다.
다음 예제는 발신 변환의 일환으로 본문을 제거하는 방법을 보여줍니다:
CEL:{ "body":"", "header": header.put("content-type","") }