요청 및 응답 변수

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

API 프록시에 요청을 수행할 때는 API 프록시 구성 방법에 따라 다음 정보의 일부 또는 전부를 전달할 수 있습니다.

  • 요청 헤더
  • 쿼리 매개변수
  • 양식 데이터
  • XML 또는 JSON 페이로드
  • 리소스 URI

기본적으로 요청의 모든 데이터는 ProxyEndpoint에서 TargetEndpoint로 변경되지 않고 전달됩니다. 따라서 TargetEndpoint가 백엔드 서버에 요청을 수행하면 원래 요청의 모든 정보가 백엔드 서비스로 전달됩니다.

Edge가 백엔드 서비스로부터 수신한 응답 역시 마찬가지입니다. 기본적으로 응답에서 수신된 모든 데이터는 요청을 시작한 앱에 변경되지 않은 상태로 전달됩니다.

요청 데이터는 백엔드 서버로 어떻게 전달되나요?

다음 이미지는 API 프록시 정의를 보여줍니다.

백엔드에서 HTTP 서비스에 연결하기 위해 프록시 엔드포인트에서 대상 엔드포인트로 전달되는 HTTP 클라이언트의 요청입니다. 프록시 엔드포인트 및 대상 엔드포인트의 예시가 제공됩니다.

이 API 프록시의 경우에는 다음과 같습니다.

  • API 프록시 가상 호스트: 'default'
  • 가상 호스트에서 정의한 도메인: 'http://myOrg-prod.apigee.net'
  • 프록시 기본 경로: '/v1/weather'
  • 라우팅 규칙에서 지정된 TargetEndpoint: '기본'
  • 대상 URL: 'http://weather.yahooapis.com'

클라이언트 앱은 다음 curl 명령어를 사용하여 API 프록시에 GET 요청을 수행합니다.

curl -X GET http://myOrg-prod.apigee.net/v1/weather/forecastrss?w=12797282

이 요청에는 리소스 'forecastrss'와 하나의 쿼리 매개변수 w가 포함됩니다. Edge는 아래와 같이 요청을 파싱하고 요청의 일부를 흐름 변수에 할당합니다.

{request.verb} {proxy.basepath}/{proxy.pathsuffix}?{request.querystring}

흐름 변수는 다음 값으로 설정됩니다.

  • request.verb: 'GET'
  • proxy.basepath: '/v1/weather'
  • proxy.pathsuffix: 'forecastrss'
  • request.querystring: 'w=12797282'

그런 다음 TargetEndpoint는 요청의 정보를 사용하여 백엔드 서비스에 요청을 수행합니다.

{request.verb} {target.basepath}/{proxy.pathsuffix}?{request.querystring}

요청에 지정된 리소스 및 쿼리 매개변수가 어떻게 백엔드 서버에 대한 요청에 자동으로 포함되는지 확인합니다. TargetEndpoint의 정의에서 요청의 형식은 다음과 같습니다.

curl -X GET http://weather.yahooapis.com/forecastrss?w=12797282

쿼리 매개변수와 마찬가지로 API 프록시에 대한 요청에 포함하는 헤더 또는 양식 매개변수가 백엔드 서버로 전달됩니다. 예를 들어 아래에서 헤더를 포함하는 요청을 수행합니다.

curl -X GET -H 'Content-type:application/xml' http://myOrg-prod.apigee.net/v1/weather/forecastrss?w=12797282

또는 아래 양식의 요청을 통해 헤더 및 양식 데이터를 포함합니다.

curl -X POST -H "Content-type:application/json" -d \
  '{"email" : "janetutorialxml@example.com",
    "firstName" : "Jane",
    "lastName" : "Tutorial",
    "userName" : "jtutorialxml"
  }' \
  http://myOrg-prod.apigee.net/v1/register/user

두 가지 예시에서 헤더 및 양식 데이터가 백엔드 서비스에 변경되지 않은 상태로 전달됩니다. 헤더는 request.headers.countrequest.headers.names와 같은 흐름 변수로 표시됩니다. 양식 데이터는 request.formparam.countrequest.formparam.names와 같은 흐름 변수로 표시됩니다.

응답 데이터는 어떻게 반환되나요?

기본적으로 Edge가 응답의 백엔드 서비스로부터 수신한 모든 데이터는 요청을 보낸 앱으로 변경 없이 전달됩니다. 위에서 설명한 것처럼 요청에 대해 응답에서 반환된 데이터는 Edge의 흐름 변수를 통해 액세스할 수 있습니다. 자세한 내용은 흐름 변수 참조를 확인하세요.

API 프록시에서 요청 및 응답 데이터에 액세스

요청 데이터를 백엔드 서버로 전송하기 전에 수정하려는 경우가 많습니다. 예를 들면 다음과 같습니다.

  • Edge에서 요청을 검증하는 데 사용하는 보안 정보 삭제 백엔드 서비스에는 이 정보가 필요하지 않습니다.
  • 백엔드 서비스로 전송된 데이터를 추가하기 위해(예를 들어 사용자를 추적하거나 분석을 수집하기 위해).
  • 요청 데이터를 기반으로 요청을 조건부로 처리하기 위해. 예를 들어 API 프록시에 여러 TargetEndpoint가 있을 수 있습니다. 요청에서 사용하는 TargetEndpoint는 요청 데이터에 의해 결정됩니다. 그런 다음 백엔드 서비스에 보내기 전에 요청에서 이 데이터를 제거합니다.

응답의 데이터의 경우에도 마찬가지입니다. 응답 처리 중 API 프록시는 요청 앱에 데이터를 반환하기 전에 데이터를 수정할 수 있습니다.

요청 메시지 액세스

정책을 사용하여 요청 메시지의 일부 부분에 액세스하고 변경할 수 있습니다. 이러한 부분에는 다음이 포함됩니다.

  • 헤더
  • 쿼리 매개변수
  • 양식 매개변수
  • 소스 IP 주소
  • HTTP 메시지 본문

일반적인 흐름에서는 요청이 처리되면 프록시는 변환된 요청을 대상으로 전송합니다.

정책은 요청 변수를 검사한 후 해당 변수의 콘텐츠를 기반으로 요청을 변환 또는 거부할 수 있습니다. 정책은 적절한 변수(예: 요청 헤더에 해당하는 변수)를 설정하여 요청을 변환합니다.

응답 메시지 액세스

정책은 응답 메시지에 적용되는 변수를 사용하여 헤더, 쿼리 매개변수, 양식 매개변수, 소스 IP 주소, HTTP 메시지 본문 등의 메시지 구성요소에 액세스할 수 있습니다.

프록시는 응답 메시지를 수신한 후 응답에서 평가된 조건에 따라 일련의 정책을 적용하여 응답을 수정하거나 변환할 수 있습니다.

정책은 응답 변수를 검사한 후 해당 변수의 콘텐츠를 기반으로 요청을 변환 또는 거부할 수 있습니다. 정책은 적절한 변수(예: 응답 헤더에 해당하는 변수)를 설정하여 응답을 변환합니다.

흐름 변수에 액세스하기 위한 일반적인 정책

Edge는 요청 및 응답 데이터를 처리하는 데 사용할 수 있는 여러 정책을 정의합니다. 이러한 정책에는 다음이 포함됩니다.

  • AssignMessage 정책: API 프록시 흐름 중에 HTTP 요청 또는 응답 메시지를 만들거나 수정합니다. 또한 새 흐름 변수를 만들고 채웁니다.
  • ExtractVariables 정책: 조건문에 사용할 헤더, URI 경로, 페이로드, 쿼리 매개변수를 포함한 메시지에서 콘텐츠를 추출합니다. 그런 다음 정책은 메시지 콘텐츠에 텍스트 패턴을 적용하고 일치하는 항목을 찾으면 지정된 변수를 설정합니다.
  • JSONtoXML 정책XMLtoJSON 정책: 메시지를 자바스크립트 객체 표기법(JSON)에서 확장 가능한 마크업 언어(XML) 형식으로, 또는 그 반대로 변환합니다.
  • JavaCallout 정책, 자바스크립트 정책, PythonScript 정책, RegularExpressionProtection 정책: 이러한 정책을 사용하면 요청 및 응답 데이터가 포함된 흐름 변수에 액세스할 수 있도록 스크립트를 작성할 수 있습니다.