AssignMessage 정책

Apigee Edge 문서를 보고 있습니다.
Apigee X 문서로 이동하세요.
info

대상

AssignMessage 정책은 API 프록시 흐름 중에 새 요청 및 응답 메시지를 변경하거나 만듭니다. 정책을 사용하면 이러한 메시지에 대해 다음 작업을 수행할 수 있습니다.

  • 메시지에 새 양식 매개변수, 헤더, 쿼리 매개변수 추가하기
  • 기존 속성을 한 메시지에서 다른 메시지로 복사하기
  • 메시지에서 헤더, 쿼리 매개변수, 양식 매개변수, 메시지 페이로드를 삭제합니다.
  • 메시지에서 기존 속성 값을 설정합니다.

AssignMessage 정책을 사용하면 일반적으로 요청 또는 응답의 속성을 추가, 변경, 삭제할 수 있습니다. 하지만 커스텀 요청 메시지 만들기에 설명된 대로 AssignMessage 정책을 사용하여 커스텀 요청 또는 응답 메시지를 만들고 대체 대상으로 전달할 수도 있습니다.

Apigee Edge에서 처리하는 동안 요청 또는 응답 메시지를 수정할 수 있는 상황이 많습니다. 예를 들면 다음과 같습니다.

  • 쿼리 문자열 매개변수 또는 다른 입력 유형의 기본값을 정의합니다.
  • 메시지가 백엔드 서비스로 전달되기 전에 요청 메시지에서 HTTP 헤더를 제거합니다.
  • 응답이 소비자 앱으로 전송되기 전에 HTTP 헤더를 추가합니다.
  • 응답을 보내기 전에 JSON 또는 XML 메시지 콘텐츠를 삽입합니다.
  • 전체 요청 또는 응답 메시지를 생성합니다. 예를 들어 ServiceCallout 정책을 사용하여 API 프록시에서 Remote API를 호출할 수 있습니다. AssignMessage 정책을 사용하여 커스텀 요청 메시지를 만들고 변수에 할당할 수 있습니다. 그런 다음 서비스 콜아웃을 사용하여 메시지를 원격 API로 전송합니다.
  • 디버깅 및 문제 해결을 위해 요청 및 응답에 헤더를 추가합니다.

AssignMessage 정책은 메시지 또는 흐름 변수를 만들거나 변경할 수 있습니다. 이 정책을 사용하여 프록시를 통해 업스트림 시스템으로 전송하기 전에 요청 메시지를 수정하거나 API 소비자 애플리케이션에 중계하기 전에 응답 메시지를 수정합니다.

<AssignMessage> 요소

AssignMessage 정책을 정의합니다.

기본값 아래의 기본 정책 탭을 참조하세요.
필수 여부 필수
유형 복합 객체
상위 요소 해당 사항 없음
하위 요소 <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

<AssignMessage> 요소는 다음 문법을 사용합니다.

<AssignMessage> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]
  </IgnoreUnresolvedVariables>

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

다음 예시에서는 Edge UI에서 흐름에 AssignMessage 정책을 추가할 때의 기본 설정을 보여줍니다.

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Edge UI에 새 AssignMessage 정책을 삽입하면 가능한 모든 작업에 대한 스터브가 템플릿에 포함됩니다. 일반적으로 이 정책으로 수행할 작업을 선택하고 나머지 하위 요소를 삭제합니다. 예를 들어 복사 작업을 수행하려면 <Copy> 요소를 사용하고 정책에서 <Add>, <Remove>, 기타 하위 요소를 삭제하여 더 읽기 쉽게 만듭니다.

이 요소에는 다음과 같이 모든 정책에 공통된 속성이 있습니다.

속성 기본 필수 여부 설명
name N/A 필수

정책의 내부 이름입니다. name 속성의 값에는 문자, 숫자, 공백, 하이픈, 밑줄, 마침표가 포함될 수 있습니다. 이 값은 255자(영문 기준)를 초과할 수 없습니다.

원하는 경우 <DisplayName> 요소를 사용하여 관리 UI 프록시 편집기의 정책에 다른 자연어 이름을 사용하여 정책에 라벨을 지정합니다.

continueOnError false 선택사항 정책이 실패할 때 오류를 반환하려면 'false'로 설정합니다. 이는 대부분의 정책에서 예상되는 동작입니다. 정책이 실패한 후에도 흐름 실행이 계속되게 하려면 'true'로 설정합니다.
enabled true 선택 정책을 시행하려면 'true'로 설정합니다. 정책을 '사용 중지'하려면 'false'로 설정합니다. 정책이 흐름에 연결되어 있어도 정책이 시행되지 않습니다.
async   false 지원 중단됨 이 속성은 지원이 중단되었습니다.

다음 표에서는 <AssignMessage>의 하위 요소에 대한 대략적인 설명을 제공합니다.

하위 요소 필수 여부 설명
일반적인 작업
<Add> 선택사항 <AssignTo> 요소로 지정된 메시지 객체 정보를 추가합니다.

<Add>는 원본 메시지에 없는 헤더 또는 매개변수를 메시지에 추가합니다. 기존 헤더 또는 매개변수를 덮어쓰려면 <Set> 요소를 사용합니다.

<Copy> 선택사항 source 속성으로 지정된 메시지에서 <AssignTo> 요소로 지정된 메시지 객체 정보를 복사합니다.
<Remove> 선택사항 <AssignTo> 요소에 지정된 메시지 변수에서 지정된 요소를 삭제합니다.
<Set> 선택사항 <AssignTo> 요소로 지정된 요청 또는 응답에서 기존 속성 값을 대체합니다.

<Set>는 원본 메시지에 이미 있는 헤더 또는 매개변수를 덮어씁니다. 새 헤더 또는 매개변수를 추가하려면 <Add> 요소를 사용합니다.

기타 하위 요소
<AssignTo> 선택사항 AssignMessage 정책이 작동하는 메시지를 지정합니다. 표준 요청 또는 응답이거나 새 커스텀 메시지일 수 있습니다.
<AssignVariable> 선택사항 흐름 변수에 값을 할당합니다. 변수가 없으면 <AssignVariable>가 변수를 만듭니다.
<IgnoreUnresolvedVariables> 선택사항 해결되지 않은 변수가 발생하면 처리를 중지할지 여부를 결정합니다.

각 하위 요소는 다음 섹션에 설명되어 있습니다.

다음 예시에서는 AssignMessage 정책을 사용할 수 있는 몇 가지 방법을 보여줍니다.

다음 예시에서는 <Add> 요소가 있는 요청에 헤더를 추가합니다.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

다음 예시에서는 <Remove> 요소가 있는 응답에서 페이로드를 삭제합니다.

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

다음 예시에서는 헤더를 추가하여 기존 응답 객체를 수정합니다.

<AssignMessage name="AM-modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

이 예시에서는 새 메시지를 만들지 않습니다. 대신 HTTP 헤더를 추가하여 기존 응답 메시지를 수정합니다.

이 예시에서는 <AssignTo> 요소의 변수 이름으로 response를 지정하므로 이 정책은 대상 서버에서 반환된 데이터로 원래 설정된 응답 객체를 수정합니다.

이 정책에 의해 응답 메시지에 추가된 HTTP 헤더는 LookupCache 정책에 의해 채워진 변수에서 파생됩니다. 따라서 이 Assign Message 정책에 의해 수정된 응답 메시지에는 캐시에서 결과를 가져왔는지 여부를 나타내는 HTTP 헤더가 포함됩니다. 응답에서 헤더를 설정하면 디버깅 및 문제 해결에 유용할 수 있습니다.

Assign Message를 사용하여 응답 페이로드와 요청 메시지의 페이로드에 동적 콘텐츠를 삽입할 수 있습니다.

XML 페이로드에 Edge 흐름 변수를 삽입하려면 지정된 변수를 중괄호로 래핑합니다(예: {prefix.name}).

다음 예시에서는 user-agent HTTP 헤더 흐름 변수의 값을 User-agent라는 XML 요소에 삽입합니다.

<AssignMessage name="AM-set-dynamic-content">
  <AssignTo>response</AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false
  </IgnoreUnresolvedVariables>
</AssignMessage>

JSON 페이로드의 경우 다음 예시와 같이 구분 기호가 있는 variablePrefixvariableSuffix 속성을 사용하여 변수를 삽입할 수 있습니다.

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

흐름 변수의 전체 목록은 흐름 변수 참조를 확인하세요.

클라우드 출시 버전 16.08.17부터 중괄호를 사용하여 변수를 삽입할 수도 있습니다.

다음 예시에서는 요청에서 apikey 쿼리 매개변수를 삭제합니다.

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

사용자 인증에 VerifyAPIKey 정책을 사용할 때 요청 메시지에서 apikey 쿼리 매개변수를 제거하는 것이 좋습니다. 민감한 키 정보가 백엔드 대상으로 전달되지 않도록 하려면 이 작업을 수행합니다.

다음 예시에서는 세 가지 Assign Message 정책을 사용합니다.

  1. 요청에 정적 값을 사용하여 세 개의 흐름 변수를 만듭니다.
  2. 요청 흐름의 두 번째 정책에서 흐름 변수를 동적으로 가져옵니다.
  3. 응답의 페이로드에 흐름 변수를 설정합니다.
<!-- Policy #1: Set variables in the request -->

<AssignMessage name="AM-set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
</AssignMessage>

첫 번째 정책에서 <AssignVariable> 요소는 요청에 세 개의 변수를 만들고 설정합니다. 각 <Name> 요소는 변수 이름을 지정하고 <Value>는 값을 지정합니다.

두 번째 정책은 <AssignVariable> 요소를 사용하여 값을 읽고 새 변수 3개를 만듭니다.

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

두 번째 정책에서 <Ref> 요소는 소스 변수를 참조하고 <Name> 요소는 새 변수의 이름을 지정합니다. <Ref> 요소에서 참조하는 변수에 액세스할 수 없는 경우 <Value> 요소로 지정된 값을 사용할 수 있습니다.

이 정책 집합을 사용해 보려면 다음 안내를 따르세요.

  1. 요청 흐름에 정책 #1과 #2를 추가합니다. 정책 #2 에 정책 #1을 넣어야 합니다.
  2. 응답 흐름에서 세 번째 정책을 추가합니다.
  3. 세 번째 정책은 <Set> 요소를 사용하여 응답에 변수를 추가합니다. 다음 예시에서는 Edge가 클라이언트에 반환하는 응답에서 XML 페이로드를 구성합니다.
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true
      </IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>

    <Set>의 흐름 변수에 액세스하는 구문은 변수를 중괄호로 묶는 것입니다.

    <Payload> 요소의 contentType 속성을 'application/xml'로 설정해야 합니다.

  4. API 프록시에 요청을 보냅니다. 예를 들면 다음과 같습니다.
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    필요한 경우 XML이 올바른 형식의 구조로 표시되도록 xmllint와 같은 유틸리티를 통해 결과를 파이핑할 수 있습니다.

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    응답 본문은 다음과 같이 표시됩니다.

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

다음 예시에서는 ServiceCallout 정책이 API 프록시 요청에 있으며 콜아웃 응답에 동일한 이름(Set-Cookie)의 헤더가 여러 개 포함되어 있다고 가정합니다. 서비스 콜아웃의 응답 변수가 기본값 calloutResponse라고 가정하면 다음 정책에서 두 번째 Set-Cookie 헤더 값을 가져옵니다.

<AssignMessage name="AM-Payload-from-SC-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

모든 헤더 값을 나열하려면 다음 변수를 대신 사용합니다.

{calloutResponse.header.Set-Cookie.values}

이 참조의 각 하위 요소에는 추가 예시가 있습니다. 더 많은 예시는 GitHub의 AssignMessage 예시를 참조하세요.

하위 요소 참조

이 섹션에서는 <AssignMessage>의 하위 요소를 설명합니다.

<Add>

<AssignTo> 요소에서 지정하는 요청 또는 응답에 정보를 추가합니다.

<Add> 요소는 원본 메시지에 존재하지 않는 메시지에 새 속성을 추가합니다. 기존 속성 값을 변경하려면 <Set> 요소를 사용합니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 복합 유형
상위 요소 <AssignMessage>
하위 요소 <FormParams>
<Headers>
<QueryParams>

<Add> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

다음 예시에서는 <FormParams> 요소를 사용하여 초기 요청에서 세 개의 쿼리 문자열 매개변수 값을 가져와 대상 엔드포인트 요청의 양식 매개변수로 설정합니다.

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

다음 예시에서는 <Headers> 요소를 사용하여 대상 엔드포인트에 전송되는 요청에 partner-id 헤더를 추가합니다.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

다음 예시에서는 <QueryParams> 요소를 사용하여 정적 값이 있는 단일 쿼리 매개변수를 요청에 추가합니다.

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

이 예시에서는 요청 preflow에서 <Add>를 사용합니다. Trace 도구와 같은 도구에서 결과를 살펴보면 https://example-target.com/get에 대한 요청은 https://example-target.com/get?myParam=42가 됩니다.

<Add>의 하위 요소는 메시지 템플릿이라는 동적 문자열 대체를 지원합니다.

<FormParams>(<Add>의 하위 요소)

요청 메시지에 새 양식 매개변수를 추가합니다. 이 요소는 응답에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <FormParam> 요소의 배열
상위 요소 <Add>
하위 요소 <FormParam>

<FormParams> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

다음 예시에서는 단일 양식 매개변수('answer')와 정적 값('42')을 요청에 추가합니다.

<AssignMessage name="AM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

다음 예시에서는 name 쿼리 매개변수의 값을 가져오고 이를 요청에 양식 매개변수로 추가한 후 쿼리 매개변수를 삭제합니다.

<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</AssignMessage>

이 예시에서는 <AssignTo>로 대상을 지정하지 않습니다. 이 정책은 요청에만 매개변수를 추가합니다.

다음 예시에서는 요청에 여러 양식 매개변수를 추가합니다.

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

이 예시에서는 원래 요청에서 쿼리 문자열 매개변수를 가져와서 이름이 다른 양식 매개변수로 추가합니다. 그런 후 원래 쿼리 매개변수를 삭제합니다. Apigee가 수정된 요청을 대상 엔드포인트에 전송합니다.

Trace 도구를 사용하여 흐름을 살펴볼 수 있습니다. 요청 본문에 쿼리 문자열 매개변수로 원래 전달된 URL 인코딩 양식 데이터가 포함되어 있습니다.

username=nick&zip_code=90210&default_language=en

다음 기준을 충족하는 경우에만 <FormParams>를 사용할 수 있습니다.

  • HTTP 동사: POST
  • 메시지 유형: 요청
  • 다음 중 하나(또는 둘 다):
    • 양식 데이터: 일부 값 또는 ""(빈 문자열)로 설정합니다. 예를 들어 curl를 사용하여 요청에 -d ""를 추가합니다.
    • Content-Length 헤더: 0으로 설정합니다(원래 요청에 데이터가 없는 경우, 그렇지 않은 경우에는 바이트 단위의 현재 길이). 예를 들어 curl를 사용하여 요청에 -H "Content-Length: 0"를 추가합니다.

예를 들면 다음과 같습니다.

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

<FormParams>를 추가하면 Edge는 메시지를 대상 서비스에 보내기 전에 요청의 Content-Type 헤더를 'application/x-www-form-urlencoded'로 설정합니다.

<Headers>(<Add>의 하위 요소)

지정된 요청 또는 응답에 <AssignTo> 요소로 지정된 새 헤더를 추가합니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <Header> 요소의 배열
상위 요소 <Add>
하위 요소 <Header>

<Headers> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

다음 예시에서는 partner-id 헤더를 요청 메시지에 추가하고 verifyapikey.VAK-1.developer.app.partner-id 흐름 변수의 값을 이 헤더에 할당합니다.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

<QueryParams>(<Add>의 하위 요소)

요청에 새 쿼리 매개변수를 추가합니다. 이 요소는 응답에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <QueryParam> 요소의 배열
상위 요소 <Add>
하위 요소 <QueryParam>

<QueryParams> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

다음 예시에서는 쿼리 매개변수 'myParam'을 요청에 추가하고 여기에 값 '42'를 할당합니다.

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

다음 기준이 충족되는 경우에만 <QueryParams>를 사용할 수 있습니다.

  • HTTP 동사: GET
  • 메시지 유형: 요청

또한 <AssignTo> 요소의 type 속성이 요청 메시지인 경우에만 쿼리 매개변수를 설정할 수 있습니다. 응답에 설정해도 효과가 없습니다.

정책(<Add><QueryParams/></Add>)에서 빈 쿼리 매개변수 배열을 정의하면 정책에서 쿼리 매개변수를 추가하지 않습니다. 이는 <QueryParams>를 생략하는 것과 같습니다.

<AssignTo>

AssignMessage 정책이 작동하는 객체를 결정합니다. 옵션:

  • 요청 메시지: API 프록시에서 수신한 request
  • 응답 메시지: 대상 서버에서 반환된 response
  • 커스텀 메시지: 커스텀 요청 또는 응답 객체

경우에 따라 AssignMessage 정책이 실행되는 객체를 변경할 수 없습니다. 예를 들어 <Add> 또는 <Set>를 사용하여 응답에서 쿼리 매개변수(<QueryParams>) 또는 양식 매개변수(<FormParams>)를 추가하거나 변경할 수 없습니다. 개발자는 요청에서 쿼리 매개변수 및 양식 매개변수만 조작할 수 있습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 문자열
상위 요소 <AssignMessage>
하위 요소 없음

<AssignTo>를 지정하지 않거나 <AssignTo> 요소를 지정하지만 요소의 텍스트 값을 지정하지 않으면 정책이 실행되는 위치에 따라 기본 요청 또는 응답에 정책이 적용됩니다. 정책이 요청 흐름에서 실행되면 요청 메시지에 영향을 미칩니다. 응답 흐름에서 실행되는 경우 정책은 기본적으로 응답에 영향을 미칩니다.

<AssignTo> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

다음 예시에서는 대상이 대상 엔드포인트로 전송될 원래 요청임을 지정합니다.

<AssignMessage name="assignto-1">
<!-- DO NOT do this -->
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

다음 예시에서는 새 요청 객체를 만듭니다.

<AssignMessage name="AM-assignto-2"> 
  <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> 
</AssignMessage>

새 요청이나 응답 객체를 만들면 AssignMessage 정책의 다른 요소 (예: <Add>, <Set>, <Copy>)가 해당 새 요청 객체에 적용됩니다.

흐름의 뒷부분에서 다른 정책의 새 요청 객체에 액세스하거나 ServiceCallout 정책을 사용하여 외부 서비스에 새 요청 객체를 전송할 수 있습니다.

다음 예시에서는 'MyRequestObject'라는 새 요청 객체를 만듭니다.

<AssignMessage name="assign>to-<2"
  AssignTo createNew="true" transport=&&quot;http" ty&pe="req>u<est"gt;My>RequestObjectlt;/AssignTo
/AssignMessage

새 요청이나 응답 객체를 만들면 AssignMessage 정책의 다른 요소 (예: <Add>, <Set>, <Copy>)가 해당 새 요청 객체에 적용됩니다.

흐름의 뒷부분에서 다른 정책의 새 요청 객체에 액세스하거나 ServiceCallout 정책을 사용하여 외부 서비스에 새 요청 객체를 전송할 수 있습니다.

다음 표는 <AssignTo>의 속성을 설명합니다.

속성 설명 필수 여부 유형
createNew

값을 할당할 때 이 정책이 새 메시지를 만들지 여부를 결정합니다.

'true'일 경우 정책은 type로 지정된 유형의 새 변수('요청' 또는 '응답')를 만듭니다. 새 변수의 이름을 지정하지 않으면 정책은 type 값을 기준으로 새 요청 또는 응답 객체를 만듭니다.

'false'인 경우 정책은 다음 두 가지 방법 중 하나로 응답합니다.

  • <AssignTo>가 변수 이름을 요청 또는 응답으로 확인할 수 있는 경우 처리가 계속 진행됩니다. 예를 들어 정책이 요청 흐름에 있는 경우 변수는 요청 객체입니다. 정책이 응답에 있는 경우 변수는 응답 객체입니다.
  • <AssignTo>를 확인할 수 없거나 메시지가 아닌 유형으로 확인되는 경우 정책에 오류가 발생합니다.

createNew를 지정하지 않으면 정책이 다음 두 가지 방법 중 하나로 응답합니다.

  • <AssignTo>의 텍스트 값이 메시지로 확인되면 처리는 다음 단계로 진행됩니다.
  • <AssignTo>의 텍스트 값을 확인할 수 없거나 메시지 외의 유형으로 확인될 경우 type에 지정된 유형의 새 변수가 생성됩니다.
선택사항 불리언
transport

요청 또는 응답 메시지 유형의 전송 유형을 지정합니다.

기본값은 'http'(지원되는 유일한 값)입니다.

선택 문자열
type createNew가 'true'인 경우 새 메시지의 유형을 지정합니다. 유효한 값은 'request' 또는 'response'입니다.

이 속성을 생략하면 Edge는 이 정책이 실행되는 흐름의 위치에 따라 요청 또는 응답을 작성합니다.

선택사항 문자열

<AssignVariable>

흐름 변수에 값을 할당합니다. 흐름 변수가 없으면 <AssignVariable>이 변수를 만듭니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 복합 유형
상위 요소 <AssignMessage>
하위 요소 <Name> (필수)
<Ref>
<Template>
<Value>

흐름 변수에 할당하는 값은 다음 중 하나일 수 있습니다.

  • 리터럴 문자열: <Value> 하위 요소를 사용하여 흐름 변수의 리터럴 문자열 값을 지정합니다.
  • 흐름 변수: <Ref> 하위 요소를 사용하여 대상 흐름 변수의 기존 흐름 변수 값을 지정합니다. 소스로 사용할 수 있는 흐름 변수의 전체 목록은 흐름 변수 참조를 확인하세요.
  • 메시지 템플릿: <Template> 하위 요소를 사용하여 삽입할 메시지 템플릿을 지정하여 대상 흐름 변수에 배치할 값을 가져옵니다.

<AssignVariable> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   >Namevariable_na<me/N>ame
 <   Refso>urce_variable/Re<f
    Tem>platemessage<_template/Template
    or
    Te><mplate re>f=<9;tem>plate_variable<'/>Tem<plate
    Value>v<ariable_value/>Value
  /AssignVariable
/AssignMessage

<Ref> 요소를 사용하여 소스 변수를 지정합니다. <Ref>에서 참조되는 변수에 액세스할 수 없는 경우 Edge는 <Value> 요소로 지정된 값을 사용합니다. <Template>을 정의하면 이는 다른 하위 요소보다 우선합니다.

다음 예시에서는 새 변수 myvar의 값을 리터럴 값 '42'로 설정합니다.

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

다음 예시에서는 흐름 변수 request.header.user-agent 값을 대상 흐름 변수 myvar에 지정하고 쿼리 매개변수 country 값을 대상 흐름 변수 Country에 지정합니다.

<AssignMessage name="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

할당 중 하나가 실패하면 Edge는 대신 'ErrorOnCopy' 값을 대상 흐름 변수에 할당합니다.

myvar 또는 Country 흐름 변수가 없으면 <AssignVariable>은 변수를 생성합니다.

다음 예시에서는 <Template> 하위 요소를 사용하여 두 개의 컨텍스트 변수 사이를 리터럴 문자열(하이픈)로 연결합니다.

<AssignMessage name='AV-via-templat>e-1<'
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    >Template{system.uuid}-{me<ssageid}/>Tem<plate
  /Assign>V<ariable
/Assig>nMessage

<AssignVariable>의 일반적인 용도는 요청과 함께 전달할 수 있는 쿼리 매개변수, 헤더, 기타 값의 기본값을 설정하는 것입니다. 이 작업은 <Ref><Value> 하위 요소의 조합으로 수행됩니다. 자세한 내용은 <Ref>의 예시를 참조하세요.

<Name>(<AssignVariable>의 하위 요소)

대상 흐름 변수의 이름을 지정합니다 (예: AssignMessage 정책에 의해 값이 설정된 변수). <AssignVariable>에 지정된 변수가 없으면 정책이 해당 이름으로 변수를 만듭니다.

기본값 해당 사항 없음
필수 여부 필수
유형 문자열
상위 요소 <AssignVariable>
하위 요소 없음

<Name> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble<
    Namevariab>l<e_name/Name
  >/AssignVariable
/AssignMessage

다음 예시에서는 대상 변수를 myvar로 지정하고 리터럴 값 '42'로 설정합니다.

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

myvar가 없는 경우 <AssignVariable>이 만듭니다.

<Ref>(<AssignVariable>의 하위 요소)

할당 소스를 흐름 변수로 지정합니다. 흐름 변수는 사전 정의된 흐름 변수(흐름 변수 참조에 나열됨) 중 하나이거나 사용자가 생성한 커스텀 흐름 변수일 수 있습니다.

<Ref> 값은 항상 흐름 변수로 해석됩니다. 값으로 리터럴 문자열을 지정할 수 없습니다. 리터럴 문자열 값을 할당하려면 <Value> 요소를 대신 사용하세요.

기본값 해당 사항 없음
필수 여부 선택사항
유형 문자열
상위 요소 <AssignVariable>
하위 요소 없음

<Ref>를 사용하여 흐름 변수를 지정할 때는 일반적으로 흐름 변수를 참조하는 데 사용하는 대괄호 '{}'를 생략합니다. 예를 들어 새 변수의 값을 client.host 흐름 변수의 값으로 설정하려면 다음 안내를 따르세요.

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

대상 흐름 변수의 기본값을 정의하려면 <Value><Ref>와 함께 사용합니다. <Ref>로 지정된 흐름 변수가 존재하지 않거나 읽을 수 없거나 null인 경우 Edge가 <Value> 값을 대상 흐름 변수에 대신 할당합니다.

<Ref> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   >Namevariable_na<me/N>ame<
    Refsource_>v<ariable/Ref
  >/AssignVariable
/AssignMessage

다음 예시에서는 흐름 변수 request.header.user-agent 값을 대상 흐름 변수 myvar에 할당하고 쿼리 매개변수 country 값을 Country 변수에 할당합니다.

<AssignMessage name="assignvariab>le-<4"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-ag<ent/Ref
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>oun<try/Ref
  /Assi>g<nVariable
/Ass>ignMessage

이 예시에서 Edge에는 두 할당에 대해 지정된 기본값 (또는 대체 값)이 없습니다.

다음 예시에서는 흐름 변수 request.header.user-agent 값을 대상 흐름 변수 myvar에 할당하고 쿼리 매개변수 country 값을 Country 변수에 할당합니다.

<AssignMessage name="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

이 예시에서 request.header.user-agent 흐름 변수 또는 Country 쿼리 매개변수의 값이 null이거나 읽을 수 없거나 형식이 잘못된 경우 Edge는 'ErrorOnCopy' 값을 새 변수에 할당합니다.

<AssignVariable>의 일반적인 사용 사례는 요청과 함께 전달할 수 있는 쿼리 매개변수, 헤더, 기타 값의 기본값을 설정하는 것입니다. 예를 들어 요청에 'w'라는 단일 쿼리 매개변수를 사용하는 Weather API 프록시를 만듭니다. 이 매개변수에는 날씨를 표시할 도시의 ID가 포함됩니다. 요청 URL의 형식은 다음과 같습니다.

http://myCO.com/v1/weather/forecastrss?w=city_ID

'w'의 기본값을 정의하려면 다음과 같이 AssignMessage 정책을 만듭니다.

<AssignMessage continueOnError="false" enabled="true" nam>e=&<quot;assignvariable-3"
  AssignTo createNew="fals>e&q<uot; transport="http>" <type="request"/
>  I<gnoreUnresolve>dVari<able>strue
  /IgnoreUnres<olved>Varia<ble>s
  AssignVariable
 <   N>amere<quest>.querypa<ram.w/>Nam<e
    Refreques>t<.queryparam.w/>Ref
    Value12797282/Value
  /AssignVariable
/AssignMessage

이 예시에서 <AssignVariable>request.queryparam.w 값을 가져와서 자체에 할당합니다. 흐름 변수가 null인 경우 요청에서 'w' 쿼리 매개변수가 생략된 경우에 이 예시에서는 <Value> 요소의 기본값을 사용합니다. 따라서 이 API 프록시에 'w' 쿼리 매개변수를 생략하는 요청을 할 수 있습니다.

http://myCO.com/v1/weather/forecastrss

...그리고 API 프록시가 유효한 결과를 반환하도록 합니다.

<Value>를 사용할 때와 달리 <Ref>의 값은 request, response, target 객체의 속성과 같은 흐름 변수여야 합니다. 이 값은 생성한 커스텀 흐름 변수일 수도 있습니다.

<Ref> 값에 존재하지 않는 흐름 변수를 지정하고 <IgnoreUnresolvedVariables> 값이 'true'인 경우 Edge에서 오류가 발생합니다.

<Template>(<AssignVariable>의 하위 요소)

메시지 템플릿을 지정합니다. 메시지 템플릿을 사용하면 정책이 실행될 때 변수 문자열 대체를 수행할 수 있으며 리터럴 문자열을 중괄호로 묶인 변수 이름과 결합할 수 있습니다. 또한 메시지 템플릿은 이스케이프 및 케이스 변환과 같은 함수를 지원합니다.

ref 속성을 사용하여 변수 값이 메시지 템플릿인 흐름 변수를 지정합니다. 예를 들어 메시지 템플릿을 개발자 앱의 맞춤 속성으로 저장할 수 있습니다. Edge에서 API 키 또는 보안 토큰을 확인한 후 (추가 정책을 통해) 개발자 앱을 식별하면 <AssignVariable> 요소는 보안 정책에서 흐름 변수로 사용할 수 있는 앱의 맞춤 속성에서 메시지 템플릿을 사용할 수 있습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 문자열
상위 요소 <AssignVariable>
하위 요소 없음

<Template> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e" >
  AssignVariabl<e
    Tem>platemessage<_template/Template
    or
    Te><mplate re>f=&<#39;template_va>r<iable'/Tem>plate
  /AssignVariable
/AssignMessage

다음 예시에서는 메시지 템플릿 문법을 사용하여 두 개의 컨텍스트 변수 사이를 리터럴 문자열(하이픈)로 연결합니다.

<AssignMessage name='AV-via-templat>e-1<'
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    >Template{system.uuid}-{me<ssageid}/>Tem<plate
  /Assign>V<ariable
/Assig>nMessage

다음 예시에서는 흐름 변수를 지정합니다. 여기서 변수 값은 사전 정의된 메시지 템플릿입니다. 정책을 수정할 필요 없이 런타임에 사전 정의된 템플릿을 삽입하려면 이 옵션을 사용하세요.

<AssignMessage name='AV-via-template-indirec>tly&#<39;  
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    Template ref='my_templat>e_v<ariable'/
 > </AssignVariabl>e
/AssignMessage

다음 예시에서는 흐름 변수와 텍스트 값을 지정합니다. 이 경우 참조된 변수가 null이 아닌 경우 해당 값이 템플릿으로 사용됩니다. 참조된 값이 null이면 텍스트 값(이 경우 {system.uuid}-{messageid})이 템플릿으로 사용됩니다. 이 패턴은 동적으로 설정된 값으로 기본 템플릿(텍스트 부분)을 재정의하려는 경우 '재정의' 값을 제공하는 데 유용합니다. 예를 들어 조건문은 키-값 맵에서 값을 가져와 참조된 변수를 해당 값으로 설정할 수 있습니다.

<AssignMessage name='AV-template-with-fallb>ack<' 
 IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    Template ref='>my_variable'{system.u<uid}-{mes>sag<eid}/Template
 > </AssignVariabl>e
/AssignMessage

<Value>(<AssignVariable>의 하위 요소)

<AssignVariable>로 설정된 대상 흐름 변수의 값을 정의합니다. 값은 항상 리터럴 문자열로 해석됩니다. 값을 대괄호('{}')로 래핑하더라도 흐름 변수를 값으로 사용할 수 없습니다. 흐름 변수를 사용하려면 <Ref>를 대신 사용하세요.

기본값 해당 사항 없음
필수 여부 선택사항
유형 문자열
상위 요소 <AssignVariable>
하위 요소 없음

<Ref> 요소와 함께 사용하면 <Value>가 기본(또는 대체) 값 역할을 합니다. <Ref>를 지정하지 않거나 확인할 수 없거나 null인 경우 <Value> 값이 사용됩니다.

<Value> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   Na>mevariable_nam<e/Name>
  <  Valuevariable>_<value/Value
  >/AssignVariable
/AssignMessage

다음 예시에서는 대상 흐름 변수 myvar의 값을 리터럴 값 '42'로 설정합니다.

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

다음 예시에서는 흐름 변수 request.header.user-agent 값을 흐름 변수 myvar에 할당하고 쿼리 매개변수 country 값을 Country 변수에 할당합니다.

<AssignMessage name="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

할당 작업 중 하나가 실패하는 경우 <AssignVariable>는 대신 대상 흐름 변수에 'ErrorOnCopy' 값을 할당합니다.

<Copy>

source 속성으로 지정된 메시지에서 <AssignTo> 요소로 지정된 메시지 값을 복사합니다. <AssignTo>로 대상을 지정하지 않으면 이 정책은 이 정책이 실행되는 흐름의 위치에 따라 요청 또는 응답에 값을 복사합니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 문자열
상위 요소 <AssignMessage>
하위 요소 <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

<Copy> 요소 아래에 하위 요소를 지정하지 않으면 지정된 소스 메시지의 모든 부분이 복사됩니다.

<Copy> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > name<="policy_name" 
    Co>py so<urce="[request|response]&qu<ot;
    !--> Can also <be an empt>y array< (FormParams/) -->
    FormP>arams
      For<mParam nam>e="formpar<am_name&quo>t;for<mparam_value/FormParam
      ...<
    /Fo>rmParams
 <   !-- >Can als<o be an empty array (Head>ers/) --><
    He>aders
      Hea<der name>=&quo<t;he>ader_name&qu<ot;he>ader_<value/H>eader
      <...
    >/Head<ers
    Path[false|true]/Path
  <  Payload[fa>lse|true]/<Payload
   > !-- Ca<n also be an empty array (QueryPa>rams/) -->
  <  QueryPara>ms
      QueryP<aram name=&q>uot;q<ueryparam_na>me"quer<yparam_value/>Query<Param
    >  ...
    /Q<ueryParams<>/span>
    R<easo>nPhrase[fals<e|tru>e]/Re<asonPhr>ase
    Stat<usCode[f>als<e|tru>e]/<StatusCode
    Verb[false|true]/Verb<
   > Version[f>als<e|true]/Version
  /Copy
  !-- Used as the destination for the Copy values --
  A>ssignTo createNew="[<true|fals>e<]" transp>ort="http"
    type="[request|response]"destination_variable_name/AssignTo
/AssignMessage
  

다음 예시에서는 헤더, 세 가지 양식 매개변수, 경로, 모든 쿼리 매개변수를 request 메시지에서 newRequest라는 새 커스텀 요청으로 복사합니다.

<AssignMessage name="AM-co>py-<1"
  AssignTo createNew="true" transport=&>quot;http&<quot; typ>e=&<quot;request"new>Reque<st/Assi>gnTo
  <Copy source="request&qu>ot;
 <   Heade>rs
  <    Header> name=&<quot;Header_Name_1"/
    /Head>ers
   < FormParams
      FormParam name=&q>uot;For<m_Param_Name_1"/
      FormPar>am na<me="Fo>rm_Pa<ram_>Name<_2&qu>ot;/
<      FormPa>ram< name>=<"Form_Par>am_Name_3"/
    /FormParams
    Pathtrue/Path
    QueryParams/
  /Copy
/AssignMessage

<Payload><Verb>와 같은 요소가 없으므로 정책에서 메시지의 해당 부분을 복사하지 않습니다.

다음 예시에서는 먼저 기존 response 메시지의 모든 값을 삭제한 후 secondResponse라는 다른 메시지의 모든 값을 response 메시지에 복사합니다.

<AssignMessage name='AM-Copy-Respo>nse<'
  AssignTo createNew="false" transport=&quo>t;http&q<uot; type>=&q<uot;response"response/AssignTo
  !>-- <first r>emo<ve any existing values --
  Remove/
  !-- then copy eve>ryt<hing from the designated mess>a<ge --
  Copy s>ource="secondResponse"/
/AssignMessage

<Copy> 요소에는 단일 속성이 있습니다.

속성 설명 필수 여부 유형
source

사본의 소스 객체를 지정합니다.

  • source를 지정하지 않으면 기본값은 message이며 정책이 실행되는 흐름에 따라 다른 값이 사용됩니다. 정책이 요청 흐름 내에서 실행되면 message 변수는 request 객체를 참조합니다. 정책이 응답 흐름 내에서 실행되면 message 변수는 response 객체를 참조합니다.
  • 소스 변수를 확인할 수 없거나 메시지가 아닌 유형으로 확인되는 경우 <Copy>가 응답하지 않습니다.
선택 문자열

<FormParams>(<Copy>의 하위 요소)

<Copy> 요소의 source 속성으로 지정된 요청에서 <AssignTo> 요소로 지정된 요청으로 양식 매개변수를 복사합니다. 이 요소는 응답에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <FormParam> 요소의 배열 또는 빈 배열
상위 요소 <Copy>
하위 요소 <FormParam>

<FormParams> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    !--> Can also <be an empt>y array< (FormParams/) -->
    FormP>arams
      For<mParam nam>e="formpar<am_name&quo>t;f<ormpa>r<am_value/FormP>aram
      ...
    /FormParams
  /Copy
/AssignMessage

다음 예시에서는 단일 양식 매개변수를 요청에서 커스텀 요청 'MyCustomRequest'로 복사합니다.

<AssignMessage name="copy-formpara>ms-<1"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      FormPa>ram name="par<amName&quo>t;For<m param val>ue <1/For>mPa<ram
    /FormParams
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

다음 예시에서는 모든 양식 매개변수를 커스텀 요청 'MyCustomRequest'에 복사합니다.

<AssignMessage name="copy-formpara>ms-<2"
  Copy source>=&quo<t;request&q>uot<;
   > Fo<rmParams/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

다음 예시에서는 세 가지 양식 매개변수를 커스텀 요청 'MyCustomRequest'에 복사합니다.

<AssignMessage name="copy-formpara>ms-<3"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      FormPara>m name=<"paramName1"/
    >  FormP<aram name="paramName2&q>uot;/<
      Form>Par<am na>me=<"paramName3"/
    /FormParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

이름이 같은 양식 매개변수가 여러 개 있는 경우 다음 문법을 사용하세요.

<AssignMessage name="copy-formpara>ms-<4"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      >FormPar<am name="f1&quo>t;/
   <   FormParam name=&quo>t;f2&<quot;/
    >  F<ormPa>ram< name="f3.2"/
    /FormParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

이 예시에서는 'f1', 'f2', 'f3'의 두 번째 값을 복사합니다. 'f3'에 값이 하나만 있는 경우 복사되지 않습니다.

다음 기준이 충족되는 경우에만 <FormParams>를 사용할 수 있습니다.

  • HTTP 동사: POST
  • 메시지 유형: 응답
  • 다음 중 하나(또는 둘 다):
    • 양식 데이터: 일부 값 또는 ""(빈 문자열)로 설정합니다. 예를 들어 curl를 사용하여 요청에 -d ""를 추가합니다.
    • Content-Length 헤더: 0으로 설정합니다(원래 요청에 데이터가 없는 경우, 그렇지 않은 경우에는 현재 길이). 예를 들어 curl를 사용하여 요청에 -H "Content-Length: 0"를 추가합니다.

<FormParams>를 복사하면 <Copy>는 메시지를 대상 서비스로 보내기 전에 메시지의 Content-Type을 'application/x-www-form-urlencoded'로 설정합니다.

<Headers>(<Copy>의 하위 요소)

<Copy> 요소의 source 속성으로 지정된 요청 또는 응답 메시지에서 <AssignTo> 요소로 지정된 요청 또는 응답 메시지 HTTP 헤더를 복사합니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <Header> 요소의 배열 또는 빈 배열
상위 요소 <Copy>
하위 요소 <Header>

<Headers> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    >!-- Can al<so be a>n empty< array (Headers/) -->
>    Headers
<      H>eader name=&quo<t;header>_na<me&qu>o<t;header_value>/Header
      ...
    /Headers
  /Copy
/AssignMessage

다음 예시에서는 user-agent 헤더를 요청에서 새로운 커스텀 요청 객체로 복사합니다.

<AssignMessage name="copy-heade>rs-<1"
  Copy source>=&quo<t;reque>st"<;
    Headers
      Heade>r nam<e=">use<r-age>nt&<quot;/
    /Headers
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

모든 헤더를 복사하려면 다음 예시와 같이 빈 <Headers> 요소를 사용합니다.

<AssignMessage name="copy-heade>rs-<2"
  Copy source>=&quo<t;reques>t&q<uot;<>/span>
   < Headers/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

이름이 같은 헤더가 여러 개 있는 경우 다음 문법을 사용합니다.

<AssignMessage name="copy-heade>rs-<3"
  Copy source>=&quo<t;reque>st"<;
    Headers
   >   Head<er name="h1&>quot;/
<      Header name=&>quot;<h2">/
 <     >Hea<der name="h3.2"/
    /Headers
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

이 예시에서는 'h1', 'h2', 'h3'의 두 번째 값을 복사합니다. 'h3'에 값이 하나만 있는 경우 복사되지 않습니다.

<Path>(<Copy>의 하위 요소)

경로를 소스 요청에서 대상 요청으로 복사할지 여부를 결정합니다. 이 요소는 응답에 영향을 미치지 않습니다.

'true'인 경우 이 정책은 <Copy> 요소의 source 속성으로 지정된 요청 메시지에서 <AssignTo> 요소로 지정된 요청 메시지 경로를 복사합니다.

기본값 거짓
필수 여부 선택사항
유형 불리언
상위 요소 <Copy>
하위 요소 없음

<Path> 요소는 다음 문법을 사용합니다.

구문예 1s42
<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
    Path>[false|true]/Path
  /Copy
/AssignMessage

다음 예시에서는 AssignMessage 정책이 소스 요청에서 새 커스텀 요청 객체로 경로를 복사해야 함을 나타냅니다.

<AssignMessage name="copy-pa>th-<1"
  Copy source>=&quo<t;re>ques<t&quo>t;
<    P>ath<true/Path
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

다음 기준을 충족하는 경우에만 <Path>를 사용할 수 있습니다.

  • 메시지 유형: 요청

<Payload>(<Copy>의 하위 요소)

페이로드를 소스에서 대상으로 복사해야 하는지 여부를 결정합니다. 소스와 대상은 요청 또는 응답일 수 있습니다.

'true'인 경우 이 정책은 <Copy> 요소의 source 속성에 지정된 메시지에서 <AssignTo> 요소에 지정된 메시지 페이로드를 복사합니다.

기본값 거짓
필수 여부 선택사항
유형 불리언
상위 요소 <Copy>
하위 요소 없음

<Payload> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
<    Payload[fa>lse|true]/Payload
  /Copy
/AssignMessage

다음 예시에서는 요청 페이로드가 요청에서 응답으로 복사되도록 <Payload>를 'true'로 설정합니다.

<AssignMessage name="AM-copy-paylo>ad-<1"
  Copy source>=&quo<t;reque>st&q<uot;
   > Pa<yload>tru<e/Payloa>d
  /Cop<y
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

<QueryParams>(<Copy>의 하위 요소)

<Copy> 요소의 source 속성으로 지정된 요청에서 <AssignTo> 요소로 지정된 요청으로 쿼리 문자열 매개변수를 복사합니다. 이 요소는 응답에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <QueryParam> 요소의 배열 또는 빈 배열
상위 요소 <QueryParam>
하위 요소 없음

<QueryParams> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    !-- >Can also b<e an empty >array (<QueryParams/) --&gt;
    QueryPar>ams
      QueryP<aram name=&>quot;queryparam<_name"q>uer<ypara>m<_value/QueryPa>ram
      ...
    /QueryParams
  /Copy
/AssignMessage

다음 예시에서는 요청의 'my_param' 쿼리 매개변수를 새 커스텀 요청 객체로 복사합니다.

<AssignMessage name="copy-querypara>ms-<1"
  Copy source>=&quo<t;request&q>uot;
  <  QueryParams
      QueryPa>ram n<ame="my>_pa<ram&q>uot<;/
    /QueryParams
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

다음 예시에서는 요청의 모든 쿼리 매개변수를 새 커스텀 요청 객체로 복사합니다.

<AssignMessage name="copy-querypara>ms-<2"
  Copy source>=&quo<t;request&qu>ot;<
    >Que<ryParams/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

이름이 같은 쿼리 매개변수가 여러 개 있는 경우 다음 문법을 사용하세요.

<AssignMessage name="copy-querypara>ms-<3"
  Copy source>=&quo<t;request&q>uot;
  <  QueryParams
      Qu>eryPara<m name="qp1">/
     < QueryParam name="q>p2&qu<ot;/
      Q>uer<yPara>m n<ame="qp3.2"/
    /QueryParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

이 예시에서는 'qp1', 'qp2', 'qp3'의 두 번째 값을 복사합니다. 'qp3'에 값이 하나만 있는 경우 복사되지 않습니다.

다음 기준이 충족되는 경우에만 <QueryParams>를 사용할 수 있습니다.

  • HTTP 동사: GET
  • 메시지 유형: 요청

<ReasonPhrase>(<Copy>의 하위 요소)

이유 구문을 소스 응답에서 대상 응답으로 복사해야 하는지 여부를 결정합니다. 이 요소는 요청에 영향을 미치지 않습니다.

'true'인 경우 이 정책은 <Copy> 요소의 source 속성으로 지정된 응답에서 <AssignTo> 요소로 지정된 응답으로 ReasonPhrase을 복사합니다.

기본값 거짓
필수 여부 선택사항
유형 불리언
상위 요소 <Copy>
하위 요소 없음

<ReasonPhrase> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[>request|resp<onse]"
 >   <Reaso>n<Phrase[false|t>rue]/ReasonPhrase
  /Copy
/AssignMessage

다음 예시에서는 <ReasonPhrase>true로 설정합니다. 소스 및 <AssignTo> 요소를 지정한 경우 이렇게 하면 <Copy>는 명명된 응답 메시지의 이유 구문을 response 객체에 복사합니다.

<AssignMessage name="AM-copy-reasonphra>se-<1"
  Copy source="serviceC>allou<tResponse&qu>ot;
<    ReasonPhr>ase<true/>Rea<sonPhras>e
  /Cop<y
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

원본 및 대상 메시지가 응답 유형인 경우에만 <ReasonPhrase>를 사용할 수 있습니다.

<StatusCode>(<Copy>의 하위 요소)

상태 코드를 소스 응답에서 대상 응답으로 복사할지 여부를 결정합니다. 이 요소는 요청에 영향을 미치지 않습니다.

'true'인 경우 이 정책은 <Copy> 요소의 source 속성으로 지정된 응답 메시지에서 <AssignTo> 요소로 지정된 응답 메시지 상태 코드를 복사합니다.

기본값 거짓
필수 여부 선택사항
유형 불리언
상위 요소 <Copy>
하위 요소 없음

<StatusCode> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=">;[request|re<sponse]&quo>t;
<    S>t<atusCode[false>|true]/StatusCode
  /Copy
/AssignMessage

다음 예시에서는 <StatusCode>를 'true'로 설정하여 상태 코드를 기본 응답 객체에서 새 커스텀 응답 객체로 복사합니다.

<AssignMessage name="copy-statusco>de-<1"
  Copy source=>"<;response&>quot<;
    Statu>sCo<detru>e/S<tatusCode
  /Copy
  AssignTo createNew="true" tr>ansport="ht<tp" >t<ype="resp>onse"MyCustomResponse/AssignTo
/AssignMessage

원본 및 대상 메시지가 응답 유형인 경우에만 <StatusCode>를 사용할 수 있습니다.

<StatusCode>의 일반적인 용도는 프록시 응답 상태 코드를 대상에서 수신된 값과 다른 값으로 설정하는 것입니다.

<Verb>(<Copy>의 하위 요소)

HTTP 동사를 원래 요청에서 대상 요청으로 복사할지 여부를 결정합니다. 이 요소는 응답에 영향을 미치지 않습니다.

'true'인 경우 <Copy> 요소의 source 속성에 있는 동사를 <AssignTo> 요소에 지정된 요청으로 복사합니다.

기본값 거짓
필수 여부 선택사항
유형 불리언
상위 요소 <Copy>
하위 요소 없음

<Verb> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
    Verb>[false|true]/Verb
  /Copy
/AssignMessage

다음 예시에서는 <Verb>를 'true'로 설정하여 동사를 기본 요청에서 새 커스텀 요청으로 복사합니다.

<AssignMessage name="copy-ve>rb-<1"
  Copy source>=&quo<t;re>ques<t&quo>t;
<    V>erb<true/Verb
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

다음 기준을 충족하는 경우에만 <Verb>를 사용할 수 있습니다.

  • 메시지 유형: 요청

<Version>(<Copy>의 하위 요소)

HTTP 버전을 원래 요청에서 대상 요청으로 복사할지 여부를 결정합니다. 이 요소는 응답에 영향을 미치지 않습니다.

'true'인 경우 <Copy> 요소의 source 속성에 있는 HTTP 버전을 <AssignTo> 요소에서 지정된 객체에 복사합니다.

기본값 거짓
필수 여부 선택사항
유형 불리언
상위 요소 <Copy>
하위 요소 없음

<Version> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
<    Version[fa>lse|true]/Version
  /Copy
/AssignMessage

다음 예시에서는 요청에서 <Version>을 'true'로 설정하여 버전을 기본 요청 객체에서 새 커스텀 요청 객체로 복사합니다.

<AssignMessage name="copy-versi>on-<1"
  Copy source>=&quo<t;reque>st&q<uot;
   > Ve<rsion>tru<e/Version
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

다음 기준이 충족되는 경우에만 <Version>를 사용할 수 있습니다.

  • 메시지 유형: 요청

<DisplayName>

name 속성 외에 이 요소를 사용하여 관리 UI 프록시 편집기에서 자연스러운 다른 이름으로 정책의 라벨을 지정합니다.

<DisplayName> 요소는 모든 정책에 공통으로 적용됩니다.

기본값 해당 사항 없음
필수 여부 선택사항. <DisplayName>을 생략하면 정책의 name 속성 값이 사용됩니다.
유형 문자열
상위 요소 <PolicyElement>
하위 요소 없음

<DisplayName> 요소는 다음 구문을 사용합니다.

구문
<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>
<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

<DisplayName> 요소에 속성 또는 하위 요소가 없습니다.

<IgnoreUnresolvedVariables>

해결되지 않은 변수가 발생하면 처리를 중지할지 여부를 결정합니다.

기본값 거짓
필수 여부 선택사항
유형 불리언
상위 요소 <AssignMessage>
하위 요소 없음

확인되지 않은 변수를 무시하고 계속 처리하려면 true로 설정합니다. 그렇지 않으면 false로 설정합니다. 기본값은 false입니다.

<IgnoreUnresolvedVariables>true로 설정하는 것은 변수의 값을 설정하고 가져온다는 점에서 <AssignMessage>continueOnErrortrue로 설정하는 것과 다릅니다. continueOnErrortrue로 설정하면 Edge는 변수를 사용할 때 발생한 오류뿐만 아니라 모든 오류를 무시합니다.

<IgnoreUnresolvedVariables> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name">; 
  IgnoreUnre<solvedVariables[true|false>]<
  /IgnoreUnre>solvedVariables
/AssignMessage

다음 예시에서는 <IgnoreUnresolvedVariables>를 'true'로 설정합니다.

<AssignMessage name="AM-Set-Hea>der<s&q>uot;
<  Set
 >   Head<ers
      Header name=&#>39;new-header'{possibly<-defin>ed-va<riable}H>ead<er
 >   </Headers
  /Set
  IgnoreU>nresolv<edVariablestrue
  /IgnoreU>n<resolvedVariab>les
/AssignMessage

<IgnoreUnresolvedVariables>true로 설정되기 때문에 possibly-defined-variable 변수가 정의되지 않았으면 이 정책이 오류를 발생시키지 않습니다.

<Remove>

메시지에서 헤더, 쿼리 매개변수, 양식 매개변수 또는 메시지 페이로드를 삭제합니다. 메시지는 요청 또는 응답일 수 있습니다. <AssignTo> 요소를 사용하여 <Remove>가 작동하는 메시지를 지정합니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 복합 유형
상위 요소 <AssignMessage>
하위 요소 <FormParams>
<Headers>
<Payload>
<QueryParams>

<Remove>의 일반적인 사용 사례는 수신 요청 객체에서 민감한 정보가 포함된 쿼리 매개변수 또는 헤더를 삭제하여 백엔드 서버에 전달하지 않도록 하는 것입니다.

<Remove> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also >be an empt<y array (F>ormPara<ms/) -->
    FormParams
    >  FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_val<ue/FormParam
      ...
    /Form<Params
 >   !-- Can< also b>e an em<pty array (Headers/) --&g>t;
    Heade<rs
    >  Header name=&<quot;hea>der_n<ame&quo>t;header_val<ue/Heade>r
   <   ...
    /Headers
    Payload[<false|true]/>Payload
  <  !-- Can a>lso be <an empty array (QueryParams/) --&>gt;
    QueryPar<ams
      Q>ueryParam name=<"queryp>ara<m_name&>q<uot;queryparam>_value/QueryParam
      ...
    /QueryParams
  /Remove
/AssignMessage

다음 예시에서는 응답에서 메시지 본문을 삭제합니다.

<AssignMessage name="AM-remo>ve-<1"
  D>isplayNa<meremove-1/D>isp<layNam>e
  R<emove
 >   P<ayloadtr>ue/<Payload>
  </Remove
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

응답 흐름에서 이 정책은 응답의 본문을 삭제하여 HTTP 헤더만 클라이언트에 반환합니다.

다음 예시에서는 request 객체에서 모든 양식 매개변수 및 쿼리 매개변수를 삭제합니다.

<AssignMessage name="AM-remo>ve-<2">;
  R<emove
    !<-- Empty (F>ormParams/) removes all form par>amete<rs --
    F>ormPa<rams/
    Q>ueryPar<ams
      QueryParam n>ame=&<quot;qp1&quo>t;/<
    /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

다음 예시에서는 메시지 객체에서 모든 것을 삭제합니다.

<AssignMessage name="AM-remo>ve-<3">
  <Remove/
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

일반적으로 <Set> 요소 또는 <Copy> 요소를 사용하여 메시지에 일부 대체 값을 설정하는 경우에만 이렇게 합니다.

<FormParams>(<Remove>의 하위 요소)

요청에서 지정된 양식 매개변수를 삭제합니다. 이 요소는 응답에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <FormParam> 요소의 배열 또는 빈 배열
상위 요소 <Remove>
하위 요소 <FormParam>

<FormParams> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also >be an empt<y array (F>ormPara<ms/) -->
    FormParams
    >  FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_v<alue/Fo>r<mParam
      .>..
    /FormParams
  /Remove
/AssignMessage

다음 예시에서는 요청에서 세 개의 양식 매개변수를 삭제합니다.

<AssignMessage name="AM-remove-formpara>ms-<1">;
  R<emove
    >FormPar<ams
      FormParam name=">;form_p<aram_1"/
      FormParam >name=&q<uot;form_param_2"/
      >FormP<aram name=&>quo<t;form_>par<am_3&quo>t;/
   < /FormPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

다음 예시에서는 요청에서 모든 양식 매개변수를 삭제합니다.

<AssignMessage name="AM-remove-formpara>ms-<2">;
  R<emove
    F>orm<Params/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

이름이 같은 양식 매개변수가 여러 개 있는 경우 다음 문법을 사용하세요.

<AssignMessage name="AM-remove-formpara>ms-<3">;
  R<emove
    >FormPar<ams
      FormParam >name=&q<uot;f1"/
      >FormPar<am name="f2">/
   <   FormPara>m n<ame=&qu>ot;<f3.2&quo>t;/
   < /FormPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

이 예시에서는 'f1', 'f2', 'f3'의 두 번째 값을 삭제합니다. 'f3'에 값이 하나만 있는 경우 삭제되지 않습니다.

다음 기준이 충족되는 경우에만 <FormParams>를 사용할 수 있습니다.

  • 메시지 유형: 요청
  • Content-Type: 'application/x-www-form-urlencoded'

<Headers>(<Remove>의 하위 요소)

<AssignTo> 요소로 지정된 요청 또는 응답에서 지정된 HTTP 헤더를 삭제합니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <Header> 요소의 배열 또는 빈 배열
상위 요소 <Remove>
하위 요소 <Header>

<Headers> 요소는 다음 문법을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can al>so be an e<mpty ar>ray (He<aders/) -->;
    Header>s
      Head<er name>="header_n<ame">;he<ader_va>l<ue/Header
    >  ...
    /Headers
  /Remove
/AssignMessage

다음 예시에서는 요청에서 user-agent 헤더를 삭제합니다.

<AssignMessage name="AM-remove-one-he>ade<r">;
  R<emove
 >   Head<ers
      Header name=&qu>ot;us<er-agent>&qu<ot;/
  >  /<Headers
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

다음 예시에서는 요청에서 모든 헤더를 삭제합니다.

<AssignMessage name="AM-remove-all-hea>der<s">;
  R<emove
  >  H<eaders/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

이름이 같은 헤더가 여러 개 있는 경우 다음 문법을 사용합니다.

<AssignMessage name="AM-remove-heade>rs-<3">;
  R<emove
 >   Head<ers
      Header >name=&q<uot;h1"/
   >   Head<er name="h2&qu>ot;/
<      He>ade<r name=>&qu<ot;h3.2&>quot;/
<    /Head>e<rs
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

이 예시에서는 요청에서 'h1', 'h2', 'h3'의 두 번째 값을 삭제합니다. 'h3'에 값이 하나만 있으면 삭제되지 않습니다.

<Payload>(<Remove>의 하위 요소)

<Remove><AssignTo> 요소로 지정된 요청 또는 응답에서 페이로드를 삭제할지 여부를 결정합니다. 페이로드를 삭제하려면 'true'로 설정합니다. 그렇지 않으면 'false'로 설정합니다. 기본값은 'false' 입니다.

기본값 거짓
필수 여부 선택사항
유형 불리언
상위 요소 <Remove>
하위 요소 없음

<Payload> 요소는 다음 문법을 사용합니다.

구문예 1s71
<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_na>me" 
  <Remove
 >   <Payload>[<false|true]/Pa>yload
  /Remove
/AssignMessage

다음 예시에서는 요청 페이로드가 삭제되도록 <Payload>를 'true'로 설정합니다.

<AssignMessage name="AM-remove-paylo>ad-<1">;
  R<emove
 >   P<ayloadtr>ue/<Payload>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

<QueryParams>(<Remove>의 하위 요소)

요청에서 지정된 쿼리 매개변수를 삭제합니다. 이 요소는 응답에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <QueryParam> 요소의 배열 또는 빈 배열
상위 요소 <Remove>
하위 요소 <QueryParam>

<QueryParams> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also b>e an empty< array (Que>ryParam<s/) -->
    QueryParams
      >QueryParam name=<"query>param_name"<;queryparam_>val<ue/Quer>y<Param
      ..>.
    /QueryParams
  /Remove
/AssignMessage

다음 예시에서는 요청에서 단일 쿼리 매개변수를 삭제합니다.

<AssignMessage name="AM-remove-querypara>ms-<1">;
  Rem<ove
      Q>ueryParam<s
        QueryParam n>ame=&qu<ot;qp1">/
 <     /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

다음 예시에서는 요청에서 모든 쿼리 매개변수를 삭제합니다.

<AssignMessage name="AM-remove-querypara>ms-<2">;
  Rem<ove
      Qu>ery<Params/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

이름이 같은 쿼리 매개변수가 여러 개 있는 경우 다음 문법을 사용하세요.

<AssignMessage name="AM-remove-querypara>ms-<3">;
  Rem<ove
      Q>ueryParam<s
        QueryParam n>ame="<;qp1"/
        Qu>eryParam <name="qp2"/
  >      Q<ueryParam na>me=<"q>p3.<2"/>
      </QueryPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

이 예시에서는 요청에서 'qp1', 'qp2', 'qp3'의 두 번째 값을 삭제합니다. 'qp3'에 값이 하나만 있으면 삭제되지 않습니다.

다음 예시에서는 요청에서 apikey 쿼리 매개변수를 삭제합니다.

<AssignMessage name="AM-remove-query-p>ara<m">;
  R<emove
    Q>ueryPar<ams
      QueryParam name>=&quo<t;apikey&quo>t;/<
    /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

다음 기준이 충족되는 경우에만 <QueryParams>를 사용할 수 있습니다.

  • HTTP 동사: GET
  • 메시지 유형: 요청

<Set>

<AssignTo> 요소로 지정된 요청 또는 응답 메시지의 정보를 설정합니다. <Set>는 원본 메시지에 이미 있는 헤더, 쿼리, 양식 매개변수를 덮어씁니다. HTTP 메시지의 헤더, 쿼리 및 양식 매개변수에는 여러 값이 포함될 수 있습니다. 헤더 또는 매개변수의 추가 값을 추가하려면 <Add> 요소를 대신 사용합니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 복합 유형
상위 요소 <AssignMessage>
하위 요소 <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

<Set> 요소는 다음 문법을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>"<;policy_na>me"<; 
  Set
    FormParams
      F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am
    <  ...
    /FormParams
   > Headers
   <   Head>er name="h<eader_na>me&qu<ot;h>eade<r_val>ue/He<ader
      ...
    /Headers
    Pathpath/Path
    Payload contentType="content_type&q>uot; variab<lePrefix>=&quo<t;prefix&qu>ot;
   <     variableSuffix="suffix&>quot;new_payload</Payload
  >  QueryParams
 <     QueryPa>ram n<ame="qu>eryparam_name&quot;queryparam_<value/QueryPa>ram
 <     ...
 >   /QueryParams
    ReasonPhra<sereason_fo>r_err<or o>r {variable}/ReasonPhrase
    StatusCo<deHTT>P_sta<tus_cod>e or {variable}/Stat<usCod>e
 <   V>e<rb[GET|POST|PU>T|PATCH|DELETE|{variable}]/Verb
    Version[1.0|1.1|{variable}]/Verb
  /Set
/AssignMessage

다음 예시에서는 특정 헤더를 설정합니다. 이 정책이 요청 흐름에 연결되면 업스트림 시스템은 원래 인바운드 요청에 포함되지 않은 추가 헤더를 수신할 수 있습니다.

<AssignMessage name="AM-Set-He>ade<r&q>uot;
<  Set
 >   Header<s
        Header name="authentic>ated-developer"{verifyapikey<.VAK-1.>devel<oper.id}>/He<ader>
  <  /Heade>rs
  /S<et
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

다음 예시에서는 응답의 페이로드와 Content-Type 헤더를 덮어씁니다.

<AssignMessage name="AM-Overwrite-Pay>loa<d&q>uot;
<  Set
    Payload contentType="ap>plication/json&qu<ot;{ &qu>ot;<stat>us&<quot; : >42 }/Pay<load
  /S>e<t
  AssignTore>sponse/AssignTo
/AssignMessage

<FormParams>(<Set>의 하위 요소)

요청에서 기존 양식 매개변수를 덮어쓰고 이 요소로 지정하는 새 값으로 대체합니다. 이 요소는 응답에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <FormParam> 요소의 배열
상위 요소 <Set>
하위 요소 <FormParam>

<FormParams> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_na>me"<; 
  Set
    FormParams
      F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/Fo>r<mParam
      .>..
    /FormParams
  /Set
/AssignMessage

다음 예시에서는 'myparam'이라는 양식 매개변수를 새 커스텀 요청의 request.header.myparam 변수 값으로 설정합니다.

<AssignMessage name="AM-set-formpara>ms-<1&q>uot;
<  Set
    >FormPar<ams
      FormParam name>="myparam"{req<uest.heade>r.myp<aram}/FormP>ara<m
  >  /<FormParams
  /Set
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

다음 기준이 충족되는 경우에만 <FormParams>를 사용할 수 있습니다.

  • HTTP 동사: POST
  • 메시지 유형: 요청

정책(<Add><FormParams/></Add>)에서 빈 양식 매개변수를 정의하면 정책은 양식 매개변수를 추가하지 않습니다. 이는 <FormParams>를 생략하는 것과 같습니다.

<Set>는 메시지의 Content-Type을 대상 엔드포인트로 보내기 전에 'application/x-www-form-urlencoded'로 변경합니다.

<Headers>(<Set>의 하위 요소)

<AssignTo> 요소로 지정된 요청 또는 응답에서 기존 HTTP 헤더를 덮어씁니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <Header> 요소의 배열
상위 요소 <Set>
하위 요소 <Header>

<Headers> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy>_name&q<uot; 
  Set
    Headers
 >     Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header
    >  ...
    /Headers
  /Set
/AssignMessage

다음 예시에서는 x-ratelimit-remaining 헤더를 ratelimit.Quota-1.available.count 변수의 값으로 설정합니다.

<AssignMessage name="AM-Set-RateLimit-He>ade<r&q>uot;
<  Set
 >   Head<ers
      Header name="X-RateL>imit-Remaining"{ratelimit.Quot<a-1.ava>ilabl<e.count}>/He<ader>
  <  /Heade>rs
  /Se<t
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

정책(<Set><Headers/></Set>)에서 빈 헤더를 정의하는 경우 정책은 헤더를 설정하지 않습니다. 이는 <Headers>를 생략하는 것과 효과가 같습니다.

<Path>(<Set>의 하위 요소)

<Payload>(<Set>의 하위 요소)

<AssignTo> 요소에서 지정된 요청 또는 응답의 메시지 본문을 정의합니다. 페이로드는 일반 텍스트, JSON, XML 등 모든 유효한 콘텐츠 유형이 될 수 있습니다.

기본값 빈 문자열
필수 여부 선택사항
유형 문자열
상위 요소 <Set>
하위 요소 없음

<Payload> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_name" 
  Set
    Payload contentType=&quot;content_type" variablePrefix=>"prefi<x"<>/span>
   <    > <variableSuffix>="suffix"new_payload/Payload
  /Set
/AssignMessage

다음 예시에서는 일반 텍스트 페이로드를 설정합니다.

<AssignMessage name="set-paylo>ad-<1&q>uot;
<  Set
    Payload contentType=&q>uo<t;text/p>lai<n&qu>o<t;42/Payload
 > /Set
/AssignMessage

다음 예시에서는 JSON 페이로드를 설정합니다.

<AssignMessage name="set-paylo>ad-<2&q>uot;
<  Set
    Payload contentType="ap>plication/json"
      {"name&q<uot;:&qu>ot;<foo&>q<uot;, "ty>pe":"bar"}
    /Payload
  /Set
/AssignMessage

다음 예시에서는 중괄호로 변수 이름을 래핑하여 변수 값을 페이로드에 삽입합니다.

<AssignMessage name="set-paylo>ad-<3&q>uot;
<  Set
    Payload contentType="ap>plication/json"
      {"name":"f<oo">, &<quot>;<type":&qu>ot;{variable_name}"}
    /Payload
  /Set
/AssignMessage

이전 버전의 Apigee에서는 중괄호를 사용하여 JSON 페이로드 내의 변수 참조를 표시할 수 없었습니다. 이러한 출시 버전에서는 다음과 같이 구분 기호 문자를 지정하고 변수 이름을 래핑하기 위해 variablePrefixvariableSuffix 속성을 사용해야 했습니다.

<AssignMessage name="set-payloa>d-3<b&q>uot;
<  Set
    Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#"
      {&quo<t;name&q>uot<;:&q>u<ot;foo", >"type":"@variable_name#"}
    /Payload
  /Set
/AssignMessage

이 이전 문법은 여전히 작동합니다.

<Payload>의 콘텐츠는 메시지 템플릿으로 처리됩니다. 즉 AssignMessage 정책은 중괄호로 묶인 변수를 런타임에 참조된 변수 값으로 대체합니다.

다음 예시에서는 중괄호 구문을 사용하여 페이로드의 일부를 변수 값으로 설정합니다.

<AssignMessage name="set-paylo>ad-<4&q>uot;
<  Set
    Payload contentType=>"t<ext/>xml"<
 >     r<oot>
        <e1>sunday</e1>
        <e2>funday</e2>
      <  e3{>var1}</e3
    >  /<root>
<    /Payload
 > /Set
/AssignMessage

다음 표는 <Payload>의 속성을 설명합니다.

속성 설명 접속 상태 유형
contentType

이 속성을 지정하면 contentType 값이 Content-Type HTTP 헤더에 할당됩니다.

선택사항 문자열
variablePrefix 필요한 경우 흐름 변수의 선행 구분 기호를 지정합니다. 기본값은 '{'입니다. 자세한 내용은 흐름 변수 참조를 참조하세요. 선택사항 char
variableSuffix 필요한 경우 흐름 변수의 후행 구분 기호를 지정합니다. 기본값은 '}'입니다. 자세한 내용은 흐름 변수 참조를 참조하세요. 선택사항 char

<QueryParams>(<Set>의 하위 요소)

요청의 기존 쿼리 매개변수를 새 값으로 덮어씁니다. 이 요소는 응답에 영향을 주지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 <QueryParam> 요소의 배열
상위 요소 <Set>
하위 요소 <QueryParam>

<QueryParams> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_nam>e"< 
  Set
    QueryParams
      Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param
      ..>.
    /QueryParams
  /Set
/AssignMessage

다음 예시에서는 'address' 쿼리 매개변수를 request.header.address 변수 값으로 설정합니다.

<AssignMessage name="AM-set-querypara>ms<-1&>quot;<  Set
    Q>ueryPar<ams
      QueryParam name>="address"{req<uest.header>.addr<ess}/QueryPa>ram<
   > </QueryParams
 > /Set
/AssignMessage

다음 기준이 충족되는 경우에만 <QueryParams>를 사용할 수 있습니다.

  • HTTP 동사: GET
  • 메시지 유형: 요청

정책(<Set><QueryParams/></Set>)에 빈 쿼리 매개변수를 정의하면 정책에서 쿼리 매개변수가 설정되지 않습니다. 이는 <QueryParams>를 생략하는 것과 같습니다.

<ReasonPhrase>(<Set>의 하위 요소)

응답에서 이유 구문을 설정합니다. 이는 일반적으로 <StatusCode>와 함께 디버깅하기 위해 수행됩니다. 이 요소는 요청에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 문자열
상위 요소 <Set>
하위 요소 없음

<ReasonPhrase> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_name>" 
  Set
    ReasonPhrase<reason_for_er>ror< or >{<variable}/Reas>onPhrase
  /Set
/AssignMessage

다음 예시에서는 간단한 이유 구문을 정의합니다.

<AssignMessage name="set-reasonphra>se-<1&q>uot;
<  Set
    Re>asonPhraseBa<d medicine/Re>aso<nPhr>ase<
  /Set
  AssignTo createNew="true" transport=&qu>o<t;http" t>ype="response"/
/AssignMessage

<ReasonPhrase>의 콘텐츠는 메시지 템플릿으로 처리됩니다. 즉 다음 예시와 같이 중괄호로 묶인 변수 이름은 런타임 시 참조된 변수 값으로 대체됩니다.

<AssignMessage name="AM-set-reasonphra>se-<2&q>uot;
<  Set
    Re>asonPhrase{calloutresponse.reas<on.phrase}/Re>aso<nPhr>ase<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

다음 기준을 충족하는 경우에만 <ReasonPhrase>를 사용할 수 있습니다.

  • 메시지 유형: 응답

<StatusCode>(<Set>의 하위 요소)

응답에 상태 코드를 설정합니다. 이 요소는 요청에 영향을 미치지 않습니다.

기본값 '200'(<AssignTo>createNew 속성이 'true'로 설정된 경우)
필수 여부 선택사항
유형 문자열 또는 variable
상위 요소 <Set>
하위 요소 없음

<StatusCode> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_na>me" 
  Set
    StatusCode<HTTP_status>_co<de o>r< {variable}/St>atusCode
  /Set
/AssignMessage

다음 예시에서는 간단한 상태 코드를 설정합니다.

<AssignMessage name="AM-set-statuscode>-40<4&q>uot;
<  Set
    >Sta<tusCode404/>Sta<tusC>ode<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

<StatusCode>의 콘텐츠는 메시지 템플릿으로 처리됩니다. 즉 다음 예시와 같이 중괄호로 묶인 변수 이름은 런타임 시 참조된 변수 값으로 대체됩니다.

<AssignMessage name="set-statusco>de-<2&q>uot;
<  Set
    >StatusCode{calloutresponse.st<atus.code}/>Sta<tusC>ode<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

다음 기준을 충족하는 경우에만 <StatusCode>를 사용할 수 있습니다.

  • 메시지 유형: 응답

<Verb>(<Set>의 하위 요소)

요청에 HTTP 동사를 설정합니다. 이 요소는 응답에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 문자열 또는 variable
상위 요소 <Set>
하위 요소 없음

<Verb> 요소는 다음 문법을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;pol>icy_name" 
  Set
    Verb[GET|POS<T|PUT>|PA<TCH|>D<ELETE|{variabl>e}]/Verb
  /Set
/AssignMessage

다음 예시에서는 요청에 간단한 동사를 설정합니다.

<AssignMessage name="AM-set-ve>rb-<1&q>uot;
<  Se>t
  <  Ver>bPO<ST/V>erb<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

<Verb>의 콘텐츠는 메시지 템플릿으로 처리됩니다. 즉 중괄호로 묶인 변수 이름이 런타임 시 참조된 변수의 값으로 대체됩니다.

다음 예시에서는 변수를 사용하여 동사를 채웁니다.

<AssignMessage name="AM-set-verb-to-dynamic-v>alu<e&q>uot;
<  Se>t
    Verb{my<_vari>abl<e}/V>erb<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

다음 기준을 충족하는 경우에만 <Verb>를 사용할 수 있습니다.

  • 메시지 유형: 요청

<Version>(<Set>의 하위 요소)

요청에 HTTP 버전을 설정합니다. 이 요소는 응답에 영향을 미치지 않습니다.

기본값 해당 사항 없음
필수 여부 선택사항
유형 문자열 또는 variable
상위 요소 <Set>
하위 요소 없음

<Version> 요소는 다음 구문을 사용합니다.

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy>_name" 
  Set
 <   Ve>rsi<on[1>.<0|1.1|{variabl>e}]/Verb
  /Set
/AssignMessage

다음 예시에서는 버전 번호를 '1.1'로 설정합니다.

<AssignMessage name="AM-set-versi>on-<1&q>uot;
<  Set
 >   <Version1>.1/<Vers>io<n
  /Set
 /Ass>ignMessage

다음은 중괄호 안의 변수를 사용하여 버전 번호를 설정합니다.

<AssignMessage name="AM-set-versi>on-<2&q>uot;
<  Set
 >   Version{m<y_versio>n}/<Vers>ion<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

<Version>의 콘텐츠는 메시지 템플릿으로 처리됩니다. 즉 중괄호로 묶인 변수 이름이 런타임 시 참조된 변수의 값으로 대체됩니다.

다음 기준을 충족하는 경우에만 <Version>를 사용할 수 있습니다.

  • 메시지 유형: 요청

커스텀 요청 메시지 만들기

AssignMessage 정책을 사용하여 커스텀 요청 메시지를 만들 수 있습니다. 커스텀 요청을 만든 후 다음과 같은 방법으로 사용할 수 있습니다.

  • 다른 정책에서 해당 변수에 액세스
  • 외부 서비스에 전달

커스텀 요청 메시지를 만들려면 AssignMessage 정책의 <AssignTo> 요소를 사용합니다. createNew를 'true'로 설정하고 아래 예시와 같이 요소의 본문에 새 메시지의 이름을 지정합니다.

<AssignMessage name="AM-assign>to-2<" 
  AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo 
/AssignMessage

기본적으로 Edge는 맞춤 요청 메시지를 사용하지 않습니다. 커스텀 요청 메시지 생성 후 Edge는 원래 요청으로 흐름을 계속 진행합니다. 커스텀 요청을 사용하려면 커스텀 요청을 외부 서비스에 전달할 수 있는 ServiceCallout 정책과 같은 정책을 프록시에 추가합니다.

다음 예시에서는 커스텀 요청 메시지를 만듭니다.

다음 예시에서는 Assign Message으로 커스텀 요청 객체를 만듭니다.

<AssignMessage name="AssignMessa>ge-<3"
  AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;M>yCust<omReque>st/Ass<ignTo
  Copy
    Headers
>     <Header n>ame<=&quo>t;u<ser>-agen<t"/
  >  /Head<ers
  /Copy
  Set
    Que>ryParams
      QueryParam< name=">;addr<ess"{re>quest<.que>ryp<aram.>add<y}/Q>uer<yParam
    /QueryParams
 >   VerbG<ET/Verb
  /Set
  IgnoreUnr>e<solvedVariable>sfalse
  /IgnoreUnresolvedVariables
/AssignMessage

예시:

  • 'MyCustomRequest'라는 새 요청 메시지 객체를 만듭니다.
  • MyCustomRequest에서 이 정책은 다음을 실행합니다.
    • 수신되는 요청에서 user-agent HTTP 헤더 값을 새 메시지로 복사합니다. <Copy>user-agent 흐름 변수에 절대 참조를 사용하므로 source 속성을 <Copy>에 지정할 필요가 없습니다.
    • 커스텀 메시지의 address 쿼리 매개변수를 수신 요청의 addy 쿼리 매개변수 값으로 설정합니다.
    • HTTP 동사를 GET으로 설정합니다.
  • <IgnoreUnresolvedVariables>를 'false'로 설정합니다. <IgnoreUnresolvedVariables>가 'false'인 경우 정책에서 추가하려는 변수 중 하나가 존재하지 않는 경우 Edge는 API 흐름에서 처리를 중지합니다.

다음은 Assign Message를 사용하여 커스텀 요청 객체를 만드는 방법을 보여주는 또 다른 예입니다.

<AssignMessage name="AssignMessa>ge-<2"
  AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;>partn<er.r>eque<st/As>signT<o
  Set
    VerbPOST/Verb
    >Payload< conten><tType=&qu>ot;<text/xml&q><uot;
   >   re<questope>rat<ion1>0<5/operation/re>quest
    /Payload
  /Set
/AssignMessage

이 예시에서는 'partner.request'라는 새 커스텀 요청을 만듭니다. 그런 다음 새 요청에서 <Verb><Payload>를 설정합니다.

흐름의 후반부에서 발생하는 다른 AssignMessage 정책에서 커스텀 요청 메시지에 액세스할 수 있습니다. 다음 예시에서는 커스텀 요청 메시지의 user-agent 헤더 값을 가져옵니다.

<AssignMessage name="custom-request-1-ac>ces<s"
  D>isplayNamecustom-reques<t-1-access/D>isp<layName
>  AssignTopartn<er.reques>t/A<ssi>gnTo
<  Set
 >   Head<ers
      Header name="user-agentCop>yCustomRequest"{MyCustomReques<t.heade>r.use<r-agent}>/He<ader>
<    /Headers
 > /Set
/AssignMessage

동영상

AssignMessage 정책에 대해 자세히 알아보려면 다음 동영상을 참조하세요.

동영상 설명
Assign Message 정책을 사용해야 하는 이유 AssignMessage 정책을 사용하여 백엔드 코드를 수정하지 않고 API 요청 또는 응답을 수정할 때의 이점에 대해 알아보세요.
AssignMessage 정책을 사용하여 API 요소 복사 API 요청 또는 응답에서 요소를 복사하고 AssignMessage 정책을 사용하여 새 요청 또는 응답 객체를 구성합니다.
AssignMessage 정책을 사용하여 API 요소 삭제 AssignMessage 정책을 사용하여 API 요소를 삭제하고 대상 백엔드에 도달하기 전에 API를 수정합니다.
AssignMessage 정책을 사용하여 API 요소 추가 및 설정 AssignMessage 정책을 사용하여 쿼리 매개변수, 헤더, 양식 매개변수, 페이로드를 추가하여 API 요청 또는 응답을 변경합니다.
AssignMessage 정책을 사용하여 커스텀 변수 만들기 AssignMessage 정책을 사용하여 커스텀 흐름 변수를 설정하고 API 프록시의 다른 정책에서 변수를 활용합니다.
AssignMessage 정책을 사용하여 새 요청 또는 응답 객체 만들기 API 런타임에서 AssignMessage 정책을 사용하여 새로운 API 요청 또는 응답 객체를 만듭니다.
AssignMessage 정책을 사용하여 가상 API 만들기 응답 흐름에 AssignMessage 정책을 추가하여 간단한 가상 REST API를 만듭니다.
AssignMessage 정책을 사용하여 페이로드 설정 또는 수정 API 런타임에서 AssignMessage 정책을 사용하여 SOAP 페이로드를 설정하여 REST 요청을 SOAP 요청으로 변환합니다.

오류 코드

이 섹션에서는 반환되는 오류 코드, 오류 메시지, 그리고 이 정책이 오류를 트리거할 때 Edge에서 설정하는 오류 변수를 설명합니다. 오류를 처리하기 위해 오류 규칙을 개발 중인 경우, 이 정보는 중요합니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항오류 처리를 참조하세요.

런타임 오류

이러한 오류는 정책이 실행될 때 발생할 수 있습니다.

오류 코드 HTTP 상태 원인 해결
steps.assignmessage.SetVariableFailed 500 정책을 통해 변수를 설정할 수 없습니다. 확인되지 않은 변수의 이름은 오류 문자열을 참조하세요.
steps.assignmessage.VariableOfNonMsgType 500

이 오류는 <Copy> 요소의 source 속성이 메시지 유형이 아닌 변수로 설정된 경우에 발생합니다.

메시지 유형 변수는 전체 HTTP 요청 및 응답을 나타냅니다. 내장된 Edge 흐름 변수 request, response, message는 메시지 유형입니다. message 변수에 대한 자세한 내용은 변수 참조를 확인하세요.

steps.assignmessage.UnresolvedVariable 500

이 오류는 메시지 할당 정책에 지정된 변수가 다음 중 하나인 경우에 발생합니다.

  • 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
  • 또는
  • 확인할 수 없는 경우(정의되지 않음)

배포 오류

이 오류는 이 정책이 포함된 프록시를 배포할 때 발생할 수 있습니다.

오류 이름 원인 해결
InvalidIndex 메시지 할당 정책의 <Copy> 또는 <Remove> 요소에 지정된 색인이 0이거나 음수이면 API 프록시 배포가 실패합니다.
InvalidVariableName 하위 요소 <Name>이 비어 있거나 <AssignVariable> 요소에서 지정되지 않은 경우, 값을 할당할 유효한 변수 이름이 없으므로 API 프록시 배포가 실패합니다. 유효한 변수 이름이 필요합니다.
InvalidPayload 정책에 지정된 페이로드가 잘못되었습니다.

오류 변수

이러한 변수는 이 정책이 런타임 시 오류를 트리거할 때 설정됩니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항을 참조하세요.

변수 위치
fault.name="fault_name" fault_name은 위의 런타임 오류 표에 나열된 오류 이름입니다. 오류 이름은 오류 코드의 마지막 부분입니다. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name은 오류를 발생시킨 정책의 사용자 지정 이름입니다. assignmessage.AM-SetResponse.failed = true

오류 응답 예시

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

오류 규칙 예시

    <FaultRule name="Assign Message Faults">    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

스키마

각 정책 유형은 XML 스키마(.xsd)로 정의됩니다. 참고로 GitHub에서 정책 스키마를 사용할 수 있습니다.

관련 주제

AssignMessage 작업 샘플API Platform 샘플에서 사용할 수 있습니다.

ProxyEndpoint에서 target.url을 재정의하는 방법에 대한 자세한 예시는 Apigee 커뮤니티 도움말을 참조하세요.

ServiceCallout 정책에서 실제 '경로 설정'을 보려면 Apigee GitHub 샘플에서 예시를 통해 알아보기를 확인하세요. 저장소를 클론하고 해당 주제의 안내를 따릅니다. 이 예시에서는 AssignMessage 정책을 사용하여 요청 경로를 설정한 다음 서비스 콜아웃 정책을 사용하여 외부 서비스에 요청을 보냅니다.