AssignMessage 정책

Apigee Edge 문서입니다.
Apigee X 문서로 이동
정보

대상

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

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

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

AssignMessage 정책은 다음 하위 요소로 흐름 변수를 만들거나 변경할 수 있습니다.

<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 정책을 사용할 수 있는 몇 가지 방법을 보여줍니다.

1: 헤더 추가

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

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2: 페이로드 삭제

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

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3: 응답 수정

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

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

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

이 예시에서는 <AssignTo> 요소에서 변수 이름을 생략하고 type을 'response'로 지정하므로 이 정책은 대상 서버에서 반환된 응답 객체를 수정합니다.

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

4: 동적 콘텐츠 설정

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

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

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

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="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부터 중괄호를 사용하여 변수를 삽입할 수도 있습니다.

5: 쿼리 매개변수 삭제

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

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

6: 변수 설정 및 가져오기

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

  1. 요청에 정적 값을 사용하여 세 개의 흐름 변수를 만듭니다.
  2. 요청 흐름의 두 번째 정책에서 흐름 변수를 동적으로 가져옵니다.
  3. 응답의 페이로드에 흐름 변수를 설정합니다.
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="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>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</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>

7: 서비스 콜아웃 응답 헤더 가져오기

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

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</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>

예시 1

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

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

예시 2

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

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

예시 3

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

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

이 예시에서는 요청 preflow에서 <Add>를 사용합니다. Trace 도구와 같은 도구에서 결과를 살펴보면 'http://httpbin.org/get'에 대한 요청은 'http://httpbin.org/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>

예시 1

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

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

예시 2

다음 예시에서는 name 쿼리 문자열 매개변수의 값을 가져와서 요청에 양식 매개변수로 추가합니다.

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

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

예시 3

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

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

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

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

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=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>

예시 1

다음 예시에서는 user-agent 헤더를 요청 메시지에 추가하고 request.user.agent 흐름 변수의 값을 이 헤더에 할당합니다.

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</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>

예시 1

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

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

<AssignTo>

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

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

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

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

<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>

예시 1

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

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

createNew를 'false'(기본값)로 설정하면 이 예시에서는 새 요청을 만들지 않습니다. 이 정책의 모든 작업은 원래 요청에 영향을 미칩니다.

예시 2

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

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

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

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

예시 3

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

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

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

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

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

속성 설명 필수 여부 유형
createNew

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

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

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

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

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

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

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

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

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

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

선택사항 문자열

<AssignVariable>

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

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

예시 1

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

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

예시 2

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

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

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

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

예시 3

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

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

예시 1

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

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

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]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

예시 1

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

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

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

예 2

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

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

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

예시 3

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

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

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

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</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> 요소는 보안 정책에서 흐름 변수로 사용할 수 있는 앱의 커스텀 속성에서 메시지 템플릿을 사용할 수 있습니다. 다음 예시에서는 API 호출을 수행하는 개발자 앱의 message_template이라는 커스텀 속성에서 메시지 템플릿을 사용할 수 있다고 가정합니다. 여기서 VerifyAPIKey 정책은 앱의 API 키를 확인하는 데 사용되었습니다.

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

예시 1

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

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

예시 2

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

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

예시 3

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

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

예시 1

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

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

예시 2

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

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

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

<Copy>

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <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>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

예시 1

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

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

<Copy> 요소에는 다음과 같은 속성이 있습니다.

속성 설명 필수 여부 유형
source

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

  • source를 지정하지 않으면 간단한 메시지로 처리됩니다. 예를 들어 정책이 요청 흐름에 있는 경우 소스의 기본값은 request 객체입니다. 정책이 응답 흐름에 있는 경우 기본값은 response 객체입니다. source를 생략할 경우 흐름 변수에 대한 절대 참조를 사본의 소스로 사용할 수 있습니다. 예를 들어 값을 {request.header.user-agent}로 지정합니다.
  • 소스 변수를 확인할 수 없거나 메시지가 아닌 유형으로 확인되는 경우 <Copy>가 응답하지 않습니다.
선택 문자열

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

예시 1

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

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

예시 2

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

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

예시 3

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

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

예시 4

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

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" 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]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

예시 1

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

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

예시 2

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

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

예시 3

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

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

예 1

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

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • 메시지 유형: 요청

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

예시 1

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

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

예시 1

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

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

예시 2

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

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

예시 3

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

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" 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]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

예시 1

다음 예시에서는 <ReasonPhrase>를 'true'로 설정하여 <Copy>가 이유 구문을 기본 응답에서 커스텀 응답 객체로 복사합니다.

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

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

  • 메시지 유형: 응답

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

예시 1

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

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

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

  • 메시지 유형: 응답

<StatusCode>의 일반적인 용도는 <AssignTo>createNew 속성이 'true'로 설정되어 있을 때 프록시 응답이 대상으로부터 수신한 응답과 동일한 상태를 가지는 것을 확인하는 것입니다.

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

예시 1

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

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • 메시지 유형: 요청

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

예시 1

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

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">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]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

예시 1

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

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <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>
</AssignMessage>

예시 1

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

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

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

예시 2

다음 예시에서는 들어오는 요청에서 모든 양식 매개변수와 쿼리 매개변수를 삭제합니다.

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

예시 1

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

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

예시 2

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

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

예시 3

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

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</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]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

예시 1

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

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

예시 2

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

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

예시 3

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

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

예시 1

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

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

예시 1

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

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

예시 2

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

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

예시 3

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

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

예시 4

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

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

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

<Set>

<AssignTo> 요소로 지정된 요청 또는 응답 메시지의 정보를 설정합니다. <Set>는 원본 메시지에 이미 있는 헤더 또는 매개변수를 덮어씁니다. 새 헤더 또는 매개변수를 만들려면 <Add> 요소를 대신 사용하세요.

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <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>

예시 1

다음 예시에서는 <Set> 요소를 보여줍니다.

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

예시 1

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

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">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]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

예시 1

다음 예시에서는 user-agent 헤더를 request.header.user-agent 변수의 값으로 설정합니다.

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

예시 1

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

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

예시 2

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

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

예시 3

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

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

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

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

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

예 4

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

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

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <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]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

예시 1

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

<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

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

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

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

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

예시 1

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

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

예시 2

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

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

  • 메시지 유형: 응답

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

예시 1

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

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

예시 2

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

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

  • 메시지 유형: 응답

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

예시 1

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

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

예시 2

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

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

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

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

  • 메시지 유형: 요청

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

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

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

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

구문

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

예시 1

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

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

예시 2

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

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

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

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

  • 메시지 유형: 요청

커스텀 요청 메시지 만들기

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

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

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

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

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

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

예시 1

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

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

예시:

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

예시 2

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

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

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

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

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo createNew="false" type="request"></AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </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="VariableOfNonMsgType"></faultrule><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 정책을 사용하여 요청 경로를 설정한 다음 Service Callout 정책을 사용하여 외부 서비스에 요청을 보냅니다.