Mesaj İletisi politikası atayın

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

Ne?

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

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

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

AssignMessage politikası, mesajları veya akış değişkenlerini oluşturabilir ya da değiştirebilir. Bu politikayı, istek mesajlarını bir proxy üzerinden yukarı akış sistemlerine göndermeden önce veya yanıt mesajlarını API tüketicisi uygulamalarına iletmeden önce değiştirmek için kullanın.

<AssignMessage> öğesi

AssignMessage politikasını tanımlar.

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

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

Söz dizimi

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

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

Varsayılan politika

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Örnekler

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

1. Üstbilgi ekleyin

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

<AssignMessage 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 silinir:

<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 ileti oluşturulmaz. Bunun yerine, HTTP üst bilgisi ekleyerek mevcut bir yanıt mesajını değiştirir.

Bu örnekte <AssignTo> öğesindeki 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 üst bilgisi, LookupCache politikası tarafından doldurulan bir değişkenden türetilir. Bu nedenle, bu Mesaj Atama politikası tarafından değiştirilen yanıt mesajı, sonuçların önbellekten çekilip çekilmediğini belirten bir HTTP üst bilgisi içerir. Yanıt başlıklarını ayarlamak, hata ayıklama ve sorun giderme için kullanışlı olabilir.

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

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

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

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

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

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

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

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

5: Sorgu parametresini kaldırma

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

<AssignMessage name="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, apikey sorgu parametresini istek mesajından kaldırmanız en iyi uygulamadır. Bunu, hassas anahtar bilgilerinin arka uç hedefine iletilmesini önlemek için yaparsınız.

6: Değişkenleri ayarlama/alma

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

  1. İstek içinde statik değerlere sahip üç akış değişkeni oluşturur.
  2. İstek akışındaki ikinci bir politikada akış değişkenlerini dinamik olarak alır.
  3. Bunları yanıtın yükünde ayarlar.
<!-- Policy #1: Set variables in the request -->

<AssignMessage 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şturup ayarlar. Her <Name> öğesi bir değişken adı belirtir ve <Value> değeri belirtir.

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

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

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

Bu politika grubunu denemek için:

  1. 1. ve 2. politikaları istek akışına ekleyin. 1 numaralı politikayı 2 numaralı politikadan önce yerleştirdiğinizden emin olun.
  2. Yanıt akışına üçüncü politikayı ekleyin.
  3. Üçüncü politika, yanıtı değişkenlerle doldurmak için <Set> öğesini kullanır. Aşağıdaki örnek, Edge'in istemciye döndürdüğü yanıtta bir XML yükü oluşturur:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true
      </IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>

    <Set>'da akış değişkenlerine erişmek için söz diziminin değişkenleri küme ayraçları içine almak olduğunu unutmayın.

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

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

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

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

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

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

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

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

<AssignMessage 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 başlık değerlerini listelemek için bunun yerine aşağıdaki değişkeni kullanın:

{calloutResponse.header.Set-Cookie.values}

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

Alt öğe referansı

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

<Add>

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

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

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

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

Söz 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>

1. örneks2

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>

Örnek 3s4

Aşağıdaki örnekte, isteğe statik değer içeren 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 öncesi akışta <Add> kullanılmaktadır. Sonuçları İzleme aracı gibi bir araçta incelerseniz https://example-target.com/get isteği https://example-target.com/get?myParam=42 olur.

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

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

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

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

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

Söz 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") ekleniyor:

<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, istekte form parametresi olarak eklenir ve 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 hedef belirtilmediğini unutmayın. Bu politika, isteğe yalnızca parametresini ekler.

3. örneks8

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

<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 isteğinden sorgu dizesi parametrelerini alır ve bunları farklı adlarla form parametreleri olarak ekler. Ardından, orijinal sorgu parametrelerini kaldırır. Apigee, değiştirilen isteği hedef uç noktaya gönderir.

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

username=nick&zip_code=90210&default_language=en

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

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

Örneğin:

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

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

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

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

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

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

Söz 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 başlığı eklenmekte ve verifyapikey.VAK-1.developer.app.partner-id akış değişkeninin değeri bu başlığa atanmaktadı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> öğesinin alt öğesi)

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

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

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

Söz dizimis11

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

1. örneks12

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

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

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

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

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

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

<AssignTo>

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

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

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

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

<AssignTo> özelliğini belirtmezseniz veya <AssignTo> öğesini belirtirseniz ancak öğe için bir metin değeri belirtmezseniz politika, politikanın yürütüldüğü yere bağlı olarak varsayılan istek veya yanıt üzerinde işlem yapar. Politika, istek akışında yürütülürse istek mesajını etkiler. Yanıt akışında yürütülürse politika, varsayılan olarak yanıtı etkiler.

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

Söz 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şturuluyor:

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

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

3. örneks16

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

İsteğe bağlı Dize

<AssignVariable>

Bir akış değişkenine değer atar. Akış değişkeni yoksa <AssignVariable> tarafından oluşturulur.

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

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

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

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

Örnek 1s18

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

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

Örnek 2s19

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

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

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

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

3. örneks20

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

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

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

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

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

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

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

Söz dizimis21

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

1. örneks22

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

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

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

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

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

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

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

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

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

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

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

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

Söz dizimi

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

Örnek 1s23

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

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

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

Örnek 2s23

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

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

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

Ö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 hava durumu API proxy'si oluşturursunuz. Bu parametre, hava durumunu öğrenmek istediğiniz şehrin kimliğini içerir. İstek URL'si şu biçimdedir:

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

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

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

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

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

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

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

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

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

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

Değişkenin değerinin ileti şablonu olduğu bir akış değişkeni belirtmek için ref özelliğini kullanın. Örneğin, bir mesaj şablonunu geliştirici uygulamasında özel özellik olarak saklayabilirsiniz. Edge, API anahtarını veya güvenlik jetonunu doğruladıktan sonra (ek bir politika aracılığıyla) geliştirici uygulamasını tanımladığında <AssignVariable> öğesi, uygulamanın özel özelliğindeki mesaj şablonunu kullanabilir. Bu şablon, güvenlik politikasından akış değişkeni olarak kullanılabilir.

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

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

Söz 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 değişmez bir dize (tire) 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>

2. örneks27

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

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

<AssignMessage name='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> öğesinin alt öğesi)

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

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

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

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

Söz 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şkeni myvar'nın değeri, değişmez değer olan "42" olarak ayarlanır:

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

2. Örnek

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

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

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

<Copy>

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

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

<Copy> öğesinin altında alt öğe belirtmezseniz belirlenen kaynak mesajın tüm bölümleri kopyalanır.

<Copy> öğesi şu 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>
  

1. örneks31

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

<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 bulunmadığı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 olur. 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 türü olmayan bir türe çözümlenirse, <Copy> yanıt vermez.
İsteğe bağlı Dize

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

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

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

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

Söz 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" özel isteğine tek bir form parametresi kopyalanıyor:

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

Örnek 2s35

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

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

Örnek 3s36

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

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

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

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

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

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

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

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

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

Söz 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, user-agent üstbilgisi istekten yeni ve özel istek nesnesine kopyalanır:

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

Örnek 2s40

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

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

Örnek 3s41

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

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

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

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

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

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

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

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

Söz dizimi

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

Örnek 1s42

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

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

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

  • Mesaj türü: İstek

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

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

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

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

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

Söz 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> değeri "true" olarak ayarlanmıştır:

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

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

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

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

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

Söz 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ıyor:

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

Örnek 2s47

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

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

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

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

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

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

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

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

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

Söz dizimis49

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

1. örneks50

Aşağıdaki örnekte <ReasonPhrase>, true olarak ayarlanır. Kaynak ve <AssignTo> öğesi belirtildiği şekilde olduğunda <Copy>, adlandırılmış yanıt mesajındaki neden ifadesini 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ündeyken kullanabilirsiniz.

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

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

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

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

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

Söz dizimis52

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

1. örneks53

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

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

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

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

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

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

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

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

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

Söz 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> değeri "true" olarak ayarlanır. Bu işlem, fiili varsayılan istekten yeni ve özel bir isteğe kopyalar:

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

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

  • Mesaj türü: İstek

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

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

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

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

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

Söz 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 örnek, varsayılan istek nesnesindeki sürümü yeni ve özel bir istek nesnesine kopyalayan istekte <Version> değerini "true" olarak ayarlar:

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

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

  • Mesaj türü: İstek

<DisplayName>

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

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

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

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

Söz dizimi

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

Örnek

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

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

<IgnoreUnresolvedVariables>

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

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

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

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

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

Söz dizimis58

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

1. örneks59

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

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

<IgnoreUnresolvedVariables>, true olarak ayarlandığı için possibly-defined-variable değişkeni tanımlanmamışsa bu politika hata vermez.

<Remove>

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

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

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

<Remove> öğesi şu 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, iletinin gövdesi yanıttan kaldırılıyor:

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

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

Örnek 2s62

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

<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 mesaj nesnesindeki her şey kaldırılır:

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

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

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

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

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

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

Söz 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 örnek, istekten üç form parametresini kaldırı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>

2. örneks66

Aşağıdaki örnek, istekteki tüm form parametrelerini kaldırı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ıyor. "f3" yalnızca bir değere sahipse kaldırılmaz.

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

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

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

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

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

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

Söz dizimi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

Örnek 1s68

Aşağıdaki örnek, istekten user-agent üstbilgisini kaldırı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, istekteki tüm üstbilgiler kaldırılı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özdizimini 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ıyor. "h3" yalnızca bir değere sahipse kaldırılmaz.

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

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

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

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

Söz dizimi

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

1. örneks71

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

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

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

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

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

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

Söz 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ılıyor:

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

Örnek 2s74

Aşağıdaki örnek, istekteki tüm sorgu parametrelerini kaldırı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ıyor. "qp3" yalnızca bir değere sahipse kaldırılmaz.

Örnek 4s76

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

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

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

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

<Set>

İstek veya yanıt mesajında, <AssignTo> öğesiyle belirtilen bilgileri ayarlar. <Set>, orijinal iletide zaten mevcut olan üstbilgilerin, sorgu veya form parametrelerinin üzerine yazar. Bir HTTP mesajındaki üstbilgiler, sorgu ve form parametreleri birden fazla değer içerebilir. Bir başlığa veya parametreye ek değerler eklemek için bunun yerine <Add> öğesini kullanın.

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

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

Söz dizimi

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

Örnek 1s77

Aşağıdaki örnekte belirli bir başlık ayarlanmaktadır. Bu politika istek akışına eklendiğinde, yukarı akış sisteminin orijinal gelen isteğe dahil edilmemiş 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>

Örnek 2s78

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

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

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

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

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

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

Söz 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 bir özel istekte "myparam" adlı bir form parametresi, request.header.myparam değişkeninin değerine ayarlanıyor:

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

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

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

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

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

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

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

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

Söz 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 ayarlanı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ş üstbilgiler tanımlarsanız (<Set><Headers/></Set>) politika herhangi bir üstbilgi ayarlamaz. Bu, <Headers> öğesini atlamakla aynı etkiye sahiptir.

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

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

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

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

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

Söz 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>

1. örneks83

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 örnek, değişken adlarını küme parantezleri içine alarak değişken değerlerini yükün içine ekler:

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

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

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

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

Örnek 4s86

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

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

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

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

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

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

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

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

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

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

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

Söz dizimis87

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

1. örneks88

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

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

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

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

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

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

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

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

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

Söz 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ımlanmaktadı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, ileti şablonu olarak kabul edilir. Bu nedenle, aşağıdaki örnekte gösterildiği gibi, çalışma zamanında süslü parantez içine alınmış bir değişken adı, referans verilen değişkenin değeriyle değiştirilir:

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

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

  • Mesaj türü: Yanıt

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

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

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

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

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

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

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

  • Mesaj türü: Yanıt

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

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

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

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

Söz dizimi

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

1. örneks93

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

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

Örnek 2s94

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

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

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

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

  • Mesaj türü: İstek

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

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

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

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

Söz dizimis95

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

1. örneks96

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 küme parantezleri içinde bir değişken kullanılmaktadır:

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

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

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

  • Mesaj türü: İstek

Özel istek mesajları oluşturma

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

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

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

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

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

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

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

2. örneks98

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

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

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

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

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

Hata kodları

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

Çalışma zamanı hataları

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

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

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

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

steps.assignmessage.UnresolvedVariable 500

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

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

Dağıtım hataları

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

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

Hata değişkenleri

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

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

Örnek hata yanıtı

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

Örnek hata kuralı

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

Şemalar

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

İlgili konular

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

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

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