Mesaj İletisi politikası atayın

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

Ne?

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

  • Bir iletiye yeni form parametreleri, üstbilgiler veya sorgu parametreleri ekleme
  • Mevcut özellikleri bir mesajdan diğerine kopyalama
  • İletiden ü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şturmak ve bunu alternatif bir hedefe iletmek için AssignMessage politikasını da kullanabilirsiniz.

AssignMessage politikası, mesaj veya akış değişkenleri oluşturabilir ya da değiştirebilir. İstek mesajlarını bir proxy aracılığıyla üst sistemlere göndermeden önce veya yanıt mesajlarını API tüketici uygulamalarına aktarmadan önce değiştirmek için bu politikayı kullanın.

<AssignMessage> öğesi

AssignMessage politikasını tanımlar.

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

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

Söz dizimi

<AssignMessage> öğesi aşağıdaki 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ğinizde 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 taslaklar içerir. Genellikle bu politikayla gerçekleştirmek istediğiniz işlemleri seçer ve alt öğelerin geri kalanını kaldırırsınız. Örneğin, bir kopyalama işlemi gerçekleştirmek 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 öğelerinin üst düzey bir açıklaması verilmiştir:

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

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

<Copy> İsteğe bağlı source özelliği tarafından belirtilen mesajdaki bilgileri <AssignTo> öğesi tarafından belirtilen mesaj nesnesine kopyalar.
<Remove> İsteğe bağlı Belirtilen öğeleri, <AssignTo> öğesinde belirtilen mesaj değişkeninden siler.
<Set> İsteğe bağlı <AssignTo> öğesi tarafından belirtilen istek veya yanıttaki mevcut özelliklerin değerlerini değiştirir.

<Set>, orijinal iletide mevcut olan ü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 mesaj üzerinde çalıştığını belirtir. Bu, standart istek veya yanıt ya da yeni, özel bir mesaj olabilir.
<AssignVariable> İsteğe bağlı Akış değişkenine değer atar. Değişken mevcut değilse <AssignVariable> değişkeni oluşturur.
<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 ekleme

Aşağıdaki örnekte, <Add> öğesiyle isteğe bir üstbilgi eklenmektedir:

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

2: Yükü kaldırın

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

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</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="AM-modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

Bu örnekte <AssignTo> öğesinde değişken adı olarak response belirtildiğinden bu politika, başlangıçta hedef sunucu tarafından döndürülen verilerle ayarlanan yanıt nesnesini değiştirir.

Bu politika tarafından yanıt mesajına eklenen HTTP üstbilgisi, LookupCache politikası tarafından doldurulan bir değişkenden türetilir. Bu nedenle, bu Mesaj Ata politikası tarafından değiştirilen yanıt mesajı, sonuçların önbellekten alınıp alınmadığını belirten bir HTTP üstbilgisi içerir. Yanıtta üstbilgileri ayarlamak, hata ayıklama ve sorun giderme için yararlı olabilir.

4: Dinamik içeriği ayarlama

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

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

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

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

JSON yükleri için 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.

16.08.17 bulut sürümünden itibaren, değişken eklemek için süslü parantezleri de kullanabilirsiniz.

5: Sorgu parametresini kaldırma

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

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

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

6: Değişkenleri ayarlama/alma

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

  1. İstekte 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üne ayarlar.
<!-- Policy #1: Set variables in the request -->

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

İlk politikada, <AssignVariable> öğesi istekte üç değişken oluşturur ve ayarlar. Her <Name> öğesi bir değişken adı, <Value> ise 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 verir ve <Name> öğeleri yeni değişkenlerin adlarını belirtir. <Ref> öğesinin referans verdiği değişkene erişilemiyorsa <Value> öğesi tarafından belirtilen değeri kullanabilirsiniz.

Bu politika grubunu denemek için:

  1. İstek akışına 1 ve 2 numaralı politikaları ekleyin. 1 numaralı politikayı 2 numaralı politikanın önüne koyduğunuzdan emin olun.
  2. response akışına üçüncü politikayı ekleyin.
  3. Üçüncü politika, değişkenleri yanıta eklemek için <Set> öğesini kullanır. Aşağıdaki örnekte, Edge'in istemciye döndürdüğü yanıtta bir XML yükü oluşturulmaktadır:
    <!-- 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> içinde akış değişkenlerine erişmek için kullanılan söz diziminin, değişkenleri süslü parantez içine almak olduğunu unutmayın.

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

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

    İsteğe bağlı olarak, XML'in düzgün biçimlendirilmiş bir yapıda görüntülenmesi için sonuçları xmllint gibi bir yardımcı program aracılığıyla yönlendirebilirsiniz:

    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 Belirtme yanıt başlıklarını alma

Aşağıdaki örnekte, API proxy isteğinde bir ServiceCallout politikası olduğunu ve açıklama yanıtının aynı ada (Set-Cookie) sahip birden fazla üstbilgi 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 üstbilgi değerini alır.

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

Tüm üstbilgi 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>

<AssignTo> öğesi tarafından belirtilen isteğe veya yanıta bilgi ekler.

<Add> öğesi, mesaja orijinal mesajda 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 aşağıdaki söz dizimini kullanır:

Söz dizimis1

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

Örnek 1s2

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

Örnek 2s3

Aşağıdaki örnekte, hedef uç noktaya gönderilecek isteğe partner-id üstbilgisi eklemek için <Headers> öğesi kullanılmaktadır:

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

3. örneks4

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

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

Bu örnekte, istek ön akışında <Add> kullanılır. Sonuçları Trace aracı gibi bir araçta incelerseniz https://example-target.com/get isteğinin https://example-target.com/get?myParam=42 olduğunu görürsünüz.

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

<FormParams> (<Add> 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 aşağıdaki söz dizimini kullanır:

Söz dizimis5

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

Örnek 1s6

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

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

Örnek 2s7

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

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

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

Örnek 3s8

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

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

Bu örnek, kaynak istekten sorgu dizesi parametrelerini alır ve bunları farklı adlara sahip form parametreleri olarak ekler. Ardından orijinal sorgu parametrelerini kaldırır. Apigee, değiştirilen isteği hedef uç noktaya gönderir.

Akışı incelemek için Trace aracını kullanabilirsiniz. İstek gövdesinin, başlangıçta sorgu dizesi parametreleri olarak iletilen URL kodlamalı form verilerini içerdiğini görürsünüz:

username=nick&zip_code=90210&default_language=en

<FormParams> özelliğini 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 ayarlanmış. Örneğin, curl ile isteğinize -d "" ekleyin.
    • Content-Length üstbilgisi: 0 olarak ayarlayın (orijinal istekte veri yoksa; aksi takdirde, bayt cinsinden geçerli uzunluk). Ö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 başlığını "application/x-www-form-urlencoded" olarak ayarlar.

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

<AssignTo> öğesi tarafından 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 aşağıdaki söz dizimini kullanır:

Söz dizimis9

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

Örnek 1s10

Aşağıdaki örnekte, istek mesajına bir partner-id üstbilgisi eklenir ve verifyapikey.VAK-1.developer.app.partner-id akış değişkeninin değeri bu üstbilgiye atanır.

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

<QueryParams> (<Add> alt öğesi)

İsteğe yeni sorgu parametreleri ekler. Bu öğenin yanıt üzerinde herhangi bir 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 aşağıdaki söz dizimini kullanır:

Söz dizimis11

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

Örnek 1s12

Aşağıdaki örnekte, isteğe "myParam" sorgu parametresi eklenir ve "42" değeri atanır:

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

<QueryParams> özelliğini 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. Bunları yanıtta ayarlamanın bir etkisi yoktur.

Politikanızda boş bir sorgu parametresi dizisi (<Add><QueryParams/></Add>) tanımlarsanız politika, sorgu parametresi eklemez. Bu, <QueryParams> parametresini atlamakla 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 uygulandığı nesneyi değiştiremeyeceğinizi unutmayın. Örneğin, yanıta sorgu parametreleri (<QueryParams>) veya form parametreleri (<FormParams>) eklemek ya da bunları 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> öğesini belirtmezseniz veya <AssignTo> öğesini belirtip öğe için bir metin değeri belirtmezseniz politika, politikanın yürütüldüğü yere göre varsayılan istek veya yanıt üzerinde işlem yapar. Politika, istek akışında yürütülürse istek mesajını etkiler. Politika, yanıt akışında yürütülürse varsayılan olarak yanıtı etkiler.

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

Söz dizimis13

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

Örnek 1s14

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

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

Örnek 2s15

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

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

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

Akışın ilerleyen bölümlerinde diğer politikalardaki yeni istek nesnesine erişebilir veya yeni istek nesnesini ServiceCallout politikası ile harici bir hizmete gönderebilirsiniz.

Örnek 3s16

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

<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ının diğer öğeleri (ör. <Add>, <Set> ve <Copy>) bu yeni istek nesnesi üzerinde işlem yapar.

Akışın ilerleyen bölümlerinde diğer politikalardaki yeni istek nesnesine erişebilir veya yeni istek nesnesini ServiceCallout politikası ile harici bir hizmete gönderebilirsiniz.

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

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

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

"true" ise politika, type tarafından belirtilen türde ("request" veya "response") yeni bir değişken oluşturur. 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 istek veya yanıt olarak çözümlerse işlemeye 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ümlenemezse veya mesaj olmayan bir türe çözümlenirse politika hata verir.

createNew belirtilmezse politika iki şekilde yanıt verir:

  • <AssignTo> dizesinin metin değeri bir mesajla eşleşirse işleme bir sonraki adıma geçer.
  • <AssignTo> dizesinin metin değeri çözümlenemiyorsa veya mesaj olmayan bir türe çözümleniyorsa 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 taşıma 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.

Bu özelliği atlarsanız Edge, bu politikanın akışta nerede yürütüldüğüne bağlı olarak bir istek veya yanıt oluşturur.

İsteğe bağlı Dize

<AssignVariable>

Akış değişkenine değer atar. Akış değişkeni yoksa <AssignVariable> bu değişkeni oluşturur.

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>

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

  • Düz dize: Akış değişkeni için düz 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şkenine yerleştirilecek değeri almak için, interpolasyon yapılacak bir mesaj şablonu belirtmek üzere <Template> alt öğesini kullanın.

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

Söz dizimis17

<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şkeni belirtmek için <Ref> öğesini kullanın. <Ref> tarafından başvurulan 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.

Örnek 1s18

Aşağıdaki örnekte, yeni bir değişkenin (myvar) değeri "42" değişmez değerine ayarlanmaktadır:

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

2. Örneks19

Aşağıdaki örnekte, request.header.user-agent akış değişkeninin değeri hedef akış değişkeni myvar'e, country sorgu parametresinin 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>

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

Örnek 3s20

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

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

<AssignVariable> için yaygın bir kullanım, bir sorgu parametresi, başlık veya istekle birlikte iletilebilecek diğer değerler için varsayılan bir değer ayarlamaktır. Bunu, hem <Ref> hem de <Value> alt öğelerinin bir kombinasyonuyla yaparsınız. Daha fazla bilgi için <Ref> ile ilgili örneklere bakın.

<Name> (<AssignVariable> 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ı geçen değişken mevcut değilse 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 aşağıdaki söz dizimini kullanır:

Söz dizimis21

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

Örnek 1s22

Aşağıdaki örnekte hedef değişken myvar olarak belirtilmiş ve "42" değişmez değerine ayarlanmıştır:

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

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

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

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

<Ref> değeri her zaman bir akış değişkeni olarak yorumlanır. Değer olarak bir dize sabiti belirtemezsiniz. Değişmez 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 kullanacağınız "{}" parantezlerini kullanmayı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 değer tanımlamak üzere <Value> öğesini <Ref> ile birlikte kullanın. <Ref> tarafından belirtilen akış değişkeni mevcut değilse, okunamıyorsa veya boşsa Edge, hedef akış değişkenine <Value> değerini atar.

<Ref> öğesi aşağıdaki 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>

Örnek 1s23

Aşağıdaki örnekte, request.header.user-agent akış değişkeninin değeri hedef akış değişkeni myvar'e ve country sorgu parametresinin değeri 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. örneks23

Aşağıdaki örnekte, request.header.user-agent akış değişkeninin değeri hedef akış değişkeni myvar'e, country sorgu parametresinin 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ş, okunamaz veya hatalı biçimlendirilmişse Edge, yeni değişkenlere "ErrorOnCopy" değerini atar.

Örnek 3s24

<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 Weather 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ğıdaki gibi 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 kendisine atar. Akış değişkeni boşsa (yani "w" sorgu parametresi istekten çıkarılmışsa) bu örnekte <Value> öğesindeki varsayılan değer kullanılır. Bu nedenle, "w" sorgu parametresini atlayan bu API proxy'sine istekte bulunabilirsiniz:

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

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

<Value> kullanımından farklı olarak <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 bir hata verir.

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

Bir mesaj şablonu belirtir. Mesaj şablonu, politika yürütüldüğünde 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 mesaj şablonları, çıkış ve büyük/küçük harf dönüştürme gibi işlevleri destekler.

Değişken değerinin bir mesaj şablonu olduğu akış değişkenini belirtmek için ref özelliğini kullanın. Örneğin, bir mesaj şablonunu geliştirici uygulamasında özel özellik olarak depolayabilirsiniz. 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.

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

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

Söz dizimis25

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

Örnek 1s26

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

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

Örnek 2s27

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

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

Örnek 3s28

Aşağıdaki örnekte bir akış değişkeni ve metin değeri belirtilmiştir. 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, varsayılan şablonu (metin kısmı) dinamik olarak ayarlanan değerlerle geçersiz kılmak istediğiniz durumlarda "geçersiz kılma" değeri sağlamak için kullanışlıdır. Örneğin, koşullu bir ifade, anahtar/değer eşlemesinden bir değer alabilir ve referans verilen değişkeni bu değere ayarlayabilir:

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

<Value> (<AssignVariable> alt öğesi)

<AssignVariable> ile ayarlanan hedef akış değişkeninin değerini tanımlar. Değer her zaman 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 <Ref> öğesini 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> belirtilmezse, çözümlenemezse veya boşsa <Value> değeri kullanılır.

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

Söz dizimis29

<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şkeninin (myvar) değeri "42" değişmez değerine ayarlanır:

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

2. Örnek

Aşağıdaki örnekte, request.header.user-agent akış değişkeninin değeri myvar akış değişkenine, country sorgu parametresinin 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>

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

<Copy>

source özelliği tarafından belirtilen mesajdaki değerleri <AssignTo> öğesi tarafından belirtilen mesaja kopyalar. <AssignTo> ile bir hedef belirtmezseniz bu politika, akışta yürütüldüğü yere 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> öğesinin altında alt öğe belirtmezseniz belirlenen kaynak mesajın tüm bölümleri kopyalanır.

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

Söz dizimis30

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

Örnek 1s31

Aşağıdaki örnekte bir üstbilgi, üç form parametresi, yol ve request mesajındaki tüm sorgu parametreleri newRequest adlı yeni bir özel isteğe kopyalanmaktadır:

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

<Payload> ve <Verb> gibi öğeler mevcut olmadığından politika, iletinin bu kısımlarını kopyalamaz.

Örnek 2s32

Aşağıdaki örnekte, önce mevcut response mesajındaki her şey kaldırılır, ardından secondResponse adlı farklı bir mesajdaki tüm değerler response mesajına kopyalanır:

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

<Copy> öğesinin tek bir özelliği vardır:

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

Kopyanın kaynak nesnesini belirtir.

  • source belirtilmezse varsayılan olarak message değerine ayarlanır. Bu değer, politikanın yürütüldüğü akışa bağlı olarak farklı bir değer alır. Politika, istek akışı içinde yürütülürse message değişkeni request nesnesini ifade eder. Politika, yanıt akışı içinde yürütülürse message değişkeni, response nesnesini ifade eder.
  • Kaynak değişken çözümlenemezse veya mesaj olmayan bir türe çözümlenirse <Copy> yanıt veremez.
İsteğe bağlı Dize

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

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

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

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

Söz dizimis33

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

Örnek 1s34

Aşağıdaki örnekte, istekten "MyCustomRequest" adlı özel isteğe tek bir form parametresi kopyalanmaktadır:

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

Örnek 2s35

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

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

Örnek 3s36

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

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

Örnek 4s37

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> özelliğini 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 ayarlanmış. Örneğin, curl ile isteğinize -d "" ekleyin.
    • Content-Length üstbilgisi: 0 olarak ayarlanır (orijinal istekte veri yoksa; aksi takdirde geçerli uzunluk). Örneğin, curl ile isteğinize -H "Content-Length: 0" ekleyin.

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

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

HTTP üstbilgilerini, <Copy> öğesinin source özelliği tarafından belirtilen istek veya yanıt mesajından <AssignTo> öğesi tarafından 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ş bir dizi
Üst Öğe <Copy>
Alt öğeler <Header>

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

Söz dizimis38

<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. örneks39

Aşağıdaki örnekte, istekteki user-agent başlığı yeni, özel istek nesnesine kopyalanmaktadı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>

Örnek 2s40

Tüm üstbilgileri 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>

Örnek 3s41

Aynı ada sahip birden fazla başlık varsa aşağıdaki söz dizimini 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> alt öğesi)

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

"true" ise bu politika, yolu <Copy> öğesinin source özelliği tarafından belirtilen istek mesajı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 aşağıdaki 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>

Örnek 1s42

Aşağıdaki örnekte, AssignMessage politikasının, yolu kaynak istekten yeni, özel istek nesnesine kopyalaması gerektiği gösterilmektedir:

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

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

  • Mesaj türü: İstek

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

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

"true" ise bu politika, yükü <Copy> öğesinin source özelliği tarafından belirtilen mesajdan <AssignTo> öğesi tarafından belirtilen mesaja kopyalar.

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

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

Söz dizimis43

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

Örnek 1s44

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

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

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

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

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

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

Söz dizimis45

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

Örnek 1s46

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

<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. örneks47

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

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

Örnek 3s48

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

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

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

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

"true" ise bu politika, <Copy> öğesinin source özelliği tarafından belirtilen yanıttan ReasonPhrase öğesini, <AssignTo> öğesi tarafından belirtilen yanıta kopyalar.

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

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

Söz dizimis49

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

Örnek 1s50

Aşağıdaki örnekte <ReasonPhrase>, true olarak ayarlanmıştır. Kaynak ve <AssignTo> öğesi belirtildiği şekilde kullanıldığında <Copy>, neden ifadesini adlandırılmış yanıt mesajından response nesnesine kopyalar:

<AssignMessage name="AM-copy-reasonphrase-1">
  <Copy source="serviceCalloutResponse">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo>response</AssignTo>
</AssignMessage>

<ReasonPhrase> öğesini yalnızca kaynak ve hedef mesajlar Yanıt türündeyse kullanabilirsiniz.

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

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

"true" ise bu politika, durum kodunu <Copy> öğesinin source özelliği tarafından belirtilen yanıt mesajından kopyalar ve <AssignTo> öğesi tarafından belirtilen yanıt mesajına yapıştırır.

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

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

Söz dizimis52

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

Örnek 1s53

Aşağıdaki örnekte <StatusCode> "true" olarak ayarlanmıştır. Bu ayar, durum kodunu varsayılan yanıt nesnesinden yeni bir özel 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> öğesini yalnızca kaynak ve hedef mesajlar Yanıt türündeyse kullanabilirsiniz.

<StatusCode> öğesinin yaygın bir kullanımı, proxy yanıt durum kodunu hedeften alınandan farklı bir değere ayarlamaktır.

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

HTTP fiilinin kaynak istekten hedef isteğe kopyalanıp kopyalanmayacağını belirler. Bu öğenin yanıt üzerinde herhangi bir 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 aşağıdaki söz dizimini kullanır:

Söz dizimis54

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

Örnek 1s55

Aşağıdaki örnekte <Verb> "true" olarak ayarlanmıştır. Bu ayar, varsayılan istekteki fiili yeni bir özel 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> özelliğini yalnızca aşağıdaki ölçütler karşılandığında kullanabilirsiniz:

  • Mesaj türü: İstek

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

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

"True" 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 aşağıdaki söz dizimini kullanır:

Söz dizimis56

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

Örnek 1s57

Aşağıdaki örnekte, istekte <Version> "true" olarak ayarlanır. Bu işlem, sürümü varsayılan istek nesnesinden yeni bir özel istek nesnesine kopyalar:

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

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

  • Mesaj türü: İstek

<DisplayName>

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

<DisplayName> öğesi tüm politikalarda ortaktır.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlıdır. <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 aşağıdaki 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 özellikleri veya alt öğeleri yok.

<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şlemeye devam etmek için true olarak ayarlayın. Aksi takdirde false olarak ayarlayın. Varsayılan değer: false.

<IgnoreUnresolvedVariables> değerini true olarak ayarlamak, <AssignMessage>'ın continueOnError değerini true olarak ayarlamaktan farklıdır. Bu fark, değişkenlerin değerlerini ayarlamaya ve almaya özgüdür. 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 aşağıdaki söz dizimini kullanır:

Söz dizimis58

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

1. örneks59

Aşağıdaki örnekte <IgnoreUnresolvedVariables> "true" olarak ayarlanmıştır:

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

<IgnoreUnresolvedVariables>, true değerine ayarlandığından possibly-defined-variable değişkeni tanımlanmazsa bu politika hata vermez.

<Remove>

İletiden üstbilgileri, sorgu parametrelerini, form parametrelerini ve/veya ileti yükünü kaldırır. Mesaj, istek veya yanıt olabilir. <AssignTo> öğesini kullanarak <Remove> öğesinin hangi mesaj üzerinde işlem yapacağını 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ı, hassas bilgiler içeren bir sorgu parametresini veya başlığı gelen istek nesnesinden silerek arka uç sunucusuna iletilmesini önlemektir.

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

Söz dizimis60

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

Örnek 1s61

Aşağıdaki örnekte, mesajın gövdesi yanıttan kaldırılmaktadır:

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

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

Örnek 2s62

Aşağıdaki örnekte, request nesnesinden tüm form parametreleri ve bir sorgu parametresi kaldırılmaktadır:

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

Örnek 3s63

Aşağıdaki örnekte, bir ileti nesnesindeki her şey kaldırılmaktadır:

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

Genellikle bunu yalnızca iletide bazı değiştirme değerleri ayarlamak için <Set> öğesini veya <Copy> öğesini kullanacaksanız yaparsınız.

<FormParams> (<Remove> alt öğesi)

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

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

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

Söz dizimis64

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

Örnek 1s65

Aşağıdaki örnekte, istekten üç form parametresi kaldırılmaktadır:

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

Örnek 2s66

Aşağıdaki örnekte, istekteki tüm form parametreleri kaldırılmaktadır:

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

Örnek 3s67

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

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

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

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

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

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

Belirtilen HTTP üst bilgilerini, <AssignTo> öğesi tarafından 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ş bir dizi
Üst Öğe <Remove>
Alt öğeler <Header>

<Headers> öğesi aşağıdaki 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>

Örnek 1s68

Aşağıdaki örnekte, istekten user-agent üstbilgisi kaldırılmaktadır:

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

Örnek 2s69

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

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

Örnek 3s70

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

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

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

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

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

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

<Payload> öğesi aşağıdaki 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>

Örnek 1s71

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

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

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

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

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

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

Söz dizimis72

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

Örnek 1s73

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

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

Örnek 2s74

Aşağıdaki örnekte, istekteki tüm sorgu parametreleri kaldırılmaktadır:

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

Örnek 3s75

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

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

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

Örnek 4s76

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

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

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

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

<Set>

İstek veya yanıt mesajındaki bilgileri ayarlar. Bu bilgiler, <AssignTo> öğesi tarafından belirtilir. <Set>, orijinal mesajda mevcut olan üstbilgilerin veya sorgu ya da form parametrelerinin üzerine yazar. HTTP mesajındaki üstbilgiler, sorgu ve form parametreleri birden fazla değer içerebilir. Bir üstbilgi veya parametre için ek değerler eklemek istiyorsanız <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 aşağıdaki 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>

Örnek 1s77

Aşağıdaki örnekte belirli bir başlık ayarlanmaktadır. Bu politika, istek akışına eklendiğinde üst sistemin, orijinal gelen istekte yer almayan ek bir başlık almasına izin verir.

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

2. örneks78

Aşağıdaki örnekte, bir yanıtın yükü ve Content-Type başlığı üzerine yazılmaktadır.

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

<FormParams> (<Set> alt öğesi)

İstekteki mevcut form parametrelerinin üzerine yazar ve bunları bu öğeyle belirttiğiniz yeni değerlerle değiştirir. Bu öğenin yanıt üzerinde herhangi bir 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 aşağıdaki söz dizimini kullanır:

Söz dizimis79

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

Örnek 1s80

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

<AssignMessage name="AM-set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

<FormParams> özelliğini 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, form parametresi eklemez. Bu, <FormParams> parametresini atlamakla 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> alt öğesi)

İstek veya yanıttaki mevcut HTTP üstbilgilerinin üzerine yazar. Bu üstbilgiler, <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 aşağıdaki söz dizimini kullanır:

Söz dizimis81

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

1. örneks81

Aşağıdaki örnekte, x-ratelimit-remaining başlığı ratelimit.Quota-1.available.count değişkeninin değerine ayarlanmaktadır:

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

Politikanızda boş başlıklar tanımlarsanız (<Set><Headers/></Set>) politika herhangi bir başlık ayarlamaz. Bu, <Headers> değerini atlamakla aynı etkiye sahiptir.

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

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

<AssignTo> öğesi tarafından belirtilen bir istek veya yanıt için e-posta mesajını tanımlar. Yük; düz metin, JSON veya XML gibi geçerli herhangi 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 aşağıdaki söz dizimini kullanır:

Söz dizimis82

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

Örnek 1s83

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. örneks84

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>

Örnek 3s85

Aşağıdaki örnekte, değişken adları süslü parantez içine alınarak değişken değerleri yüke eklenir:

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

Apigee'nin önceki sürümlerinde, JSON yükleri içindeki değişken referanslarını belirtmek için süslü parantez 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ı sarmalamak için bunları kullanmanız gerekiyordu:

<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ışır.

Örnek 4s86

<Payload> içeriği, mesaj şablonu olarak değerlendirilir. Bu, AssignMessage politikasının, çalışma zamanında süslü parantez içindeki değişkenleri referans verilen değişkenlerin değeriyle değiştirdiği anlamına gelir.

Aşağıdaki örnekte, yükün bir kısmını değişken değerine ayarlamak için süslü parantez 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> özellikleri açıklanmaktadır:

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

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

İsteğe bağlı Dize
variablePrefix İsteğe bağlı olarak, akış değişkenindeki baştaki sınırlayıcıyı belirtir. Varsayılan olarak "{" kullanılı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, akış değişkenindeki sondaki sınırlayıcıyı belirtir. Varsayılan olarak "}" kullanılır. Daha fazla bilgi için Akış değişkenleri referansı başlıklı makaleyi inceleyin. İsteğe bağlı Char

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

İstekteki mevcut sorgu parametrelerinin üzerine yeni değerler yazar. Bu öğenin yanıt üzerinde herhangi bir 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 aşağıdaki söz dizimini kullanır:

Söz dizimis87

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

Örnek 1s88

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

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

<QueryParams> özelliğini 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, sorgu parametresi ayarlamaz. Bu, <QueryParams> parametresini atlamakla aynıdır.

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

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

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

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

Söz dizimis89

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

Örnek 1s90

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

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

2. örneks91

<ReasonPhrase> içeriği, mesaj şablonu olarak değerlendirilir. 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 bu durum gösterilmektedir:

<AssignMessage name="AM-set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

  • Mesaj türü: Yanıt

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

Yanıttaki durum kodunu ayarlar. Bu öğenin istek üzerinde herhangi bir 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 aşağıdaki söz dizimini kullanır:

Söz dizimis92

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

2. Örnek

<StatusCode> içeriği, mesaj şablonu olarak değerlendirilir. 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 bu durum gösterilmektedir:

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

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

  • Mesaj türü: Yanıt

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

İstekteki HTTP fiilini ayarlar. Bu öğenin yanıt üzerinde herhangi bir 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 aşağıdaki 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. örneks93

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

<AssignMessage name="AM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

Örnek 2s94

<Verb> içeriği, mesaj şablonu olarak değerlendirilir. Bu, süslü parantez 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ılmıştır:

<AssignMessage name="AM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

  • Mesaj türü: İstek

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

İstekteki HTTP sürümünü ayarlar. Bu öğenin yanıt üzerinde herhangi bir 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 aşağıdaki söz dizimini kullanır:

Söz dizimis95

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

Örnek 1s96

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

<AssignMessage name="AM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
 </AssignMessage>

2. Örnek

Aşağıdaki örnekte, sürüm numarasını ayarlamak için süslü parantez içinde bir değişken kullanılmıştır:

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

<Version> içeriği, mesaj şablonu olarak değerlendirilir. Bu, süslü parantez 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> özelliğini 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 bunu aşağıdaki şekillerde kullanabilirsiniz:

  • Değişkenlerine diğer politikalardan erişme
  • Harici bir hizmete iletme

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

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

Varsayılan olarak Edge, ö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 özel isteği harici bir hizmete iletebilecek ServiceCallout politikası gibi bir politika ekleyin.

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

Örnek 1s97

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.
  • MyCustomRequest'te bu politika:
    • Gelen istekteki user-agent HTTP üst bilgisinin değerini yeni mesaja kopyalar. <Copy>, user-agent akış değişkenine mutlak bir referans kullandığından <Copy> için source özelliğini belirtmeniz gerekmez.
    • Özel mesajdaki address sorgu parametresini, gelen isteğin addy sorgu parametresinin değerine ayarlar.
    • HTTP fiilini GET olarak ayarlar.
  • <IgnoreUnresolvedVariables> değerini "false" olarak ayarlar. <IgnoreUnresolvedVariables> "false" olduğunda, politikanın eklemeye çalıştığı değişkenlerden biri mevcut değilse Edge, API akışında işlem yapmayı durdurur.

2. örneks98

Aşağıda, Assign Message ile özel istek nesnesi oluşturmayı 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> değerlerini ayarlar.

Akışın ilerleyen bölümlerinde yer alan başka bir AssignMessage politikasındaki özel istek mesajına erişebilirsiniz. Aşağıdaki örnekte, özel istek mesajının user-agent başlığının değeri alınmaktadır:

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo>partner.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 İleti Politikası Atanır? 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 API isteği veya yanıtındaki öğeleri kopyalayıp AssignMessage politikasını kullanarak yeni bir istek ya da yanıt nesnesi oluşturma
AssignMessage politikasını kullanarak API öğelerini kaldırma AssignMessage politikasını kullanarak API öğelerini kaldırın ve API'yi hedef arka uca ulaşmadan önce 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ştirme
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 API oluşturma Yanıt akışına AssignMessage politikasını ekleyerek basit bir sahte REST API oluşturma
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="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 için politika şemaları GitHub'da mevcuttur.

İlgili konular

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

ProxyEndpoint'ten target.url değerini geçersiz kılma ile ilgili daha gelişmiş bir örnek için bu Apigee Topluluğu makalesine bakın.

ServiceCallout politikasında "set path"in nasıl çalıştığını görmek için Apigee GitHub örneklerindeki bu uygulamalı örneğe 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 istek göndermek için Service Callout politikası kullanılır.