Ana içeriğe atla
Bu doküman spesifik bir politikanın detaylı kullanımını anlatır. Eğer Apinizer politika yapısını ilk kez kullanıyorsanız veya politikaların genel çalışma prensiplerini öğrenmek istiyorsanız, öncelikle Politika Nedir? sayfasını okumanızı öneririz.

Genel Bakış

Amacı Nedir?

  • Template ve form tabanlı mesaj oluşturarak değişken değerlerini hedef değişkenlere atamak.
  • İstek veya yanıttaki body, header, query parametresi gibi kaynaklardan veri okuyup yeni değişkenler oluşturmak.
  • JEXL expression’ları ile dinamik içerik üretmek ve birden fazla kaynaktan veri birleştirmek.
  • Satır bazlı koşullu çalıştırma ile sadece belirli durumlarda değişken ataması yapmak.

Çalışma Prensibi

  1. İstek Gelişi: API Gateway’e gelen HTTP/HTTPS isteği için MessageContext oluşturulur.
  2. Politika Kontrolü: Mesaj Oluşturucu politikası aktif ise, sistem aşağıdaki sırayla kontrol yapar:
    • Condition (koşul) tanımlı mı? Varsa koşul sağlanıyor mu?
    • Politika aktif mi (active=true)?
  3. Satır Zinciri Çalıştırma: Satır listesi (Row List) sırasıyla değerlendirilir. Her satır için:
    • Satır koşulu kontrol edilir (varsa).
    • Form modunda: Kaynak değişkenden değer okunur.
    • Template modunda: Şablon #{variable} syntax’ı ile işlenir, JEXL expression’lar evaluate edilir.
    • Sonuç hedef değişkene yazılır.
  4. Boş Değer İşleme:
    • Değer boş ve Zorunlu=true ise hata fırlatılır.
    • Değer boş ise varsayılan değer kullanılır.
  5. Hata İşleme: Hata Durumunda Devam Et aktifse satır atlanır ve sonraki satıra geçilir. Pasifse politika hata ile sonlanır.

Özellikler ve Yetenekler

Temel Özellikler

  • İki Oluşturma Modu: Form modu (basit değişken kopyalama) ve Template modu (JEXL expression desteği ile dinamik içerik oluşturma).
  • Satır Bazlı İşleme: Her satır bağımsız olarak yapılandırılabilir; kaynak, hedef, koşul, varsayılan değer ayrı ayrı belirlenir.
  • Sürükle-Bırak Sıralama: Satır sırası sürükle-bırak ile kolayca değiştirilebilir.
  • Aktif/Pasif Durum Kontrolü: Politikanın aktif veya pasif durumunu kolayca değiştirme. Pasif durumda politika uygulanmaz ancak yapılandırması saklanır.
  • Koşul Bazlı Uygulama: Query Builder ile hem politika seviyesinde hem satır seviyesinde koşullar tanımlanabilir.

İleri Düzey Özellikler

  • JEXL Expression Desteği: Template modunda #{expression} syntax’ı ile matematiksel, mantıksal ve string operatörleri kullanılabilir.
  • Çoklu Değişken Kaynağı: Body (JSON/XML path), Header, Query/Path/Form parametreleri ve Context Variable’lardan veri okunabilir.
  • Satır Seviyesi Hata Yönetimi: Her satır için Hata Durumunda Devam Et ve Zorunlu bayrakları ayrı ayrı ayarlanabilir.
  • Export/Import Özelliği: Politika yapılandırmasını ZIP dosyası olarak export etme. Farklı ortamlara (Development, Test, Production) import etme. Versiyon kontrolü ve yedekleme imkanı.
  • Policy Group ve Proxy Group Desteği: Birden fazla politikayı Policy Group içinde yönetme. Proxy Group’lara toplu politika atama. Merkezi güncelleme ve deploy işlemleri.
  • Deploy ve Versiyonlama: Politika değişikliklerini canlı ortama deploy etme. Hangi API Proxy’lerde kullanıldığını görme (Policy Usage). Proxy Group ve Policy Group kullanım raporları.

Kullanım Senaryoları

SenaryoDurumÇözüm (Politika Uygulaması)Beklenen Davranış / Sonuç
Dinamik Header OluşturmaFarklı kaynaklardan alınan bilgilerle özel header oluşturulacak.Template modu: User: #{body.$.userName}, Time: #{dateTime.formattedText} → hedef: X-Custom-Header.Header her istekte güncel kullanıcı adı ve zaman bilgisiyle doldurulur.
Değişken Kopyalamaİstek body’sindeki bir alan, başka bir değişkene atanacak.Form modu: Kaynak=body.$.userId → Hedef=customUserId.userId değeri customUserId değişkenine kopyalanır, sonraki politikalarda kullanılabilir.
Koşullu ZenginleştirmeSadece POST isteklerinde body’den veri çıkarılacak.Satır koşulu: request.method = POST. Template modu ile body’den veri çıkarma.GET isteklerinde satır atlanır, POST’ta veri çıkarılır.
Varsayılan Değer AtamaHeader’da eksik olan bir değer için fallback sağlanacak.Form modu: Kaynak=header.X-Tenant-Id, Varsayılan Değer=default-tenant, Zorunlu=Hayır.Header varsa değeri kullanılır, yoksa default-tenant atanır.
Çoklu Kaynak BirleştirmeFarklı kaynaklardan alınan bilgiler tek bir değişkende birleştirilecek.Template modu: #{header.X-User-Id}-#{dateTime.timestamp}-#{apiProxy.name}.Birleşik değer hedef değişkene yazılır.
Zorunlu Alan DoğrulamaBelirli bir değişkenin boş olmaması garanti edilecek.Form modu: Kaynak=body.$.orderId, Zorunlu=Evet, Hata Durumunda Devam Et=Hayır.orderId boşsa politika hata fırlatır ve akış durur.

Politika Parametrelerini Yapılandırma

Bu bölümde yeni bir Mesaj Oluşturucu politikası oluşturabilir ya da mevcut politika parametrelerini yapılandırarak mesaj oluşturma kurallarını belirleyebilirsiniz. Aşağıdaki görsel Definition sekmesini gösterir: politika durumu, ad ve açıklama alanları; Satırlar (Rows) bölümü ve Add ile eklenen örnek Form satırı (kaynak/hedef değişken, varsayılan değer, zorunlu, hata durumunda devam) ve Template satırı (şablon düzenleyici ve hedef değişken). Üstte Conditions, Error Message Customization, API Proxies Using Policy, API Proxy Groups Using Policy sekmeleri de yer alır. Mesaj Oluşturucu global politika Definition sekmesi, Satırlar ve Ekle menüsünde Form ve Template seçenekleri Form modunda satır düzenleme diyaloğunda kaynak ve hedef değişken, varsayılan değer, zorunlu ve hata durumunda devam alanları gösterilir. Mesaj Oluşturucu satır düzenleme Form modu: Kaynak ve Hedef Değişken, Varsayılan Değer, Zorunlu, Hata Durumunda Devam Et Template modunda şablon alanı (code editor), #{variableName} biçiminde değişken ipucu ve hedef değişken; Hata Durumunda Devam Et seçeneği bulunur. Mesaj Oluşturucu satır düzenleme Template modu: Şablon, Hedef Değişken, Hata Durumunda Devam Et

Yeni Mesaj Oluşturucu Politikası Oluşturma

Yapılandırma Adımları

AdımAçıklama / İşlem
Adım 1: Oluşturma Sayfasına Gitme- Sol menüden Development → Global Settings → Global Policies → Message Builder bölümüne gidin.
- Sağ üstteki [+ Create] butonuna tıklayın.
Adım 2: Temel Bilgileri GirmePolicy Status (Politika Durumu): Aktif/Pasif durumu gösterir. Yeni politikalar varsayılan olarak aktiftir.

Name (İsim) Zorunlu:
Örnek: Request_Enrichment_Builder
- Benzersiz isim girin, boşlukla başlamaz.
- Sistem otomatik kontrol eder: Yeşil tik: kullanılabilir, Kırmızı çarpı: mevcut isim.

Description (Açıklama):
Örnek: “İstek body’sindeki kullanıcı bilgilerini çıkararak header’lara ekler.”
- Maks. 1000 karakter.
- Politikanın amacını açıklayın.
Adım 3: Variable Kullanımı- Sayfanın üst kısmındaki işlem butonları alanında, [<> Variable] butonunu kullanarak dinamik değer seçebilirsiniz.
- Context/global variable ifadeleri sayesinde politika parametrelerini sabit değer yerine değişken tabanlı yönetebilirsiniz.
- Bu kullanım, değişen değerlerde manuel güncelleme ihtiyacını azaltır ve operasyonel kolaylık sağlar.
- Detaylı bilgi için Dinamik Değişkenler sayfasını inceleyebilirsiniz.
Adım 4: Satır Ekleme- Satır ekle butonuna tıklayın.
- Açılan menüden oluşturma modunu seçin:
- Form: Basit değişken kopyalama.
- Template: JEXL expression desteği ile şablon tabanlı oluşturma.
- Yeni satır listeye eklenir.
Adım 5: Satır Düzenleme- Satır üzerindeki menüden Düzenle seçin veya satıra çift tıklayın.
- Açılan diyalogda aşağıdaki alanları yapılandırın:

Oluşturma Modu (Build Mode): Form veya Template seçin.

Kaynak Değişken (Source Variable) (Form modu):
Değişken seçim diyaloğundan kaynak değişkeni seçin (body, header, query param vb.).

Şablon (Template) (Template modu):
Code editor’da #{variable} syntax’ı ile şablon yazın.
JEXL expression’lar desteklenir.

Hedef Değişken (Target Variable) Zorunlu:
Sonucun yazılacağı değişkeni seçin.

Varsayılan Değer (Default Value):
Kaynak boş olduğunda kullanılacak değer.

Zorunlu (Required):
İşaretlenirse, kaynak değer boş olduğunda hata fırlatılır. Varsayılan: Hayır.

Hata Durumunda Devam Et (Continue on Error):
İşaretlenirse, satırda hata oluştuğunda sonraki satıra geçilir. Varsayılan: Evet.
Adım 6: Satır Koşulu Tanımlama (İsteğe Bağlı)- Satır düzenleme diyaloğundaki Koşul bölümünden Query Builder ile satır seviyesinde koşul tanımlayabilirsiniz.
- Koşul sağlanmadığında satır atlanır.
Adım 7: Satır Sıralama- Satırları sürükle-bırak ile yeniden sıralayabilirsiniz.
- Satırlar listede göründükleri sırayla çalıştırılır.
Adım 8: Koşul Tanımlama (İsteğe Bağlı)- Condition sekmesine geçin.
- Politika seviyesinde koşul tanımlayarak politikanın hangi durumda aktif olacağını belirleyin.

Detaylar için: Koşullar (Conditions)
Adım 9: Hata Mesajı Özelleştirme (İsteğe Bağlı)- Error Message Customization sekmesine gidin.
- Politika hata fırlatığında dönecek mesajı özelleştirin.
- #{error.defaultErrorCode}, #{message.correlationId} gibi yer tutucular kullanılabilir.

Detay için: Şablon Tabanlı Hata Mesajları
Adım 10: Kaydetme- Sağ üstteki [Save] butonuna tıklayın.

Kontrol Listesi:
- Benzersiz isim
- En az bir satır mevcut
- Her satırda hedef değişken seçili
- Form modunda kaynak değişken seçili
- Template modunda şablon dolu

Sonuç:
- Politika listeye eklenir.
- API’lere bağlanabilir.
- Global politikaysa otomatik uygulanır.
Koşullar ve Hata Mesajı Özelleştirme panellerinin açıklaması için Politika Nedir? sayfasındaki Koşullar ve Hata Mesajı Özelleştirme (Error Message Customization) bölümlerini inceleyebilirsiniz. Hata mesajı yapılandırmasının tüm katmanları, öncelik sırası ve senaryo örnekleri için Hata Mesajı Yapılandırma Rehberi sayfasına bakın.

Satır Parametreleri

ParametreAçıklamaZorunluVarsayılan
Oluşturma Modu (Build Mode)Form: Kaynak değişkenden hedef değişkene basit kopyalama.
Template: JEXL expression desteği ile şablon tabanlı oluşturma.
Evet
Kaynak Değişken (Source Variable)Form modunda değerin okunacağı kaynak değişken. Body, header, query param, vb.Form modunda evet
Şablon (Template)Template modunda #{variable} syntax’ı ile yazılan şablon string’i.Template modunda evet
Hedef Değişken (Target Variable)Sonucun yazılacağı hedef değişken.Evet
Varsayılan Değer (Default Value)Kaynak boş olduğunda kullanılacak değer.Hayır
Zorunlu (Required)true ise kaynak boş olduğunda hata fırlatılır.Hayırfalse
Hata Durumunda Devam Et (Continue on Error)true ise satırda hata oluştuğunda sonraki satıra geçilir.Hayırtrue
Koşul (Condition)Satır seviyesinde koşul. Sağlanmazsa satır atlanır.Hayır

Template Syntax

Template modunda #{...} syntax’ı ile değişkenlere ve JEXL expression’lara erişilir: Basit Değişken Erişimi:
#{body.$.userName}          → JSON body'den userName alanı
#{body.$[0].name}           → JSON array body'den ilk elemanın name alanı
#{body./root/name}          → XML body'den XPath ile değer
#{header.Authorization}     → Authorization header değeri
#{query.page}               → Query parametresi
#{form.username}            → Form parametresi
#{path.id}                  → Path parametresi
#{credential.clientId}      → Kimlik doğrulanmış credential anahtarı/kullanıcı adı
#{request.remoteAddress}    → İstemci IP adresi (yapılandırılmışsa yönlendirilmiş IP'yi yansıtır)
#{dateTime.formattedText}   → Formatlanmış tarih/saat (UTC, yyyy-MM-dd HH:mm:ss)
Bölge Belirtmeli Değişken Erişimi (Request/Response):
#{request.body.$.field}     → İstek body alanı (açık bölge belirtimi)
#{request.header.Name}      → İstek header değeri (açık bölge belirtimi)
#{response.body.$.data.id}  → Yanıt body alanı (açık bölge belirtimi)
#{response.header.Name}     → Yanıt header değeri (açık bölge belirtimi)
#{request.body./root/name}  → İstek body XPath (açık bölge belirtimi)
#{response.body./root/name} → Yanıt body XPath (açık bölge belirtimi)
Özel Değişken Üzerinde Path (JSONPath/XPath):
#{myVar.$.user.name}                → Özel değişkenin JSON içeriği üzerinde JSONPath
#{myVar./root/element}              → Özel değişkenin XML içeriği üzerinde XPath
#{myVar./bookstore/book[1]/title}   → Özel değişken üzerinde predicate'li XPath
Bağlam Değişkenleri (Context Variables):
Söz DizimiAçıklama
#{context.request.httpMethod}HTTP metodu (GET, POST, vb.)
#{context.request.remoteAddress}İstemci IP adresi
#{context.response.statusCode}Yanıt durum kodu
#{context.message.correlationId}Correlation ID
#{context.apiProxy.name}API Proxy adı
#{context.apiProxy.id}API Proxy kimliği
#{context.apiMethod.name}API Metot adı
#{context.apiMethod.httpMethod}API Metot HTTP metodu
#{context.system.year}Mevcut yıl (tam sayı)
#{context.system.dateTime}Tarih-saat, UTC (yyyy-MM-dd’T’HH:mm:ss.SSS’Z’)
#{context.credential.username}Kimlik doğrulanmış kullanıcı adı
#{context.credential.email}Kimlik doğrulanmış kullanıcı e-posta
#{context.credential.clientId}Kimlik doğrulanmış credential anahtarı/kullanıcı adı
#{context.environment.name}Ortam adı
#{context.environment.id}Ortam kimliği
JEXL Expression (Tek Satır):
#{body.$.price * 1.18}                       → Fiyata KDV ekleme
#{body.$.firstName + ' ' + body.$.lastName}  → Ad ve soyad birleştirme
#{body.$.age >= 18 ? 'adult' : 'minor'}      → Koşullu değer
#{context.request.httpMethod == 'POST' ? 'create' : 'read'}  → HTTP metoduna göre işlem tipi
#{body.$.status == 'available' ? '{"label":"Satın Alınabilir"}' : null}  → JSON string üretimi
JEXL Script (Çok Satır, Döngü): #{...} bloğu içinde for, while, var, if/else ifadeleri kullanılabilir. Body’den JSONPath ile çekilen array ve object değerleri otomatik olarak liste ve haritaya dönüştürülür; for (item : collection) ile gezinilebilir. Dizi Gezinme:
#{
  var out = '[';
  var first = true;
  for (item : body.$.tags) {
    if (!first) { out = out + ','; }
    out = out + '{"id":' + item.id + ',"name":"' + item.name + '"}';
    first = false;
  }
  out + ']'
}
Toplama / Sayaç:
#{
  var total = 0;
  for (item : body.$.items) {
    total = total + item.price;
  }
  total
}
if/else ile Koşullu Değer:
#{
  var role = body.$.user.role;
  if (role == 'admin') {
    'TAM_YETKİ'
  } else if (role == 'manager') {
    'KISITLI_YETKİ'
  } else {
    'SADECE_OKUMA'
  }
}
Saat Dilimi Destekli Tarih Formatlama (dtf yardımcısı): JEXL ifadeleri içinde dtf.format() ile belirli bir saat diliminde tarih formatlanabilir. Varsayılan olarak #{dateTime.formattedText} UTC saati döndürür. Belirli bir saat diliminde almak için:
#{dtf.format('+03:00')}                              → 2026-03-02 15:30:45
#{dtf.format('UTC')}                                  → 2026-03-02 12:30:45
#{dtf.format('+03:00', 'dd/MM/yyyy HH:mm:ss')}       → 02/03/2026 15:30:45
#{dtf.format('+03:00', 'yyyy-MM-dd HH:mm:ssXXX')}    → 2026-03-02 15:30:45+03:00
#{dtf.format('Europe/Istanbul')}                      → 2026-03-02 15:30:45
#{dtf.epochMillis()}                                  → 1740912645000
JEXL Script’te son değerlendirilen ifadenin değeri döndürülür. return anahtar kelimesi kullanılmaz.
Bu politika yalnızca HTTP API Proxy’lerinde kullanılabilir. gRPC API Proxy’lerinde desteklenmez.

Politikayı Silme

Bu politikanın silme adımları ve kullanımdayken uygulanacak işlemler için Politika Yönetimi sayfasındaki Akıştan Politika Kaldırma bölümüne bakabilirsiniz.

Politikayı Dışa/İçe Aktarma

Bu politikanın dışa aktarma (Export) ve içe aktarma (Import) adımları için Export/Import sayfasına bakabilirsiniz.

Politikayı API’ye Bağlama

Bu politikanın API’lere nasıl bağlanacağına ilişkin süreç için Politika Yönetimi sayfasındaki Politikayı API’ye Bağlama bölümüne bakabilirsiniz.

İleri Düzey Özellikler

ÖzellikAçıklama ve Kullanım Adımları
JEXL Expression Zinciri- Template modunu seçin.
- Şablonda #{expression} syntax’ı ile karmaşık ifadeler yazın.
- Matematiksel (+, -, *, /), mantıksal (&&, ||, !), karşılaştırma (==, !=, <, >) ve koşullu (? :) operatörler kullanılabilir.
JEXL Script ile Döngü ve Koşul- Template modunda #{...} bloğu içine çok satırlı script yazın.
- for, while, var, if/else ifadeleri desteklenir.
- Body’den çekilen JSON array değerleri otomatik olarak listeye dönüştürülür; for (item : body.$.liste) ile gezinilebilir.
- Son değerlendirilen ifadenin değeri döndürülür; return kullanılmaz.
Çoklu Kaynak Birleştirme- Template modunda birden fazla kaynak kullanın.
- Örnek: ID: #{body.$.id}, Name: #{header.X-User-Name}, Time: #{context.system.dateTime}
- Birleşik değer tek bir hedef değişkene yazılır.
Koşullu Satır Çalıştırma- Satır düzenleme diyaloğunda Query Builder ile koşul tanımlayın.
- Örnek: Sadece Content-Type = application/json olan isteklerde body parse etme.
- Koşul sağlanmadığında satır atlanır, diğer satırlar çalışmaya devam eder.
Ara Değişken Zinciri- Bir satırda oluşturulan özel değişkeni sonraki satırların şablonunda kullanın.
- Örnek: İlk satırda petName değişkenine değer atayın, sonraki satırlarda #{petName} ile kullanın.
- Bu pattern, karmaşık JSON çıktılarını aşamalı olarak oluşturmayı sağlar.
Özel Değişkende JSONPath/XPath- Özel bir değişkenin JSON veya XML içeriğinden belirli bir değeri çıkarmak için JSONPath veya XPath uygulayabilirsiniz.
- Template modunda: #{myVar.$.user.name} (JSONPath) veya #{myVar./root/element} (XPath) söz dizimini doğrudan şablonda kullanın.
- Form modunda: Kaynak olarak Özel Değişken seçin, ardından içerik tipini (JSON veya XML) belirtin ve path ifadesini girin.
- Örnek: fullResponse adlı özel değişken bir JSON body içeriyor; #{fullResponse.$.user.name} şablonuyla sadece name alanı çıkarılır.

Best Practices

Yapılması Gerekenler ve En İyi Uygulamalar

KategoriAçıklama / Öneriler
Satır SıralamasıKötü: Bağımlı satırları rastgele sıralamak.
İyi: Bağımsız satırları önce, bağımlı satırları sonra sıralamak.
En İyi: Sık kullanılan ve hafif satırları başa alıp, ağır template işlemlerini sona bırakmak.
Mod SeçimiKötü: Basit kopyalama için Template modu kullanmak.
İyi: Basit kopyalamada Form, karmaşık oluşturmada Template kullanmak.
En İyi: Form modunu varsayılan olarak tercih edip, sadece birden fazla kaynak veya expression gerektiğinde Template’e geçmek.
Hata YönetimiKötü: Tüm satırlarda Hata Durumunda Devam Et=Hayır bırakmak.
İyi: Kritik satırlarda Hayır, opsiyonel satırlarda Evet kullanmak.
En İyi: Zorunlu ve Hata Durumunda Devam Et bayraklarını satır önemine göre ayrı ayrı yapılandırmak.
Varsayılan DeğerlerKötü: Varsayılan değer tanımlamadan zorunlu olmayan satırlar bırakmak.
İyi: Opsiyonel satırlara anlamlı varsayılan değer vermek.
En İyi: Varsayılan değerleri downstream servisin beklentilerine uygun belirlemek.

Güvenlik En İyi Uygulamaları

Güvenlik AlanıAçıklama / Uyarılar
Hassas Veri İşlemeTemplate’lerde hassas veriler (şifre, token) kullanırken dikkatli olun. Hedef değişken adını loglarda görünmeyecek şekilde seçin.
JEXL Expression GüvenliğiExpression’larda kullanıcı girişinden gelen değerleri doğrudan kullanmaktan kaçının.
Hedef Değişken KontrolüHedef değişken olarak güvenlik açısından kritik değişkenleri (authentication token vb.) yanlışlıkla overwrite etmeyin.

Kaçınılması Gerekenler

KategoriAçıklama / Uyarılar
Boş Satır ListesiNeden kaçınılmalı: Politika kaydedilse bile hiçbir işlem yapılmaz.
Alternatif: En az bir satır tanımlayın.
Gereksiz Template KullanımıNeden kaçınılmalı: Basit değişken kopyalama için Template modu gereksiz parsing maliyeti oluşturur.
Alternatif: Basit kopyalamada Form modunu kullanın.
Koşulsuz Zorunlu SatırlarNeden kaçınılmalı: Her istekte zorunlu kontrol yapılır, bazı endpoint’lerde gereksiz hata fırlatılabilir.
Alternatif: Zorunlu satırlara uygun koşul ekleyin.

Performans İpuçları

KriterÖneri / Etki
Mod SeçimiÖneri: Mümkün olduğunca Form modunu tercih edin.
Etki: JEXL parsing maliyetinden kaçınılır.
Satır SayısıÖneri: Satır sayısını minimumda tutun, gereksiz atama yapmayın.
Etki: Her satır ayrı bir işlem döngüsüdür, az satır = düşük gecikme.
Template KarmaşıklığıÖneri: Template’lerde basit expression’lar kullanın, karmaşık iş mantığını Script politikasına taşıyın.
Etki: JEXL engine yükü azalır.
Koşul KullanımıÖneri: Gereksiz satırları koşul ile filtreleyin.
Etki: İlgili olmayan isteklerde satır atlanır, throughput artar.

Sık Sorulan Sorular (SSS)

KategoriSoruCevap
GenelForm ve Template modu arasındaki fark nedir?Form modu tek bir kaynak değişkenden hedefe basit kopyalama yapar. Template modu ise #{variable} syntax’ı ve JEXL expression’lar ile birden fazla kaynaktan dinamik içerik üretir.
GenelBu politika gRPC API Proxy’lerinde kullanılabilir mi?Hayır, Mesaj Oluşturucu politikası yalnızca HTTP API Proxy’lerinde desteklenir.
TeknikTemplate’de hangi değişken türleri kullanılabilir?Body (JSON path body.$.path veya XPath body./path), Header (header.Name), Query (query.name), Form (form.name), Path (path.name) parametreleri ve Context Variable’lar kullanılabilir.
TeknikJEXL expression’lar hangi operatörleri destekler?Aritmetik (+, -, *, /), karşılaştırma (==, !=, <, >, <=, >=), mantıksal (&&, ||, !) ve ternary (? :) operatörleri desteklenir.
KullanımSatır sırası önemli midir?Evet, satırlar listede göründükleri sırayla çalıştırılır. Bir satırın hedef değişkeni, sonraki satırın kaynağı olabilir.
KullanımKaynak değer boş olduğunda ne olur?Zorunlu=Evet ise hata fırlatılır. Zorunlu=Hayır ise varsayılan değer kullanılır. Varsayılan değer de yoksa boş string atanır.
TeknikTemplate’de for döngüsü kullanabilir miyim?Evet, #{...} bloğu içinde çok satırlı JEXL Script yazılabilir. for (item : body.$.items) ile JSON array elemanları üzerinde gezinebilirsiniz. JSON array değerleri otomatik olarak listeye dönüştürülür.
TeknikJEXL Script’te return kullanmalı mıyım?Hayır, return anahtar kelimesi kullanılmaz. Bloğun sonunda son değerlendirilen ifadenin değeri otomatik olarak döndürülür.
TeknikŞablon içinde {} içeren JSON string üretebilir miyim?Evet, dengeli parantez tarayıcısı sayesinde #{...} bloğu içinde { ve } serbestçe kullanılabilir. Örneğin: #{durum == 'aktif' ? '{"etiket":"Aktif"}' : 'null'}
TeknikBody bir JSON dizisiyse eleman nasıl erişirim?#{body.$[0].alan} söz dizimi ile dizinin ilk elemanına erişebilirsiniz. $[1], $[2] şeklinde indeks belirterek diğer elemanlara da ulaşılabilir.
TeknikÖzel bir değişkenden JSONPath veya XPath ile belirli bir değeri çıkarabilir miyim?Evet. Template modunda: #{myVar.$.path} (JSONPath) veya #{myVar./xpath} (XPath) söz dizimini doğrudan şablonda kullanabilirsiniz. Form modunda: Kaynak olarak Özel Değişken seçin, içerik tipini (JSON veya XML) belirtin ve path ifadesini girin. Bu, özel değişken tam bir JSON veya XML body içerdiğinde ve yalnızca belirli bir alan gerektiğinde kullanışlıdır.
TeknikŞablonda istek veya yanıtı açıkça belirtebilir miyim?Evet. #{request.body.$.alan} veya #{response.body.$.alan} ile belirli bir bölgeyi hedefleyebilirsiniz. Benzer şekilde #{request.header.Name} ve #{response.header.Name} söz dizimleri desteklenir. Ön ek kullanılmadığında politikanın varsayılan bölgesi (istek veya yanıt pipeline’ı) kullanılır.
TeknikBelirli bir saat diliminde tarih/saat nasıl alınır?Tüm dateTime.* değişkenleri UTC değer döndürür. Belirli bir saat diliminde almak için #{dtf.format('+03:00')}, özel format ile #{dtf.format('+03:00', 'dd/MM/yyyy HH:mm:ss')} kullanabilirsiniz. Europe/Istanbul gibi isimli saat dilimleri de desteklenir.