AssignMessage 정책

이 페이지는 ApigeeApigee Hybrid에 적용됩니다.

Apigee Edge 문서 보기

정책 아이콘

대상

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

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

또한 AssignMessage는 메시지에 적용할 수 있는 위의 작업과 관계없이 임의의 컨텍스트 변수를 설정할 수 있도록 합니다.

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

이 정책은 확장 가능한 정책이며, 이 정책을 사용하면 Apigee 라이선스에 따라 비용 또는 사용률이 영향을 받을 수 있습니다. 정책 유형 및 사용 영향에 대한 자세한 내용은 정책 유형을 참조하세요.

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

<Add>, <Copy>, <Set>, <Remove> 요소를 구성하는 순서가 중요합니다. 정책은 정책 구성에 표시된 순서에 따라 작업을 수행합니다. 모든 헤더를 삭제하고 특정 헤더를 설정해야 하면 <Set> 요소 앞에 <Remove> 요소를 포함해야 합니다.

<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>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
    <Ref>SOURCE_VARIABLE</Ref>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
    <Template>MESSAGE_TEMPLATE</Template>
    or
    <Template ref='TEMPLATE_VARIABLE'></Template>
    <Value>VARIABLE_VALUE</Value>
  </AssignVariable>

  <Copy source="VARIABLE_NAME">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Copy all headers -->
    <Headers/>
    <!-- or, copy specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</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>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>

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

  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all form parameters -->
    <FormParams/>
    <!-- or, remove specific form parameters by name -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME"/>
      <!-- or -->
      <FormParam name="FORMPARAM_NAME">[false|true]</FormParam>
      ...
    </FormParams>
    <!-- Remove all headers -->
    <Headers/>
    <!-- or, remove specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Remove all query parameters -->
    <QueryParams/>
    <!-- or, remove specific query parameters by name -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME"/>
      <!-- or -->
      <QueryParam name="QUERYPARAM_NAME">[false|true]</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>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

기본 정책

다음 예시에서는 Apigee 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/>
    <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>

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

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

속성 기본 필수 여부 설명
name 해당 없음 필수

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

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

continueOnError false 선택 정책이 실패할 경우 오류가 반환되도록 하려면 false로 설정합니다. 이는 대부분의 정책에서 예상되는 동작입니다. 정책이 실패해도 흐름 실행이 계속되도록 하려면 true로 설정합니다. 참조:
enabled true 선택 정책을 시행하려면 true로 설정합니다. 정책을 중지하려면 false로 설정합니다. 정책이 흐름에 연결되어 있어도 정책이 시행되지 않습니다.
async   false 지원 중단됨 이 속성은 지원이 중단되었습니다.

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

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

<Add>는 원본 메시지에 없는 헤더 또는 매개변수를 메시지에 추가합니다. <Set>도 이 기능을 제공합니다.

기존 헤더 또는 매개변수를 덮어쓰려면 <Set> 요소를 사용합니다.

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

<Set>는 원본 메시지에 이미 있는 헤더 또는 매개변수를 덮어쓰거나 없으면 새로 추가합니다.

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

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

예시

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

1: 헤더 추가

다음 예시에서는 <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>

2: 페이로드 삭제

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

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

3: 응답 수정

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

<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 헤더가 포함됩니다. 응답에서 헤더를 설정하면 디버깅 및 문제 해결에 유용할 수 있습니다.

4: 동적 콘텐츠 설정

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

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>

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

중괄호를 사용하여 변수를 삽입할 수도 있습니다.

5: 쿼리 매개변수 삭제

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

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

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

6: 변수 설정 및 가져오기

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

  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>

7: ServiceCallout 응답 헤더 가져오기

다음 예시에서는 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}

8: 양식 매개변수, 헤더, 쿼리 매개변수 저장 및 삭제

<Remove>를 사용하여 헤더, 쿼리 매개변수 또는 양식 매개변수를 삭제하되 나중에 정책 흐름의 값에 대한 액세스 권한을 유지하려면 <AssignVariable>를 사용하여 값을 저장할 수 있습니다.

<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-StoreAndRemove">
  <DisplayName>AM-StoreAndRemove</DisplayName>
  <AssignVariable>
    <Name>var_grant_type</Name>
    <Ref>request.formparam.grant_type</Ref>
  </AssignVariable>
  <Remove>
    <Headers/>
    <FormParams/>
    <Payload/>
  </Remove>
  <Set>
    <Headers>
      <Header name="Content-Type">application/x-www-form-urlencoded</Header>
      <Header name="Accept">application/json</Header>
      <Header name="Grant-Type">{var_grant_type}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

하위 요소 참조

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

<Add>

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

<Add> 요소는 원본 메시지에 존재하지 않는 메시지에 새 속성을 추가합니다. <Set>도 이 기능을 제공합니다. 기존 속성 값을 변경하려면 <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 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>

예시 2

다음 예시에서는 <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>

예시 3

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

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

이 예시에서는 요청 preflow에서 <Add>를 사용합니다. 디버그 개요와 같은 도구에서 결과를 살펴보면 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>

예시 1

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

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

예시 2

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

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

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

예시 3

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

<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가 수정된 요청을 대상 엔드포인트에 전송합니다.

디버그 개요를 사용하여 흐름을 살펴볼 수 있습니다. 요청 본문에 쿼리 문자열 매개변수로 원래 전달된 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>를 추가하면 Apigee가 요청의 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

다음 예시에서는 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>

예시 1

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

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

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

  • HTTP 동사: GET, POST, PATCH, DELETE
  • 메시지 유형: 요청

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

예시 1

다음 예시에서는 <AssignTo> 텍스트에 메시지를 지정하지 않습니다. 즉, 정책이 실행되는 위치에 따라 request 또는 response 메시지에서 정책이 작동합니다.

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

createNew="false"를 지정하고 메시지 이름을 명시적으로 제공하지 않으면 <AssignTo>의 다른 속성은 관련이 없습니다. 이 경우 <AssignTo> 요소를 완전히 생략할 수 있습니다.

예시 2

다음 예시에서는 새 요청 객체를 만들어 기존 객체를 덮어씁니다.

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

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

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

예시 3

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

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

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

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

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

속성 설명 필수 여부 유형
createNew

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

true이면 정책은 type(request 또는 response)에 지정된 유형의 새로운 변수를 만듭니다. 새 변수의 이름을 지정하지 않으면 정책이 type의 값에 따라 새 요청 또는 응답 객체를 만듭니다.

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

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

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

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

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

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

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

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

선택사항 문자열

<AssignVariable>

대상 흐름 변수에 값을 할당합니다(예: 값이 AssignMessage 정책에 의해 설정된 변수). 흐름 변수가 없으면 <AssignVariable>이 변수를 만듭니다. AssignVariable 정책 내에서 여러 AssignVariable 요소를 사용할 수 있습니다. 이러한 요소는 정책 구성에 나타난 순서대로 실행됩니다.

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

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

  • 리터럴 문자열: <Value> 하위 요소를 사용하여 대상 흐름 변수의 리터럴 문자열 값을 지정합니다.
  • 흐름 변수: <Ref> 하위 요소를 사용하여 대상 흐름 변수의 기존 흐름 변수 값을 지정합니다. 소스로 사용할 수 있는 흐름 변수의 전체 목록은 흐름 변수 참조를 확인하세요.
  • 속성 집합: <PropertySetRef> 하위 요소를 사용하여 속성 집합 이름/키 쌍에서 값을 검색하여 흐름 변수에 저장합니다. 속성 세트에 동적으로 액세스할 수 있습니다.
  • 리소스 URL: <ResourceURL> 하위 요소를 사용하여 XSL, XSD, WSDL, 자바스크립트 또는 OpenAPI 사양 유형의 텍스트 리소스에 대한 URL을 지정합니다. 이렇게 하면 리소스의 콘텐츠가 명명된 흐름 변수에 할당됩니다.
  • 메시지 템플릿: <Template> 하위 요소를 사용하여 대상 흐름 변수의 메시지 템플릿을 지정합니다.

이러한 하위 요소의 우선순위는 ResourceURL, Template, Ref, Value, PropertySetRef입니다.

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
    <Ref>SOURCE_VARIABLE</Ref>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
    <Template>MESSAGE_TEMPLATE</Template>
    or
    <Template ref='TEMPLATE_VARIABLE'></Template>
    <Value>VARIABLE_VALUE</Value>
  </AssignVariable>
</AssignMessage>

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

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

두 할당 중 하나라도 실패하면 Apigee가 ErrorOnCopy 값을 대상 흐름 변수에 대신 할당합니다.

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

예시 3

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

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

예시 4

다음 예시에서는 <AssignVariable>을 사용하여 경로 서픽스를 프록시 요청에서 대상 요청으로 전파하는 기본 동작을 사용 중지합니다.

<AssignMessage name='AM-PathSuffixFalse'>
  <AssignVariable>
    <Name>target.copy.pathsuffix</Name>
    <Value>false</Value>
  </AssignVariable>
</AssignMessage>

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

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

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

기본값 해당 사항 없음
필수 여부 필수
유형 문자열
상위 요소 <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>이 만듭니다.

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

이 요소를 사용하면 속성 집합 이름/키 쌍의 값을 동적으로 검색할 수 있습니다. 속성 집합에 대한 자세한 내용은 속성 집합 사용을 참조하세요.

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

속성 세트는 이름/키 쌍으로 구성됩니다. 예를 들어 propset1.id=12345입니다. 여기서 propset1은 속성 세트의 이름, id는 키, 12345는 키의 값입니다.

PropertySetRef 하위 요소를 사용하면 속성 집합 이름 또는 키를 동적으로 선택할 수 있습니다. 속성 세트 파일에 200개의 라우팅 규칙이 있다고 가정합니다. 다음과 같이 속성 집합 규칙에 액세스할 수 있습니다. 여기서 routingrules는 속성 집합 이름이고 rule1, rule2, rulen은 키입니다.

propertyset.routingrules.rule1
propertyset.routingrules.rule2
propertyset.routingrules.rulen

API 프록시 흐름에서 이러한 속성에 액세스하려면 설계 시점에 어떤 규칙을 선택하려는지 알아야 합니다. 그러나 규칙 이름이 요청 헤더 또는 페이로드에 있다고 가정합니다. 규칙을 선택하는 한 가지 방법은 다음과 같은 코드로 자바스크립트 정책을 사용하는 것입니다.

context.getVariables("propertyset.routingrules." + ruleName); //assuming ruleName was populated earlier.

반면 AssignMessage PropertySetRef 기능을 사용하면 자바스크립트를 도입하지 않고 동적으로 속성 키를 선택할 수 있습니다.

<PropertySetRef> 요소에서 흐름 변수와 리터럴 문자열 값을 혼합하여 사용할 수 있습니다. 자세한 내용은 예시를 참조하세요.

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
  </AssignVariable>
</AssignMessage>

예시 1

이 예시에서는 속성 집합 키의 값을 흐름 변수에 할당합니다. 이 경우 속성 집합 이름을 propset_name 헤더에서 가져오고 키는 헤더 propset_key에 제공되며 키에 할당된 값은 변수 flow_variable에 저장됩니다.

<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <AssignVariable>
    <Name>flow_variable</Name>
    <PropertySetRef>{request.header.propset_name}.{request.header.propset_key}</PropertySetRef>
  </AssignVariable>
</AssignMessage>

<PropertySetRef> 요소에서 흐름 변수와 리터럴 문자열의 모든 조합을 사용할 수 있습니다.

예시 2

이 예시에서는 고정 키 이름(리터럴 문자열)을 사용하여 속성 집합 키의 값을 흐름 변수에 할당합니다. 이 경우 속성 집합 이름을 헤더 propset_name에서 가져오고 키는 리터럴 문자열 key1이며 키에 할당된 값은 변수 flow_variable에 저장됩니다.

<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <AssignVariable>
    <Name>flow_variable</Name>
    <PropertySetRef>{request.header.propset_name}.key1</PropertySetRef>
  </AssignVariable>
</AssignMessage>

<PropertySetRef> 요소에서 흐름 변수와 리터럴 문자열의 모든 조합을 사용할 수 있습니다.

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

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

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

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

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

  DO specify the variable name without brackets:
  <Ref>client.host</Ref>

  DO NOT use brackets:
  <Ref>{client.host}</Ref>

대상 흐름 변수의 기본값을 정의하려면 <Value><Ref>와 함께 사용합니다. <Ref>으로 지정된 흐름 변수가 존재하지 않거나 읽을 수 없거나 null인 경우 Apigee가 <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>

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

예시 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이거나 읽을 수 없거나 형식이 잘못된 경우 Apigee는 ErrorOnCopy 값을 새 변수에 할당합니다.

예시 3

<AssignVariable>의 일반적인 사용 사례는 요청과 함께 전달할 수 있는 쿼리 매개변수, 헤더, 기타 값의 기본값을 설정하는 것입니다. 예를 들어 요청이 w라는 단일 쿼리 매개변수를 사용하는 날씨 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 프록시가 유효한 결과를 반환하도록 합니다.

<Ref> 값은 request, response 속성 또는 target 객체 또는 커스텀 흐름 변수의 이름과 같은 흐름 변수여야 합니다.

<Ref>의 값에 존재하지 않는 흐름 변수를 지정할 경우 <IgnoreUnresolvedVariables> 값이 false이면 Apigee에서 오류가 발생합니다.

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

텍스트 리소스의 URL을 변수 할당의 소스로 지정합니다. Apigee는 참조된 리소스의 콘텐츠와 함께 <Name>에 지정된 흐름 변수를 로드합니다. 리소스는 XSD, XSL, WSDL, 자바스크립트, 속성 집합 또는 OpenAPI 사양일 수 있습니다.

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

<ResourceURL>로 지정된 리소스가 없는 경우: <IgnoreUnresolvedVariables> 값이 true면 Apigee는 null 값을 대상 흐름 변수로 할당하는 반면, <IgnoreUnresolvedVariables> 값이 false면 Apigee에서 오류가 발생합니다.

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
  </AssignVariable>
</AssignMessage>
      

텍스트 값은 문자열 값을 사용하며 메시지 템플릿으로 해석됩니다. 다음은 유효한 값입니다.

<ResourceURL>jsc://my-js-file.js</ResourceURL>
<ResourceURL>wsdl://{variable-goes-here}</ResourceURL>
<ResourceURL>{variable-goes-here}</ResourceURL>

예시 1

다음 예시에서는 jsc 폴더의 프록시에 로드된 JSON 리소스의 값을 흐름 변수 assigned-variable에 할당합니다.

<AssignMessage name='AM-From-ResourceURL-Proxy-JSC'>
  <AssignVariable>
    <Name>assigned-variable</Name>
    <ResourceURL>jsc://settings.json</ResourceURL>
  </AssignVariable>
</AssignMessage>

예시 2

다음 예시에서는 oas 폴더의 프록시에 로드되는 OpenAPI 사양 리소스를 흐름 변수 assigned-variable에 할당한 후 응답 본문에서 이 값을 Payload로 설정합니다.

<AssignMessage name='AM-Response'>
  <AssignVariable>
    <Name>assigned-variable</Name>
    <ResourceURL>oas://Fulfillment.yaml</ResourceURL>
  </AssignVariable>
  <Set>
    <Payload contentType='application/yaml'>{assigned-variable}</Payload>
  </Set>
</AssignMessage>

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

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

ref 속성을 사용하여 변수 값이 메시지 템플릿인 흐름 변수를 지정합니다. 예를 들어 메시지 템플릿을 개발자 앱의 맞춤 속성으로 저장할 수 있습니다. Apigee가 추가 정책을 통해 API 키 또는 보안 토큰을 확인한 후 개발자 앱을 식별하면 <AssignVariable> 요소에서 앱의 맞춤 속성에서 메시지 템플릿을 사용할 수 있으며 이는 보안 정책에서 흐름 변수로 사용할 수 있습니다. 다음 예시에서는 API 호출을 수행하는 개발자 앱의 message_template이라는 커스텀 속성에서 메시지 템플릿을 사용할 수 있다고 가정합니다. 여기서 VerifyAPIKey 정책은 앱의 API 키를 확인하는 데 사용되었습니다.

<Template 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='AV-via-template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

예시 2

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

<AssignMessage name='AV-via-template-indirectly'>
  <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})이 템플릿으로 사용됩니다. 이 패턴은 override 값을 제공하는 데 유용합니다. 경우에 따라 동적으로 설정되는 값으로 기본 템플릿(텍스트 부분)을 재정의하는 것이 좋습니다. 예를 들어 조건문은 키-값 맵에서 값을 가져와 참조된 변수를 해당 값으로 설정할 수 있습니다.

<AssignMessage name='AV-template-with-fallback'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <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>
<StatusCode>
<Verb>
<Version>

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
    <Copy source="VARIABLE_NAME">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Copy all headers -->
    <Headers/>
    <!-- or, copy specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</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>
    <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

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

<AssignMessage name="AM-copy-1">
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1"/>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1"/>
      <FormParam name="Form_Param_Name_2"/>
      <FormParam name="Form_Param_Name_3"/>
    </FormParams>
    <Path>true</Path>
    <QueryParams/>
  </Copy>
</AssignMessage>

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

예시 2

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

<AssignMessage name='AM-Copy-Response'>
  <AssignTo createNew="false" transport="http" type="response">response</AssignTo>
  <!-- first remove any existing values -->
  <Remove/>
  <!-- then copy everything from the designated message -->
  <Copy source="secondResponse"/>
</AssignMessage>

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

속성 설명 필수 여부 유형
소스

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

  • source를 지정하지 않으면 기본값은 message이며 정책이 실행되는 흐름에 따라 다른 값이 사용됩니다. 정책이 요청 흐름 내에서 실행되면 message 변수는 request 객체를 참조합니다. 정책이 응답 흐름 내에서 실행되면 message 변수는 response 객체를 참조합니다.
  • source 속성에 지정된 변수를 확인할 수 없거나 메시지 이외의 유형으로 확인되는 경우 <Copy>는 아무런 영향을 미치지 않습니다.
  • source에 지정한 값이 기본 대상 메시지인지 또는 <AssignTo>로 명시적으로 지정된 대상인지에 관계없이 대상 메시지와 다른지 확인합니다. source가 대상 메시지와 동일하면 <Copy>는 아무런 영향을 미치지 않습니다.
선택사항 문자열

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

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

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <!-- 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

다음 예시에서는 양식 매개변수 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, f2f3의 두 번째 값을 복사합니다. f3에 값이 하나만 있으면 복사되지 않습니다.

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

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

<FormParams>를 복사하면 <Copy>가 메시지의 Content-Typeapplication/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="VARIABLE_NAME">
    <!-- Copy all headers -->
    <Headers/>
    <!-- or, copy specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

예시 1

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

<AssignMessage name="AM-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, h2h3의 두 번째 값을 복사합니다. h3에 값이 하나만 있으면 복사되지 않습니다.

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

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

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

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <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="VARIABLE_NAME">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

예시 1

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

<AssignMessage name="AM-copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

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

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <!-- 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, qp2qp3의 두 번째 값을 복사합니다. qp3에 값이 하나만 있으면 복사되지 않습니다.

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

  • HTTP 동사: GET, POST, PATCH, DELETE
  • 메시지 유형: 요청

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

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

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

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <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>의 일반적인 용도는 프록시 응답 상태 코드를 대상에서 수신된 값과 다른 값으로 설정하는 것입니다.

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

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

true이면 <Copy> 요소의 source 속성에 있는 동사가 <AssignTo> 요소에 지정된 요청으로 복사됩니다.

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <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="VARIABLE_NAME">
    <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로 설정하면 Apigee는 변수를 사용할 때 발생한 오류뿐만 아니라 모든 오류를 무시합니다.

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

예시 1

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

<AssignMessage name="AM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

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

<Remove>

메시지에서 헤더, 쿼리 매개변수, 양식 매개변수 또는 메시지 페이로드를 삭제합니다. <Remove> 태그가 비어 있으면 메시지에서 모든 항목이 삭제됩니다.

영향을 받는 메시지는 요청 또는 응답일 수 있습니다. <AssignTo> 요소를 사용하여 <Remove>가 작동하는 메시지를 지정합니다.

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

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all form parameters -->
    <FormParams/>
    <!-- or, remove specific form parameters by name -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME"/>
      <!-- or -->
      <FormParam name="FORMPARAM_NAME">[false|true]</FormParam>
      ...
    </FormParams>
    <!-- Remove all headers -->
    <Headers/>
    <!-- or, remove specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Remove all query parameters -->
    <QueryParams/>
    <!-- or, remove specific query parameters by name -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME"/>
      <!-- or -->
      <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

예시 1

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

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

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

예시 2

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

<AssignMessage name="AM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

예시 3

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

<AssignMessage name="AM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all form parameters -->
    <FormParams/>
    <!-- or, remove specific form parameters by name -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME"/>
      <!-- or -->
      <FormParam name="FORMPARAM_NAME">[false|true]</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

예시 1

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

<AssignMessage name="AM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

예시 2

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

<AssignMessage name="AM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

예시 3

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

<AssignMessage name="AM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

이 예시에서는 f1, f2f3의 두 번째 값을 삭제합니다. 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" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all headers -->
    <Headers/>
    <!-- or, remove specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

예시 1

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

<AssignMessage name="AM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

예시 2

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

<AssignMessage name="AM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

예시 3

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

<AssignMessage name="AM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

예시 1

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

<AssignMessage name="AM-remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

문법

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all query parameters -->
    <QueryParams/>
    <!-- or, remove specific query parameters by name -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME"/>
      <!-- or -->
      <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

예시 1

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

<AssignMessage name="AM-remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

예시 2

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

<AssignMessage name="AM-remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

예시 3

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

<AssignMessage name="AM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

예시 4

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

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

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

  • HTTP 동사: GET, POST, PATCH, DELETE
  • 메시지 유형: 요청

<Set>

<AssignTo> 요소로 지정된 요청 또는 응답 메시지의 정보를 설정합니다. <Set>는 원래 메시지에 이미 있는 헤더, 쿼리, 양식 매개변수를 덮어쓰거나, 없으면 새로 추가합니다.

HTTP 메시지의 헤더, 쿼리 및 양식 매개변수에는 여러 값이 포함될 수 있습니다. 헤더 또는 매개변수의 추가 값을 추가하려면 <Add> 요소를 대신 사용합니다.

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

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

<AssignMessage name="AM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

예시 2

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

<AssignMessage name="AM-Overwrite-Payload">
  <Set>
    <Payload contentType="application/json">{ "status" : 42 }</Payload>
  </Set>
  <AssignTo>response</AssignTo>
</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="AM-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

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

<AssignMessage name="AM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

정책(<Set><Headers/></Set>)에서 빈 헤더를 정의하는 경우 정책은 헤더를 설정하지 않습니다. 이는 <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(예: 클라우드 출시 버전 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>의 속성을 설명합니다.

속성 설명 Presence 유형
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 name="AM-set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

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

  • HTTP 동사: GET, POST, PATCH, DELETE
  • 메시지 유형: 요청

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

<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="AM-set-statuscode-404">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

예시 2

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

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</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="AM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

예시 2

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

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

<AssignMessage name="AM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</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="AM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
 </AssignMessage>

예시 2

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

<AssignMessage name="AM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

  • 메시지 유형: 요청

커스텀 요청 메시지 만들기

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

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

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

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

기본적으로 Apigee는 커스텀 요청 메시지를 사용하지 않습니다. 커스텀 요청 메시지 생성 후 Apigee는 원래 요청으로 흐름을 계속 진행합니다. 커스텀 요청을 사용하려면 ServiceCallout 정책과 같은 정책을 프록시에 추가하고 해당 정책의 구성에서 새로 만든 요청 메시지를 명시적으로 참조합니다. 이렇게 하면 커스텀 요청을 외부 서비스 엔드포인트에 전달할 수 있습니다.

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

예시 1

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

<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>source 속성을 지정하지 않으므로 Apigee는 request 메시지를 복사 소스로 사용합니다.
    • 커스텀 메시지의 address 쿼리 매개변수를 수신 요청의 addy 쿼리 매개변수 값으로 설정합니다.
    • HTTP 동사를 GET으로 설정합니다.
  • <IgnoreUnresolvedVariables>false로 설정합니다. <IgnoreUnresolvedVariables>false인 경우 정책 구성에서 참조된 변수 중 하나가 없으면 Apigee에서 API 흐름에 오류 상태를 입력합니다.

예시 2

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

<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 정책에서 커스텀 메시지의 다양한 속성에 액세스할 수 있습니다. 다음 예시에서는 이름이 지정된 커스텀 응답에서 헤더 값을 가져와 요청 메시지의 새 헤더에 배치합니다.

<AssignMessage name="AM-Copy-Custom-Header">
  <AssignTo>request</AssignTo>
  <Set>
    <Headers>
      <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header>
    </Headers>
  </Set>
</AssignMessage>

오류 코드

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

런타임 오류

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

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

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

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

steps.assignmessage.UnresolvedVariable 500

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

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

배포 오류

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

오류 이름 원인 해결
InvalidIndex AssignMessage 정책의 <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를 사용하여 요청 경로를 설정한 다음 ServiceCallout 정책을 사용하여 외부 서비스에 요청을 보냅니다.