Mesaj İletisi politikası atayın

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
info

Ne?

AssignMessage politikası, API proxy akışı sırasında yeni istek ve yanıt mesajları oluşturur veya mevcut olanları değiştirir. Bu politika, söz konusu iletilerde aşağıdaki işlemleri yapmanıza olanak tanır:

  • İletiye yeni form parametreleri, üstbilgiler veya sorgu parametreleri ekleme
  • Mevcut özellikleri bir mesajdan diğerine kopyalama
  • Bir iletiden üstbilgileri, sorgu parametrelerini, form parametrelerini ve/veya ileti yüklerini kaldırma
  • Bir mesajdaki mevcut özelliklerin değerini ayarlama

AssignMessage politikasıyla genellikle isteğin veya yanıtın özelliklerini ekler, değiştirir ya da kaldırırsınız. Ancak, Özel istek mesajları oluşturma bölümünde açıklandığı gibi, özel bir istek veya yanıt mesajı oluşturup alternatif bir hedefe iletmek için AssignMessage politikasını da kullanabilirsiniz.

AssignMessage politikası, aşağıdaki alt öğelerle akış değişkenleri oluşturabilir veya bunları değiştirebilir:

<AssignMessage> öğesi

AssignMessage politikasını tanımlar.

Varsayılan Değer Aşağıdaki Varsayılan Politika sekmesini inceleyin.
Zorunlu mu? Zorunlu
Tür Karmaşık nesne
Üst öğe Yok
Alt Öğeler <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

<AssignMessage> öğesi şu söz dizimini kullanır:

Söz dizimi

<AssignMessage> öğesi şu söz dizimini kullanır:

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

Varsayılan politika

Aşağıdaki örnekte, Edge kullanıcı arayüzünde akışınıza bir AssignMessage politikası eklediğinizdeki varsayılan ayarlar gösterilmektedir:

<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 kullanıcı arayüzüne yeni bir AssignMessage politikası eklediğinizde şablon, olası tüm işlemler için saplar içerir. Genellikle bu politikayla hangi işlemleri yapmak istediğinizi seçer ve geri kalan alt öğeleri kaldırırsınız. Örneğin, bir kopyalama işlemi yapmak istiyorsanız <Copy> öğesini kullanın ve politikayı daha okunabilir hale getirmek için <Add>, <Remove> ve diğer alt öğeleri politikadan kaldırın.

Bu öğe, tüm politikalarda ortak olan aşağıdaki özelliklere sahiptir:

Özellik Varsayılan Zorunlu mu? Açıklama
name Yok Zorunlu

Politikanın dahili adı. name özelliğinin değeri harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içerebilir. Bu değer 255 karakteri aşamaz.

İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı, doğal bir dille etiketlemek için <DisplayName> öğesini kullanın.

continueOnError yanlış İsteğe bağlı Politika başarısız olduğunda hata döndürmek için "false" değerine ayarlayın. Bu, çoğu politika için beklenen bir durumdur. Bir politika başarısız olsa bile akış yürütmenin devam etmesi için değeri "true" olarak ayarlayın.
enabled true İsteğe bağlı Politikayı uygulamak için "true" (doğru) değerine ayarlayın. Politikayı "kapalı" hale getirmek için "false" değerine ayarlayın. Politika, bir akışa bağlı kalsa bile zorunlu kılınmaz.
async   yanlış Kullanımdan kaldırıldı Bu özellik kullanımdan kaldırıldı.

Aşağıdaki tabloda <AssignMessage> öğesinin alt öğeleriyle ilgili genel bir açıklama verilmektedir:

Alt öğe Zorunlu mu? Açıklama
Sık kullanılan işlemler
<Add> İsteğe bağlı <AssignTo> öğesiyle belirtilen ileti nesnesine bilgi ekler.

<Add>, iletiye orijinal iletide bulunmayan başlıklar veya parametreler ekler. Mevcut üstbilgilerin veya parametrelerin üzerine yazmak için <Set> öğesini kullanın.

<Copy> İsteğe bağlı source özelliğiyle belirtilen iletideki bilgileri <AssignTo> öğesiyle belirtilen ileti nesnesine kopyalar.
<Remove> İsteğe bağlı Belirtilen öğeleri, <AssignTo> öğesinde belirtilen mesaj değişkeninden siler.
<Set> İsteğe bağlı İstek veya yanıttaki mevcut özelliklerin değerlerini, <AssignTo> öğesiyle belirtilen değerlerle değiştirir.

<Set> Orijinal iletide zaten bulunan üstbilgilerin veya parametrelerin üzerine yazar. Yeni başlıklar veya parametreler eklemek için <Add> öğesini kullanın.

Diğer alt öğeler
<AssignTo> İsteğe bağlı AssignMessage politikasının hangi ileti üzerinde çalıştığını belirtir. Bu, standart istek veya yanıt ya da yeni bir özel mesaj olabilir.
<AssignVariable> İsteğe bağlı Bir akış değişkenine değer atar. Değişken yoksa <AssignVariable> tarafından oluşturulur.
<IgnoreUnresolvedVariables> İsteğe bağlı Çözümlenmemiş bir değişkenle karşılaşıldığında işlemenin durdurulup durdurulmayacağını belirler.

Bu alt öğelerin her biri sonraki bölümlerde açıklanmıştır.

Örnekler

Aşağıdaki örneklerde, AssignMessage politikasını kullanabileceğiniz bazı yöntemler gösterilmektedir:

1. Üstbilgi ekleyin

Aşağıdaki örnekte, <Add> öğesiyle isteğe bir başlık eklenmektedir:

<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. Yükü kaldırın

Aşağıdaki örnekte, <Remove> öğesiyle yanıttaki yük silinir:

<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: Yanıtı değiştirme

Aşağıdaki örnekte, mevcut bir yanıt nesnesine başlık eklenerek nesne değiştirilmektedir:

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

Bu örnekte yeni bir ileti oluşturulmaz. Bunun yerine, HTTP üst bilgisi ekleyerek mevcut bir yanıt mesajını değiştirir.

Bu örnekte <AssignTo> öğesinde değişken adı atlandığı ve type "yanıt" olarak belirtildiği için bu politika, hedef sunucu tarafından döndürülen yanıt nesnesini değiştirir.

Bu politika tarafından yanıt mesajına eklenen HTTP üst bilgisi, LookupCache politikası tarafından doldurulan bir değişkenden türetilir. Bu nedenle, bu Mesaj Atama politikası tarafından değiştirilen yanıt mesajı, sonuçların önbellekten çekilip çekilmediğini belirten bir HTTP üst bilgisi içerir. Yanıt başlıklarını ayarlamak, hata ayıklama ve sorun giderme için kullanışlı olabilir.

4. adım: Dinamik içeriği ayarlayın

Yanıt ve istek mesajlarının yüküne dinamik içerik yerleştirmek için Assign Message'ı kullanabilirsiniz.

Edge akışı değişkenlerini bir XML yüküne yerleştirmek için belirlenen değişkeni süslü parantez içine alın (ör. {prefix.name}).

Aşağıdaki örnekte, user-agent HTTP üstbilgisi akış değişkeninin değeri User-agent adlı bir XML öğesine yerleştirilmektedir:

<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 yüklerinde, aşağıdaki örnekte gösterildiği gibi sınırlayıcı karakterlerle variablePrefix ve variableSuffix özelliklerini kullanarak değişkenler ekleyebilirsiniz:

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

Akış değişkenlerinin tam listesi için Akış değişkenleri referansı başlıklı makaleyi inceleyin.

Cloud sürümü 16.08.17'den itibaren değişken eklemek için küme parantezlerini de kullanabilirsiniz.

5: Sorgu parametresini kaldırma

Aşağıdaki örnekte, apikey sorgu parametresi istekten kaldırılıyor:

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

Kullanıcı kimlik doğrulaması için VerifyAPIKey politikası'nı kullandığınızda, apikey sorgu parametresini istek mesajından kaldırmanız en iyi uygulamadır. Bunu, hassas anahtar bilgilerinin arka uç hedefine iletilmesini önlemek için yaparsınız.

6: Değişkenleri ayarlama/alma

Aşağıdaki örnekte üç Assign Message politikası kullanılmaktadır:

  1. İstek içinde statik değerlere sahip üç akış değişkeni oluşturur.
  2. İstek akışındaki ikinci bir politikada akış değişkenlerini dinamik olarak alır.
  3. Bunları yanıtın yükünde ayarlar.
<!-- 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>

İlk politikada, <AssignVariable> öğesi istekte üç değişken oluşturup ayarlar. Her <Name> öğesi bir değişken adı belirtir ve <Value> değeri belirtir.

İkinci politika, değerleri okumak için <AssignVariable> öğesini kullanır ve üç yeni değişken oluşturur:

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

İkinci politikada, <Ref> öğesi kaynak değişkene referans verirken <Name> öğeleri yeni değişkenlerin adlarını belirtir. <Ref> öğesi tarafından referans verilen değişkene erişilemiyorsa <Value> öğesi tarafından belirtilen değeri kullanabilirsiniz.

Bu politika grubunu denemek için:

  1. 1. ve 2. politikaları istek akışına ekleyin. 1 numaralı politikayı 2 numaralı politikadan önce yerleştirdiğinizden emin olun.
  2. Yanıt akışına üçüncü politikayı ekleyin.
  3. Üçüncü politika, yanıtı değişkenlerle doldurmak için <Set> öğesini kullanır. Aşağıdaki örnek, Edge'in istemciye döndürdüğü yanıtta bir XML yükü oluşturur:
    <!-- 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>'da akış değişkenlerine erişmek için söz diziminin değişkenleri küme ayraçları içine almak olduğunu unutmayın.

    <Payload> öğesinin contentType özelliğini "application/xml" olarak ayarladığınızdan emin olun.

  4. API proxy'nize istek gönderin. Örneğin:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    İsteğe bağlı olarak, sonuçları xmllint gibi bir yardımcı programdan geçirerek XML'nin düzgün biçimlendirilmiş bir yapıda gösterilmesini sağlayabilirsiniz:

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

    Yanıtın gövdesi aşağıdaki gibi görünmelidir:

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

7: Hizmet açıklama metni yanıtı başlıklarını alma

Aşağıdaki örnekte, API proxy isteğinde bir ServiceCallout politikası olduğunu ve callout yanıtının aynı ada sahip birden fazla başlık (Set-Cookie) içerdiğini varsayalım. Service Callout'un yanıt değişkeninin varsayılan calloutResponse olduğunu varsayarsak aşağıdaki politika, ikinci Set-Cookie başlık değerini alır.

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

Tüm başlık değerlerini listelemek için bunun yerine aşağıdaki değişkeni kullanın:

{calloutResponse.header.Set-Cookie.values}

Bu referanstaki her alt öğe için ek örnekler verilmiştir. Daha fazla örnek için GitHub'daki AssignMessage örneğine bakın.

Alt öğe referansı

Bu bölümde, <AssignMessage> öğesinin alt öğeleri açıklanmaktadır.

<Add>

İsteğe veya yanıta, <AssignTo> öğesiyle belirtilen bilgileri ekler.

<Add> öğesi, orijinal iletide bulunmayan yeni özellikler ekler. Mevcut özelliklerin değerlerini değiştirmek için <Set> öğesini kullanın.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Karmaşık tür
Üst öğe <AssignMessage>
Alt Öğeler <FormParams>
<Headers>
<QueryParams>

<Add> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte, ilk istekten üç sorgu dizesi parametresinin değerlerini almak ve bunları hedef uç nokta isteğinde form parametreleri olarak ayarlamak için <FormParams> öğesi kullanılmaktadır:

<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. Örnek

Aşağıdaki örnekte, hedef uç nokta isteğine User-Agent üstbilgisini eklemek için <Headers> öğesi kullanılmaktadır:

<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. Örnek

Aşağıdaki örnekte, isteğe statik değer içeren tek bir sorgu parametresi eklemek için <QueryParams> öğesi kullanılmaktadır:

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

Bu örnekte, istek öncesi akışta <Add> kullanılmaktadır. İzleme aracı gibi bir araçtaki sonuçlara bakarsanız "http://httpbin.org/get" isteği "http://httpbin.org/get?myParam=42" olur.

<Add> alt öğeleri, mesaj şablonu oluşturma olarak bilinen dinamik dize değiştirme özelliğini destekler.

<FormParams> (<Add> öğesinin alt öğesi)

İstek mesajına yeni form parametreleri ekler. Bu öğenin yanıt mesajı üzerinde hiçbir etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <FormParam> öğe dizisi
Üst öğe <Add>
Alt Öğeler <FormParam>

<FormParams> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte, isteğe tek bir form parametresi ("answer") ve statik bir değer ("42") ekleniyor:

<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. Örnek

Aşağıdaki örnekte, name sorgu dizesi parametresinin değeri alınır ve isteğe form parametresi olarak eklenir:

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

Bu örnekte <AssignTo> ile hedef belirtilmediğini unutmayın. Bu politika, isteğe yalnızca parametresini ekler.

3. Örnek

Aşağıdaki örnekte, isteğe birden fazla form parametresi ekleniyor:

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

Bu örnek, sorgu dizesi parametrelerini kaynak isteğinden alır ve bunları hedef uç noktaya gönderilen isteğe form parametreleri olarak ekler.

Akışa bakmak için İzleme aracını kullanabilirsiniz. İsteğin gövdesinin, başlangıçta sorgu dizesi parametreleri olarak iletilen URL olarak kodlanmış form verilerini içerdiğini görürsünüz:

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

<FormParams> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • HTTP fiili: POST
  • Mesaj türü: İstek
  • Aşağıdakilerden biri veya her ikisi:
    • Form verileri: Bir değere veya "" (boş dize) olarak ayarlanır. Örneğin, curl ile -d "" isteğinize ekleyin.
    • Content-Length üstbilgisi: 0 olarak ayarlayın (orijinal istekte veri yoksa; aksi takdirde geçerli uzunluk, bayt cinsinden). Örneğin, curl ile isteğinize -H "Content-Length: 0" ekleyin.

Örneğin:

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

<FormParams> eklediğinizde Edge, mesajı hedef hizmete göndermeden önce isteğin Content-Type üstbilgisini "application/x-www-form-urlencoded" olarak ayarlar.

<Headers> (<Add> öğesinin alt öğesi)

<AssignTo> öğesiyle belirtilen istek veya yanıta yeni başlıklar ekler.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <Header> öğe dizisi
Üst öğe <Add>
Alt Öğeler <Header>

<Headers> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, istek iletisine user-agent üstbilgisi eklenir ve request.user.agent akış değişkeninin değeri bu üstbilgiye atanır.

<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> öğesinin alt öğesi)

İsteğe yeni sorgu parametreleri ekler. Bu öğenin yanıt üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <QueryParam> öğe dizisi
Üst öğe <Add>
Alt Öğeler <QueryParam>

<QueryParams> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, isteğe "myParam" sorgu parametresi ekleniyor ve bu parametreye "42" değeri atanıyor:

<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> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • HTTP fiili: GET
  • Mesaj türü: İstek

Ayrıca, sorgu parametrelerini yalnızca <AssignTo> öğesinin type özelliği bir istek mesajı olduğunda ayarlayabilirsiniz. Yanıt üzerinde ayarlamanın bir etkisi yoktur.

Politikanızda boş bir sorgu parametreleri dizisi tanımlarsanız (<Add><QueryParams/></Add>), politika herhangi bir sorgu parametresi eklemez. Bu, <QueryParams> öğesini atlamayla aynıdır.

<AssignTo>

AssignMessage politikasının hangi nesne üzerinde çalışacağını belirler. Seçenekler şunlardır:

  • İstek mesajı: API proxy'si tarafından alınan request
  • Yanıt mesajı: Hedef sunucudan döndürülen response
  • Özel mesaj: Özel bir istek veya yanıt nesnesi

Bazı durumlarda, AssignMessage politikasının etkilediği nesneyi değiştiremeyeceğinizi unutmayın. Örneğin, yanıttaki sorgu parametrelerini (<QueryParams>) veya form parametrelerini (<FormParams>) eklemek ya da değiştirmek için <Add> veya <Set> kullanamazsınız. Yalnızca istekteki sorgu parametrelerini ve form parametrelerini değiştirebilirsiniz.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Dize
Üst öğe <AssignMessage>
Alt Öğeler Yok

<AssignTo> belirtmezseniz politika, varsayılan istek veya yanıt üzerinde işlem yapar. Bu, politikanın yürütüldüğü yere bağlıdır. Politika, istek akışında yürütülürse istek mesajını etkiler. Yanıt akışında yürütülürse politika, varsayılan olarak yanıtı etkiler.

<AssignTo> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte, hedefin hedef uç noktaya gönderilecek orijinal istek olduğu belirtilmektedir:

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

Bu örnekte createNew "false" (varsayılan) olarak ayarlandığı için yeni bir istek oluşturulmaz. Bu politikadaki tüm işlemler, orijinal isteği etkiler.

2. Örnek

Aşağıdaki örnekte yeni bir istek nesnesi oluşturuluyor:

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

Yeni bir istek veya yanıt nesnesi oluşturduğunuzda AssignMessage politikası politikasının diğer öğeleri (ör. <Add>, <Set> ve <Set>) bu yeni istek nesnesi üzerinde işlem yapar.

Akışın ilerleyen aşamalarında diğer politikalarda yeni istek nesnesine erişebilir veya yeni istek nesnesini ServiceCallout politikası ile harici bir hizmete gönderebilirsiniz.

3. Örnek

Aşağıdaki örnekte "MyRequestObject" adlı yeni bir istek nesnesi oluşturuluyor:

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

Yeni bir istek veya yanıt nesnesi oluşturduğunuzda AssignMessage politikası politikasının diğer öğeleri (ör. <Add>, <Set> ve <Set>) bu yeni istek nesnesi üzerinde işlem yapar.

Akışın ilerleyen aşamalarında diğer politikalarda yeni istek nesnesine erişebilir veya yeni istek nesnesini ServiceCallout politikası ile harici bir hizmete gönderebilirsiniz.

Aşağıdaki tabloda <AssignTo> öğesinin özellikleri açıklanmaktadır:

Özellik Açıklama Zorunlu mu? Tür
createNew

Bu politikanın değer atarken yeni bir ileti oluşturup oluşturmayacağını belirler.

"Doğru" ise politika, type tarafından belirtilen türde yeni bir değişken oluşturur ("istek" veya "yanıt"). Yeni değişkenin adını belirtmezseniz politika, type değerine göre yeni bir istek veya yanıt nesnesi oluşturur.

"Yanlış" ise politika iki şekilde yanıt verir:

  • <AssignTo> değişken adını bir isteğe veya yanıta dönüştürebiliyorsa işleme devam eder. Örneğin, politika bir istek akışındaysa değişken, istek nesnesidir. Politika bir yanıttaysa değişken, yanıt nesnesidir.
  • <AssignTo> çözülemezse veya mesaj türü olmayan bir değere çözülürse politika hata verir.

createNew belirtilmemişse politika iki şekilde yanıt verir:

  • <AssignTo> bir iletiye çözümlenirse işleme sonraki adımdan devam eder.
  • <AssignTo> çözülemiyorsa veya mesaj türü olmayan bir türe çözülüyorsa type içinde belirtilen türde yeni bir değişken oluşturulur.
İsteğe bağlı Boole
transport

İstek veya yanıt mesajı türü için aktarım türünü belirtir.

Varsayılan değer "http"dir (desteklenen tek değer).

İsteğe bağlı Dize
type createNew "true" olduğunda yeni mesajın türünü belirtir. Geçerli değerler "request" veya "response"tur.

Varsayılan değer "request"tir. Bu özelliği atlarsanız Edge, bu politikanın akışta yürütüldüğü yere bağlı olarak bir istek veya yanıt oluşturur.

İsteğe bağlı Dize

<AssignVariable>

Bir hedef akış değişkenine (ör. değeri AssignMessage politikası tarafından ayarlanan bir değişken) değer atar. Akış değişkeni yoksa <AssignVariable> tarafından oluşturulur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Karmaşık tür
Üst öğe <AssignMessage>
Alt Öğeler <Name> (zorunlu)
<Ref>
<Template>
<Value>

Hedef akış değişkenine atadığınız değer aşağıdakilerden biri olabilir:

  • Değişmez dize: Hedef akış değişkeni için değişmez bir dize değeri belirtmek üzere <Value> alt öğesini kullanın.
  • Akış değişkeni: Hedef akış değişkeni için mevcut bir akış değişkeninin değerini belirtmek üzere <Ref> alt öğesini kullanın. Kaynak olarak kullanılabilecek akış değişkenlerinin tam listesi için Akış değişkenleri referansı başlıklı makaleyi inceleyin.
  • Mesaj şablonu: Hedef akış değişkeni için bir mesaj şablonu belirtmek üzere <Template> alt öğesini kullanın.

<AssignVariable> öğesi şu söz dizimini kullanır:

Söz dizimi

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

Kaynak değişkenini belirtmek için <Ref> öğesini kullanın. <Ref> tarafından referans verilen değişkene erişilemiyorsa Edge, <Value> öğesi tarafından belirtilen değeri kullanır. <Template> öğesini tanımlarsanız diğer alt öğelere göre öncelikli olur.

1. Örnek

Aşağıdaki örnekte, yeni bir değişkenin değeri, myvar, değişmez değer "42" olarak ayarlanır:

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

2. Örnek

Aşağıdaki örnekte, akış değişkeni request.header.user-agent'nın değeri hedef akış değişkeni myvar'ye, sorgu parametresi country'nin değeri ise hedef akış değişkeni Country'e atanır:

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

İki atamadan biri başarısız olursa Edge, hedef akış değişkenine "ErrorOnCopy" değerini atar.

myvar veya Country akış değişkenleri yoksa <AssignVariable> bunları oluşturur.

3. Örnek

Aşağıdaki örnekte, iki bağlam değişkenini aralarında değişmez bir dize (tire) olacak şekilde birleştirmek için <Template> alt öğesi kullanılmaktadır:

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

<AssignVariable>, genellikle bir sorgu parametresi, başlık veya istekle birlikte iletilebilen başka bir değer için varsayılan değer ayarlamak amacıyla kullanılır. Bunu, <Ref> ve <Value> alt öğelerinin bir kombinasyonuyla yapabilirsiniz. Daha fazla bilgi için <Ref> ile ilgili örneklere bakın.

<Name> (<AssignVariable> öğesinin alt öğesi)

Hedef akış değişkeninin adını belirtir (ör. değeri AssignMessage politikası tarafından ayarlanan değişken). <AssignVariable> içinde adı belirtilen değişken yoksa politika, bu adla bir değişken oluşturur.

Varsayılan Değer Yok
Zorunlu mu? Zorunlu
Tür Dize
Üst öğe <AssignVariable>
Alt Öğeler Yok

<Name> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte hedef değişken myvar olarak belirtilir ve bu değişken, değişmez değer "42" olarak ayarlanır:

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

myvar yoksa <AssignVariable> tarafından oluşturulur.

<Ref> (<AssignVariable> öğesinin alt öğesi)

Atamanın kaynağını akış değişkeni olarak belirtir. Akış değişkeni, önceden tanımlanmış akış değişkenlerinden (Akış değişkenleri referansı bölümünde listelenmiştir) biri veya oluşturduğunuz özel bir akış değişkeni olabilir.

<Ref> değeri her zaman akış değişkeni olarak yorumlanır. Değeri dize değişmez değeri olarak belirtemezsiniz. Değişmez bir dize değeri atamak için bunun yerine <Value> öğesini kullanın.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Dize
Üst öğe <AssignVariable>
Alt Öğeler Yok

<Ref> ile bir akış değişkeni belirttiğinizde, normalde bir akış değişkenine referans vermek için kullandığınız kapsayan köşeli parantezleri "{}" atlayın. Örneğin, yeni değişkeninizin değerini client.host akış değişkeninin değerine ayarlamak için:

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

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

Hedef akış değişkeni için varsayılan bir değer tanımlamak üzere <Ref> ile birlikte <Value> kullanın. <Ref> tarafından belirtilen akış değişkeni yoksa, okunamıyorsa veya null ise Edge bunun yerine hedef akış değişkenine <Value> değerini atar.

<Ref> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, akış değişkeni request.header.user-agent'nın değeri hedef akış değişkeni myvar'ye, sorgu parametresi country'nin değeri ise Country değişkenine atanır:

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

Bu örnekte, Edge'de her iki atama için de varsayılan (veya yedek) değer belirtilmemiştir.

2. Örnek

Aşağıdaki örnekte, akış değişkeni request.header.user-agent'nın değeri hedef akış değişkeni myvar'ye, sorgu parametresi country'nin değeri ise Country değişkenine atanır:

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

Bu örnekte, request.header.user-agent akış değişkeninin veya Country sorgu parametresinin değerleri boş, okunamayan ya da hatalı biçimlendirilmişse Edge, yeni değişkenlere "ErrorOnCopy" değerini atar.

3. Örnek

<AssignVariable> için yaygın bir kullanım alanı, bir sorgu parametresinin, başlığın veya istekle birlikte iletilebilecek başka bir değerin varsayılan değerini ayarlamaktır. Örneğin, isteğin "w" adlı tek bir sorgu parametresi aldığı bir hava durumu API proxy'si oluşturursunuz. Bu parametre, hava durumunu öğrenmek istediğiniz şehrin kimliğini içerir. İstek URL'si şu biçimdedir:

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

"w" için varsayılan bir değer tanımlamak üzere aşağıdakine benzer bir AssignMessage politikası oluşturun:

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

Bu örnekte, <AssignVariable>, request.queryparam.w değerini alır ve bu değeri kendisine atar. Akış değişkeni null ise (yani "w" sorgu parametresi istekten çıkarılmışsa) bu örnekte <Value> öğesindeki varsayılan değer kullanılır. Bu nedenle, "w" sorgu parametresinin atlandığı bu API proxy'sine istekte bulunabilirsiniz:

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

...ve API proxy'sinin geçerli bir sonuç döndürmesini sağlamaya devam edin.

<Value> kullanılırkenki durumun aksine, <Ref> değeri request, response veya target nesnesinin özelliği gibi bir akış değişkeni olmalıdır. Değer, oluşturduğunuz özel bir akış değişkeni de olabilir.

<Ref> değeri için mevcut olmayan bir akış değişkeni belirtirseniz ve <IgnoreUnresolvedVariables> değeri "true" ise Edge hata verir.

<Template> (<AssignVariable> öğesinin alt öğesi)

Bir mesaj şablonu belirtir. İleti şablonu, politika yürütülürken değişken dize değiştirme işlemi yapmanıza olanak tanır ve değişmez dizeleri küme parantezleri içine alınmış değişken adlarıyla birleştirebilir. Ayrıca, ileti şablonları kaçış ve büyük/küçük harf dönüştürme gibi işlevleri destekler.

Değişkenin değerinin ileti şablonu olduğu bir akış değişkeni belirtmek için ref özelliğini kullanın. Örneğin, bir mesaj şablonunu geliştirici uygulamasında özel özellik olarak saklayabilirsiniz. Edge, API anahtarını veya güvenlik jetonunu doğruladıktan sonra (ek bir politika aracılığıyla) geliştirici uygulamasını tanımladığında <AssignVariable> öğesi, uygulamanın özel özelliğindeki mesaj şablonunu kullanabilir. Bu şablon, güvenlik politikasından akış değişkeni olarak kullanılabilir. Aşağıdaki örnekte, mesaj şablonunun API çağrısı yapan geliştirici uygulamasındaki message_template adlı bir müşteri özelliğinde kullanılabildiği varsayılmaktadır. Burada, uygulamanın API anahtarını doğrulamak için VerifyAPIKey politikası kullanılmıştır:

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

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Dize
Üst öğe <AssignVariable>
Alt Öğeler Yok

<Template> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, iki bağlam değişkenini aralarında değişmez bir dize (tire) olacak şekilde birleştirmek için mesaj şablonu söz dizimi kullanılmaktadır:

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

2. Örnek

Aşağıdaki örnekte, değişkenin değerinin önceden tanımlanmış bir mesaj şablonu olduğu bir akış değişkeni belirtilmektedir. Politikayı değiştirmeniz gerekmeden çalışma zamanında önceden tanımlanmış bir şablon eklemek istiyorsanız bu seçeneği kullanın:

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

  </AssignVariable>
</AssignMessage>

3. Örnek

Aşağıdaki örnekte bir akış değişkeni ve bir metin değeri belirtilmektedir. Bu durumda, referans verilen değişken boş değilse bu değer şablon olarak kullanılır. Referans verilen değer boşsa metin değeri (bu örnekte {system.uuid}-{messageid}) şablon olarak kullanılır. Bu kalıp, bazı durumlarda varsayılan şablonu (metin kısmı) dinamik olarak ayarlanan değerlerle geçersiz kılmak istediğinizde "geçersiz kılma" değeri sağlamak için kullanışlıdır. Örneğin, koşullu bir ifade anahtar/değer çifti haritasından bir değer alıp referans verilen değişkeni bu değere ayarlayabilir:

<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> öğesinin alt öğesi)

<AssignVariable> ile ayarlanan hedef akış değişkeninin değerini tanımlar. Değer her zaman değişmez bir dize olarak yorumlanır. Değeri parantez içine alsanız ("{}") bile akış değişkeni olarak kullanamazsınız. Akış değişkeni kullanmak için bunun yerine <Ref> kullanın.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Dize
Üst öğe <AssignVariable>
Alt Öğeler Yok

<Ref> öğesiyle birlikte kullanıldığında <Value> varsayılan (veya yedek) değer olarak işlev görür. <Ref> belirtilmemişse, çözümlenemiyorsa veya boşsa <Value> değeri kullanılır.

<Value> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, hedef akış değişkeni myvar'nın değeri, değişmez değer olan "42" olarak ayarlanır:

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

2. Örnek

Aşağıdaki örnekte, akış değişkeni request.header.user-agent'nın değeri akış değişkeni myvar'ye, sorgu parametresi country'nin değeri ise Country değişkenine atanır:

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

Herhangi bir atama başarısız olursa <AssignVariable>, hedef akış değişkenine "ErrorOnCopy" değerini atar.

<Copy>

source özelliğiyle belirtilen iletideki değerleri, <AssignTo> öğesiyle belirtilen iletiye kopyalar. <AssignTo> ile bir hedef belirtmezseniz bu politika, akışta nerede yürütüldüğüne bağlı olarak değerleri isteğe veya yanıta kopyalar.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Dize
Üst öğe <AssignMessage>
Alt Öğeler <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

<Copy> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte, bir üstbilgi, üç form parametresi, yol ve tüm sorgu parametreleri istekten yeni bir özel isteğe kopyalanıyor:

<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> öğesi şu özelliklere sahiptir:

Özellik Açıklama Zorunlu mu? Tür
kaynak

Kopyanın kaynak nesnesini belirtir.

  • source belirtilmezse basit mesaj olarak değerlendirilir. Örneğin, politika istek akışındaysa kaynak varsayılan olarak request nesnesi olur. Politika yanıt akışındaysa varsayılan olarak response nesnesine ayarlanır. source öğesini atlarsanız kopyanın kaynağı olarak bir akış değişkenine mutlak başvuru kullanabilirsiniz. Örneğin, değeri {request.header.user-agent} olarak belirtin.
  • Kaynak değişken çözümlenemezse veya mesaj türü olmayan bir türe çözümlenirse, <Copy> yanıt vermez.
İsteğe bağlı Dize

<FormParams> (<Copy> öğesinin alt öğesi)

<Copy> öğesinin source özelliği tarafından belirtilen istekteki form parametrelerini, <AssignTo> öğesi tarafından belirtilen isteğe kopyalar. Bu öğenin yanıt üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <FormParam> öğeleri dizisi veya boş dizi
Üst öğe <Copy>
Alt Öğeler <FormParam>

<FormParams> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte, istekten "MyCustomRequest" özel isteğine tek bir form parametresi kopyalanıyor:

<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. Örnek

Aşağıdaki örnekte, tüm form parametreleri "MyCustomRequest" adlı özel isteğe kopyalanır:

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

3. Örnek

Aşağıdaki örnekte üç form parametresi, "MyCustomRequest" adlı özel isteğe kopyalanıyor:

<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. Örnek

Aynı ada sahip birden fazla form parametresi varsa aşağıdaki söz dizimini kullanın:

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

Bu örnekte "f1", "f2" ve "f3"ün ikinci değeri kopyalanır. "f3" yalnızca bir değere sahipse kopyalanmaz.

<FormParams> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • HTTP fiili: POST
  • Mesaj türü: Yanıt
  • Aşağıdakilerden biri veya her ikisi:
    • Form verileri: Bir değere veya "" (boş dize) olarak ayarlanır. Örneğin, curl ile -d "" isteğinize ekleyin.
    • Content-Length üstbilgisi: 0 olarak ayarlayın (orijinal istekte veri yoksa; aksi takdirde geçerli uzunluk). Örneğin, curl ile isteğinize -H "Content-Length: 0" ekleyin.

<FormParams> kopyaladığınızda <Copy>, iletiyi hedef hizmete göndermeden önce iletinin Content-Type değerini "application/x-www-form-urlencoded" olarak ayarlar.

<Headers> (<Copy> öğesinin alt öğesi)

<Copy> öğesinin source özelliğiyle belirtilen istek veya yanıt mesajındaki HTTP üst bilgilerini, <AssignTo> öğesiyle belirtilen istek veya yanıt mesajına kopyalar.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <Header> öğeleri dizisi veya boş dizi
Üst öğe <Copy>
Alt Öğeler <Header>

<Headers> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte, user-agent üstbilgisi istekten yeni ve özel istek nesnesine kopyalanır:

<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. Örnek

Tüm başlıkları kopyalamak için aşağıdaki örnekte gösterildiği gibi boş bir <Headers> öğesi kullanın:

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

3. Örnek

Aynı ada sahip birden fazla başlık varsa aşağıdaki sözdizimini kullanın:

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

Bu örnekte "h1", "h2" ve "h3"ün ikinci değeri kopyalanır. "h3" yalnızca bir değere sahipse kopyalanmaz.

<Path> (<Copy> öğesinin alt öğesi)

Yolun kaynak isteğinden hedef isteğe kopyalanıp kopyalanmayacağını belirler. Bu öğenin yanıt üzerinde etkisi yoktur.

"Doğru" ise bu politika, <Copy> öğesinin source özniteliği tarafından belirtilen istek mesajındaki yolu kaynağından <AssignTo> öğesi tarafından belirtilen istek mesajına kopyalar.

Varsayılan Değer Yanlış
Zorunlu mu? İsteğe bağlı
Tür Boole
Üst öğe <Copy>
Alt Öğeler Yok

<Path> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, AssignMessage politikasının yolu kaynak isteğinden yeni, özel istek nesnesine kopyalaması gerektiği belirtilmektedir:

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

<Path> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: İstek

<Payload> (<Copy> öğesinin alt öğesi)

Yükün kaynaktan hedefe kopyalanıp kopyalanmayacağını belirler. Kaynak ve hedef, istek veya yanıt olabilir.

"Doğru" ise bu politika, <Copy> öğesinin source özelliğiyle belirtilen iletiden yükü alıp <AssignTo> öğesiyle belirtilen iletiye kopyalar.

Varsayılan Değer Yanlış
Zorunlu mu? İsteğe bağlı
Tür Boole
Üst öğe <Copy>
Alt Öğeler Yok

<Payload> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, istek yükünün istekten yanıta kopyalanması için <Payload> değeri "true" olarak ayarlanmıştır:

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

<QueryParams> (<Copy> öğesinin alt öğesi)

<Copy> öğesinin source özelliğiyle belirtilen istekteki sorgu dizesi parametrelerini <AssignTo> öğesiyle belirtilen isteğe kopyalar. Bu öğenin yanıt üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <QueryParam> öğeleri dizisi veya boş dizi
Üst öğe <QueryParam>
Alt Öğeler Yok

<QueryParams> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte, istekteki "my_param" sorgu parametresi yeni bir özel istek nesnesine kopyalanıyor:

<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. Örnek

Aşağıdaki örnekte, istekteki tüm sorgu parametreleri yeni bir özel istek nesnesine kopyalanır:

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

3. Örnek

Aynı ada sahip birden fazla sorgu parametresi varsa aşağıdaki söz dizimini kullanın:

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

Bu örnekte "qp1", "qp2" ve "qp3"ün ikinci değeri kopyalanır. "qp3" yalnızca bir değere sahipse kopyalanmaz.

<QueryParams> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • HTTP fiili: GET
  • Mesaj türü: İstek

<ReasonPhrase> (<Copy> öğesinin alt öğesi)

Neden ifadesinin kaynak yanıttan hedef yanıta kopyalanıp kopyalanmayacağını belirler. Bu öğenin istek üzerinde etkisi yoktur.

"true" ise bu politika, <Copy> öğesinin source özelliği tarafından belirtilen yanıttan ReasonPhrase from değerini kopyalayarak <AssignTo> öğesi tarafından belirtilen yanıta to yapıştırır.

Varsayılan Değer Yanlış
Zorunlu mu? İsteğe bağlı
Tür Boole
Üst öğe <Copy>
Alt Öğeler Yok

<ReasonPhrase> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte <ReasonPhrase> "true" olarak ayarlanır. Bu da <Copy>'nin, varsayılan yanıttaki neden ifadesini özel bir yanıt nesnesine kopyalamasına neden olur:

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

<ReasonPhrase> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: Yanıt

<StatusCode> (<Copy> öğesinin alt öğesi)

Durum kodunun kaynak yanıttan hedef yanıta kopyalanıp kopyalanmayacağını belirler. Bu öğenin istek üzerinde etkisi yoktur.

"Doğru" ise bu politika, <Copy> öğesinin source özelliği tarafından belirtilen yanıt mesajındaki durum kodunu <AssignTo> öğesi tarafından belirtilen yanıt mesajına kopyalar.

Varsayılan Değer Yanlış
Zorunlu mu? İsteğe bağlı
Tür Boole
Üst öğe <Copy>
Alt Öğeler Yok

<StatusCode> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte <StatusCode> "true" olarak ayarlanır. Bu işlem, durum kodunu varsayılan yanıt nesnesinden yeni ve özel bir yanıt nesnesine kopyalar:

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

<StatusCode> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: Yanıt

<StatusCode>'nın yaygın bir kullanım alanı, <AssignTo>'ın createNew özelliği "true" olarak ayarlandığında proxy yanıtının, hedeften alınan yanıtla aynı duruma sahip olmasını sağlamaktır.

<Verb> (<Copy> öğesinin alt öğesi)

HTTP fiilinin kaynak isteğinden hedef isteğe kopyalanıp kopyalanmayacağını belirler. Bu öğenin yanıt üzerinde etkisi yoktur.

"true" ise <Copy> öğesinin source özelliğinde bulunan fiili, <AssignTo> öğesinde belirtilen isteğe kopyalar.

Varsayılan Değer Yanlış
Zorunlu mu? İsteğe bağlı
Tür Boole
Üst öğe <Copy>
Alt Öğeler Yok

<Verb> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte <Verb> değeri "true" olarak ayarlanır. Bu işlem, fiili varsayılan istekten yeni ve özel bir isteğe kopyalar:

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

<Verb> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: İstek

<Version> (<Copy> öğesinin alt öğesi)

HTTP sürümünün kaynak isteğinden hedef isteğe kopyalanıp kopyalanmayacağını belirler. Bu öğenin yanıt üzerinde etkisi yoktur.

"Doğru" ise <Copy> öğesinin source özelliğinde bulunan HTTP sürümünü, <AssignTo> öğesi tarafından belirtilen nesneye kopyalar.

Varsayılan Değer Yanlış
Zorunlu mu? İsteğe bağlı
Tür Boole
Üst öğe <Copy>
Alt Öğeler Yok

<Version> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnek, varsayılan istek nesnesindeki sürümü yeni ve özel bir istek nesnesine kopyalayan istekte <Version> değerini "true" olarak ayarlar:

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

<Version> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: İstek

<DisplayName>

Yönetim kullanıcı arayüzü proxy düzenleyicisinde politikayı farklı ve daha doğal bir adla etiketlemek için name özelliğine ek olarak kullanın.

<DisplayName> öğesi tüm politikalar için ortaktır.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı. <DisplayName> değerini atlarsanız politikanın name özelliğinin değeri kullanılır
Tür Dize
Üst Öğe <PolicyElement>
Alt Öğeler Yok

<DisplayName> öğesi şu söz dizimini kullanır:

Söz dizimi

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

Örnek

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

<DisplayName> öğesinin özelliği veya alt öğesi yoktur.

<IgnoreUnresolvedVariables>

Çözümlenmemiş bir değişkenle karşılaşıldığında işlemenin durdurulup durdurulmayacağını belirler.

Varsayılan Değer Yanlış
Zorunlu mu? İsteğe bağlı
Tür Boole
Üst öğe <AssignMessage>
Alt Öğeler Yok

Çözümlenmemiş değişkenleri yoksaymak ve işleme devam etmek için true olarak ayarlayın; aksi takdirde false. Varsayılan değer false'dır.

<IgnoreUnresolvedVariables> değerini true olarak ayarlamak, <AssignMessage> değerini continueOnError olarak ayarlamaktan farklıdır. Çünkü bu işlem, değişkenlerin değerlerini ayarlama ve alma işlemine özeldir.true continueOnError değerini true olarak ayarlarsanız Edge, yalnızca değişkenler kullanılırken karşılaşılan hataları değil, tüm hataları yoksayar.

<IgnoreUnresolvedVariables> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte <IgnoreUnresolvedVariables> değeri "true" olarak ayarlanır:

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

<Remove>

İletiden üstbilgileri, sorgu parametrelerini, form parametrelerini ve/veya ileti yükünü kaldırır. Mesaj, bir istek veya yanıt olabilir. Hangi mesajın <Remove> üzerinde işlem yapacağını <AssignTo> öğesini kullanarak belirtirsiniz.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Karmaşık tür
Üst öğe <AssignMessage>
Alt Öğeler <FormParams>
<Headers>
<Payload>
<QueryParams>

<Remove> için yaygın bir kullanım alanı, arka uç sunucusuna iletilmesini önlemek amacıyla gelen istek nesnesinden hassas bilgiler içeren bir sorgu parametresini silmektir.

<Remove> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte, iletinin gövdesi yanıttan kaldırılıyor:

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

Bu politika, yanıt akışında yanıtın gövdesini kaldırır ve istemciye yalnızca HTTP üstbilgilerini döndürür.

2. Örnek

Aşağıdaki örnekte, gelen istekten tüm form parametreleri ve bir sorgu parametresi kaldırılıyor:

<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> öğesinin alt öğesi)

Belirtilen form parametrelerini istekten kaldırır. Bu öğenin yanıt üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <FormParam> öğeleri dizisi veya boş dizi
Üst öğe <Remove>
Alt Öğeler <FormParam>

<FormParams> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnek, istekten üç form parametresini kaldırır:

<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. Örnek

Aşağıdaki örnek, istekteki tüm form parametrelerini kaldırır:

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

3. Örnek

Aynı ada sahip birden fazla form parametresi varsa aşağıdaki söz dizimini kullanın:

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

Bu örnekte "f1", "f2" ve "f3"ün ikinci değeri kaldırılıyor. "f3" yalnızca bir değere sahipse kaldırılmaz.

<FormParams> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: İstek
  • Content-Type: "application/x-www-form-urlencoded"

<Headers> (<Remove> öğesinin alt öğesi)

Belirtilen HTTP üstbilgilerini, <AssignTo> öğesiyle belirtilen istek veya yanıttan kaldırır.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <Header> öğeleri dizisi veya boş dizi
Üst öğe <Remove>
Alt Öğeler <Header>

<Headers> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnek, istekten user-agent üstbilgisini kaldırır:

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

2. Örnek

Aşağıdaki örnekte, istekteki tüm üstbilgiler kaldırılır:

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

3. Örnek

Aynı ada sahip birden fazla başlık varsa aşağıdaki sözdizimini kullanın:

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

Bu örnekte, "h1", "h2" ve "h3"ün ikinci değeri istekten kaldırılıyor. "h3" yalnızca bir değere sahipse kaldırılmaz.

<Payload> (<Remove> öğesinin alt öğesi)

<Remove> öğesinin, <AssignTo> öğesiyle belirtilen istek veya yanıttaki yükü silip silmeyeceğini belirler. Yükü temizlemek için "true", aksi takdirde "false" olarak ayarlayın. Varsayılan değer "false" değeridir.

Varsayılan Değer Yanlış
Zorunlu mu? İsteğe bağlı
Tür Boole
Üst öğe <Remove>
Alt Öğeler Yok

<Payload> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, istek yükünün temizlenmesi için <Payload> "true" olarak ayarlanır:

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

<QueryParams> (<Remove> öğesinin alt öğesi)

Belirtilen sorgu parametrelerini istekten kaldırır. Bu öğenin yanıt üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <QueryParam> öğeleri dizisi veya boş dizi
Üst öğe <Remove>
Alt Öğeler <QueryParam>

<QueryParams> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte, istekten tek bir sorgu parametresi kaldırılıyor:

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

2. Örnek

Aşağıdaki örnek, istekteki tüm sorgu parametrelerini kaldırır:

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

3. Örnek

Aynı ada sahip birden fazla sorgu parametresi varsa aşağıdaki söz dizimini kullanın:

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

Bu örnekte, "qp1", "qp2" ve "qp3"ün ikinci değeri istekten kaldırılıyor. "qp3" yalnızca bir değere sahipse kaldırılmaz.

4. Örnek

Aşağıdaki örnekte, apikey sorgu parametresi istekten kaldırılıyor:

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

<QueryParams> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • HTTP fiili: GET
  • Mesaj türü: İstek

<Set>

İstek veya yanıt mesajında, <AssignTo> öğesiyle belirtilen bilgileri ayarlar. <Set> Orijinal iletide zaten bulunan üstbilgilerin veya parametrelerin üzerine yazar. Yeni bir başlık veya parametre oluşturmak için bunun yerine <Add> öğesini kullanın.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Karmaşık tür
Üst öğe <AssignMessage>
Alt Öğeler <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

<Set> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte <Set> öğesi gösterilmektedir:

<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> öğesinin alt öğesi)

Bir istekteki mevcut form parametrelerinin üzerine yazar ve bunları bu öğeyle belirttiğiniz yeni değerlerle değiştirir. Bu öğenin yanıt üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <FormParam> öğe dizisi
Üst öğe <Set>
Alt Öğeler <FormParam>

<FormParams> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, yeni bir özel istekte "myparam" adlı bir form parametresi, request.header.myparam değişkeninin değerine ayarlanıyor:

<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> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • HTTP fiili: POST
  • Mesaj türü: İstek

Politikanızda boş form parametreleri tanımlarsanız (<Add><FormParams/></Add>) politika herhangi bir form parametresi eklemez. Bu, <FormParams> öğesini atlamayla aynıdır.

<Set>, mesajı hedef uç noktaya göndermeden önce mesajın Content-Type değerini "application/x-www-form-urlencoded" olarak değiştirir.

<Headers> (<Set> öğesinin alt öğesi)

İstek veya yanıttaki mevcut HTTP üst bilgilerinin üzerine yazar. Bu, <AssignTo> öğesiyle belirtilir.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <Header> öğe dizisi
Üst öğe <Set>
Alt Öğeler <Header>

<Headers> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, user-agent başlığı request.header.user-agent değişkeninin değerine ayarlanır:

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

Politikanızda boş başlıklar tanımlarsanız (<Add><Headers/></Add>) politika herhangi bir başlık eklemez. Bu, <Headers> öğesinin atlanmasıyla aynıdır.

<Path> (<Set> öğesinin alt öğesi)

<Payload> (<Set> öğesinin alt öğesi)

<AssignTo> öğesiyle belirtilen bir istek veya yanıtın mesaj gövdesini tanımlar. Yük, düz metin, JSON veya XML gibi geçerli bir içerik türü olabilir.

Varsayılan Değer boş dize
Zorunlu mu? İsteğe bağlı
Tür Dize
Üst öğe <Set>
Alt Öğeler Yok

<Payload> öğesi şu söz dizimini kullanır:

Söz dizimi

<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. Örnek

Aşağıdaki örnekte düz metin yükü ayarlanmaktadır:

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

2. Örnek

Aşağıdaki örnekte bir JSON yükü ayarlanmaktadır:

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

3. Örnek

Aşağıdaki örnek, değişken adlarını küme parantezleri içine alarak değişken değerlerini yükün içine ekler:

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

Apigee Edge'in eski sürümlerinde (ör. 16.08.17 bulut sürümünden önce) JSON yüklerindeki değişken referanslarını belirtmek için küme parantezleri kullanamıyordunuz. Bu sürümlerde, sınırlayıcı karakterleri belirtmek için variablePrefix ve variableSuffix özelliklerini kullanmanız ve değişken adlarını bu karakterlerle sarmalamanız gerekiyordu. Örneğin:

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

Bu eski söz dizimi hâlâ çalışmaktadır.

4. Örnek

<Payload> içeriği, ileti şablonu olarak kabul edilir. Bu, AssignMessage politikasının, küme parantezleri içine alınmış değişkenleri çalışma zamanında referans verilen değişkenlerin değeriyle değiştirdiği anlamına gelir.

Aşağıdaki örnekte, yükün bir bölümünü değişken değerine ayarlamak için küme parantezi söz dizimi kullanılmaktadır:

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

Aşağıdaki tabloda <Payload> öğesinin özellikleri açıklanmaktadır:

Özellik Açıklama Varlık Tür
contentType

Belirtilirse contentType değeri, Content-Type HTTP üst bilgisine atanır.

İsteğe bağlı Dize
variablePrefix İsteğe bağlı olarak, bir akış değişkenindeki baştaki ayırıcıyı belirtir. Varsayılan olarak "{" değerini alır. Daha fazla bilgi için Akış değişkenleri referansı başlıklı makaleyi inceleyin. İsteğe bağlı Char
variableSuffix İsteğe bağlı olarak, bir akış değişkeninde sondaki ayırıcıyı belirtir. Varsayılan olarak "}" değerini alır. Daha fazla bilgi için Akış değişkenleri referansı başlıklı makaleyi inceleyin. İsteğe bağlı Char

<QueryParams> (<Set> öğesinin alt öğesi)

İstekteki mevcut sorgu parametrelerinin üzerine yeni değerler yazar. Bu öğenin yanıt üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür <QueryParam> öğe dizisi
Üst öğe <Set>
Alt Öğeler <QueryParam>

<QueryParams> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, "address" sorgu parametresi request.header.address değişkeninin değerine ayarlanıyor:

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

<QueryParams> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • HTTP fiili: GET
  • Mesaj türü: İstek

Politikanızda boş sorgu parametreleri tanımlarsanız (<Set><QueryParams/></Set>) politika herhangi bir sorgu parametresi ayarlamaz. Bu, <QueryParams> öğesini atlamayla aynıdır.

<ReasonPhrase> (<Set> öğesinin alt öğesi)

Yanıtın neden ifadesini ayarlar. Bu işlem genellikle <StatusCode> ile birlikte hata ayıklama için yapılır. Bu öğenin istek üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Dize
Üst öğe <Set>
Alt Öğeler Yok

<ReasonPhrase> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte basit bir neden ifadesi tanımlanmaktadır:

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

2. Örnek

<ReasonPhrase> içeriği, ileti şablonu olarak kabul edilir. Bu nedenle, aşağıdaki örnekte gösterildiği gibi, çalışma zamanında süslü parantez içine alınmış bir değişken adı, referans verilen değişkenin değeriyle değiştirilir:

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

<ReasonPhrase> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: Yanıt

<StatusCode> (<Set> öğesinin alt öğesi)

Yanıtın durum kodunu ayarlar. Bu öğenin istek üzerinde etkisi yoktur.

Varsayılan Değer "200" (<AssignTo> öğesinin createNew özelliği "true" olarak ayarlandığında)
Zorunlu mu? İsteğe bağlı
Tür Dize veya variable
Üst öğe <Set>
Alt Öğeler Yok

<StatusCode> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte basit bir durum kodu ayarlanmaktadır:

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

2. Örnek

<StatusCode> içeriği, ileti şablonu olarak kabul edilir. Bu nedenle, küme parantezleri içine alınmış bir değişken adı, çalışma zamanında referans verilen değişkenin değeriyle değiştirilir. Aşağıdaki örnekte bu durum gösterilmektedir:

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

<StatusCode> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: Yanıt

<Verb> (<Set> öğesinin alt öğesi)

İstekle ilgili HTTP fiilini ayarlar. Bu öğenin yanıt üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Dize veya variable
Üst öğe <Set>
Alt Öğeler Yok

<Verb> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, istekte basit bir fiil ayarlanır:

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

2. Örnek

<Verb> içeriği, ileti şablonu olarak kabul edilir. Bu, küme parantezleri içine alınmış bir değişken adının, çalışma zamanında referans verilen değişkenin değeriyle değiştirileceği anlamına gelir.

Aşağıdaki örnekte, bir fiili doldurmak için değişken kullanılmaktadır:

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

<Verb> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: İstek

<Version> (<Set> öğesinin alt öğesi)

Bir istekte HTTP sürümünü ayarlar. Bu öğenin yanıt üzerinde etkisi yoktur.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Dize veya variable
Üst öğe <Set>
Alt Öğeler Yok

<Version> öğesi şu söz dizimini kullanır:

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte sürüm numarası "1.1" olarak ayarlanmıştır:

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

2. Örnek

Aşağıdaki örnekte, sürüm numarasını ayarlamak için küme parantezleri içinde bir değişken kullanılmaktadır:

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

<Version> içeriği, ileti şablonu olarak kabul edilir. Bu, küme parantezleri içine alınmış bir değişken adının, çalışma zamanında referans verilen değişkenin değeriyle değiştirileceği anlamına gelir.

<Version> simgesini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: İstek

Özel istek mesajları oluşturma

Özel bir istek mesajı oluşturmak için AssignMessage politikasını kullanabilirsiniz. Özel istek oluşturduktan sonra bu isteği aşağıdaki şekillerde kullanabilirsiniz:

  • Diğer politikalarda değişkenlerine erişme
  • Harici bir hizmete iletme

Özel istek mesajı oluşturmak için AssignMessage politikanızdaki <AssignTo> öğesini kullanın. createNew değerini "true" olarak ayarlayın ve öğenin gövdesinde yeni mesajın adını belirtin. Aşağıdaki örnekte bu durum gösterilmektedir:

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

Edge, varsayılan olarak özel istek mesajıyla ilgili herhangi bir işlem yapmaz. Edge, oluşturduktan sonra orijinal istekle akışa devam eder. Özel isteği kullanmak için proxy'nize ServiceCallout politikası gibi bir politika ekleyin. Bu politika, özel isteği harici bir hizmete iletebilir.

Aşağıdaki örneklerde özel istek mesajları oluşturulmaktadır:

1. Örnek

Aşağıdaki örnekte, Assign Message ile özel bir istek nesnesi oluşturulmaktadır:

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

Bu örnekte:

  • "MyCustomRequest" adlı yeni bir istek mesajı nesnesi oluşturur.
  • Bu politika, MyCustomRequest üzerinde:
    • Gelen istekteki user-agent HTTP üst bilgisinin değerini yeni mesaja kopyalar. <Copy>, user-agent akış değişkenine mutlak bir referans kullandığından source özelliğinin <Copy> için belirtilmesi gerekmez.
    • Özel mesajdaki address sorgu parametresini, gelen isteğin addy sorgu parametresinin değerine ayarlar.
    • HTTP fiilini GET olarak ayarlar.
  • <IgnoreUnresolvedVariables> öğesini "false" olarak ayarlar. <IgnoreUnresolvedVariables> "false" olduğunda, politikanın eklemeye çalıştığı değişkenlerden biri yoksa Edge, API akışında işlemi durdurur.

2. Örnek

Aşağıda, Assign Message ile özel bir istek nesnesinin nasıl oluşturulacağını gösteren başka bir örnek verilmiştir:

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

Bu örnekte "partner.request" adlı yeni bir özel istek oluşturulur. Ardından, yeni istekte <Verb> ve <Payload> ayarlanır.

Akışta daha sonra gerçekleşen başka bir AssignMessage politikasında özel bir istek mesajına erişebilirsiniz. Aşağıdaki örnekte, özel istek mesajının user-agent üstbilgisinin değeri alınmaktadır:

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

Videolar

AssignMessage politikası hakkında daha fazla bilgi edinmek için aşağıdaki videoları izleyin.

Video Açıklama
Neden Assign Message Policy? Arka uç kodunu değiştirmeden API isteğini veya yanıtını değiştirmek için AssignMessage politikasını kullanmanın avantajları hakkında bilgi edinin.
AssignMessage politikasını kullanarak API öğelerini kopyalama Bir API isteği veya yanıtından öğeleri kopyalayın ve AssignMessage politikasını kullanarak yeni bir istek veya yanıt nesnesi oluşturun.
AssignMessage politikasını kullanarak API öğelerini kaldırma AssignMessage politikasını kullanarak hedef arka uca ulaşmadan önce API öğelerini kaldırın ve API'yi değiştirin.
AssignMessage politikasını kullanarak API öğeleri ekleme ve ayarlama AssignMessage politikasını kullanarak sorgu parametreleri, başlıklar, form parametreleri veya yükler ekleyerek API isteğini ya da yanıtını değiştirin.
AssignMessage politikasını kullanarak özel değişkenler oluşturma AssignMessage politikasını kullanarak özel akış değişkenleri ayarlayın ve API proxy'sindeki diğer politikalarda bu değişkenlerden yararlanın.
AssignMessage politikasını kullanarak yeni istek veya yanıt nesneleri oluşturma API çalışma zamanında AssignMessage politikasını kullanarak yeni API isteği veya yanıt nesneleri oluşturun.
AssignMessage politikasını kullanarak sahte bir API oluşturma Yanıt akışına AssignMessage politikasını ekleyerek basit bir sahte REST API oluşturun.
AssignMessage politikasını kullanarak yükü ayarlama veya değiştirme API çalışma zamanında AssignMessage politikasını kullanarak SOAP yükünü ayarlayarak REST isteğini SOAP isteğine dönüştürün.

Hata kodları

Bu bölümde, bu politika bir hatayı tetiklediğinde döndürülen hata kodları ve hata mesajlarının yanı sıra Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Hata kuralları geliştirirken bu bilgilerin farkında olmanız önemlidir. hoşuma gitmesi için bir fırsattır. Daha fazla bilgi için Bilmeniz gerekenler Politika hataları ve Kullanım sorun.

Çalışma zamanı hataları

Bu hatalar, politika yürütüldüğünde ortaya çıkabilir.

Hata kodu HTTP durumu Neden Düzelt
steps.assignmessage.SetVariableFailed 500 Politika, değişken ayarlayamadı. çözümlenmemiş değişkendir.
steps.assignmessage.VariableOfNonMsgType 500

Bu hata, <Copy> öğesindeki source özelliği bir değişkene ayarlanırsa ortaya çıkar Bu mesaj, mesaj türünde değildir.

Mesaj türü değişkenleri, HTTP isteklerinin ve yanıtlarının tamamını temsil eder. Yerleşik Edge request, response ve message akış değişkenleri mesaj türünde. Daha fazla bilgi edinmek için hakkında daha fazla bilgi için Değişkenler referansı bölümüne bakın.

steps.assignmessage.UnresolvedVariable 500

Bu hata, İleti Ata politikasında belirtilen değişken aşağıdakilerden biri olduğunda ortaya çıkar:

  • kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz)
  • veya
  • çözülemiyor (tanımlanmamış)

Dağıtım hataları

Bu politikayı içeren bir proxy dağıttığınızda bu hatalar oluşabilir.

Hata adı Neden Düzelt
InvalidIndex İleti Ata aracının <Copy> ve/veya <Remove> öğelerinde belirtilen dizin politika 0 veya negatif bir sayı olursa API Proxy'sinin dağıtımı başarısız olur.
InvalidVariableName <Name> alt öğesi boşsa veya <AssignVariable> öğesinde belirtilmemişse geçerli bir değişken adı olmadığından API proxy’sinin dağıtımı için bir değer atanır. Geçerli bir değişken adı gerekiyor.
InvalidPayload Politikada belirtilen bir yük geçersiz.

Hata değişkenleri

Bu değişkenler, politika çalışma zamanında bir hatayı tetiklediğinde ayarlanır. Daha fazla bilgi için Ne, ne ve ne zaman bilmeniz gerekir.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelendiği gibi hatanın adıdır. Hata adı, hata kodunun son kısmıdır. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. assignmessage.AM-SetResponse.failed = true

Örnek hata yanıtı

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

Örnek hata kuralı

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

Şemalar

Her politika türü bir XML şeması (.xsd) ile tanımlanır. Referans olarak politika şemaları GitHub'da mevcuttur.

İlgili konular

AssignMessage politikasının çalışan örnekleri API Platform örneklerinde mevcuttur.

ProxyEndpoint'ten target.url değerinin nasıl geçersiz kılınacağına dair daha gelişmiş bir örnek için bu Apigee Topluluk makalesine bakın.

ServiceCallout politikasında "set path"in nasıl çalıştığını görmek için Apigee GitHub örneklerindeki bu Learn by doing example'a (Uygulayarak öğrenme örneği) göz atın. Depoyu klonlayıp ilgili konudaki talimatları uygulamanız yeterlidir. Örnekte, istek yolu ayarlamak için AssignMessage politikası, ardından harici bir hizmete istekte bulunmak için Service Callout politikası kullanılır.