Ana içeriğe atla

Genel Bakış

Apinizer’da politika ayarları, bağlantı konfigürasyonları ve routing adresleri gibi birçok string alanda dinamik değişkenler kullanılabilir. Bu sayede sabit değerler yerine ortama, isteğe veya çalışma zamanına göre değişen değerler tanımlanabilir. İki tür dinamik değişken vardır:

Environment Variable — ${key}

Ortam değişkenleri, deploy anında çözümlenir. Geliştirme, test ve üretim gibi ortamlara göre farklı değerler alabilir.

Context Variable — #{key}

Bağlam değişkenleri, her istekte çözümlenir. İstek bilgileri, tarih/saat gibi sistem verileri veya script ile atanan özel değerler içerir.

İki Değişken Türü

ÖzellikEnvironment Variable (${key})Context Variable (#{key})
Format${variableName}#{variableName}
Çözümleme ZamanıDeploy anındaHer istekte
Değer KaynağıEnvironment Variable yönetim ekranından tanımlanırSistem otomatik oluşturur veya script ile atanır
Ortam BağımlılığıEvet — dev, test, prod için farklı değerHayır — istek bazlı
Tanım GereksinimiEnvironment Variable ekranında tanım gerekirSistem değişkenleri: gerekmez. Global değişkenler: Custom Variable tanımı gerekir
Tipik KullanımHost adları, base URL’ler, port’lar, bağlantı bilgileriKullanıcı bilgileri, istek detayları, tarih/saat, hata bilgileri
DeğişkenlikDeploy sonrası sabittirHer istekte farklı olabilir

Environment Variable (${key})

Environment Variable’lar, farklı ortamlarda (geliştirme, test, üretim) farklı değerler kullanmanızı sağlar. Deploy anında çözümlenir ve çalışma zamanında sabit kalır. Örnek: ${api.hostname} → Geliştirmede localhost:8080, üretimde api.example.com
Environment Variable tanımlama ve yönetim hakkında detaylı bilgi için Environment Variable sayfasına bakabilirsiniz. CRUD işlemleri ve kullanım senaryoları için Environment Variable Yönetimi sayfasını inceleyebilirsiniz.

Context Variable (#{key})

Context Variable’lar her istekte çözümlenir ve iki alt kategoriden oluşur: 1. Sistem Context Variable’ları — Otomatik oluşturulur, tanım gerektirmez:
  • #{context.request.httpMethod}, #{context.request.uri}, #{context.request.remoteAddress}
  • #{context.system.year}, #{context.system.dateTime}
  • #{context.message.correlationId}
  • #{context.apiProxy.name}, #{context.apiProxy.id}
  • #{context.credential.clientId}, #{context.credential.username}
  • #{error.defaultErrorCode}, #{error.defaultMessage}
2. Global Variable’lar — Script ile oluşturulur, Custom Variable tanımı gerekir:
  • #{userId}, #{tenantId}, #{customValue}
  • Script politikasında customVariableMap.put("key", "value") ile değer atanır
Variable tanımları hakkında detaylı bilgi için Değişkenler sayfasına bakabilirsiniz.

Karışık Kullanım

İki tür aynı anda kullanılabilir:
https://${api.hostname}/v1/users/#{userId}
${api.hostname} deploy anında çözümlenir (örn: api.example.com), #{userId} her istekte farklı değer alır.

Desteklenen Alanlar

Dinamik değişkenler, politika ve bağlantı ayarlarında neredeyse tüm string alanlarda kullanılabilir.

Politikalar

PolitikaDesteklenen AlanlarDeğişken Türleri
REST API CallURL, header, parametre, body${key} ve #{key}
OIDCToken endpoint, introspection endpoint, resource endpoint, form parametreleri${key} ve #{key}
JOSE Validation / ImplementationDynamic key HTTP endpoint${key} ve #{key}
Authentication APIURL, header, parametre${key} ve #{key}
Message BuilderTemplate, header, form alanları${key} ve #{key}
RedactionKey-value listesi${key} ve #{key}
Diğer politikalarMetin (string) giriş alanları${key} ve #{key}
Script politikası bu tabloda yer almaz. Script politikasında #{key} placeholder mekanizması kullanılmaz çünkü değişkenlere zaten customVariableMap nesnesi ve request_httpMethod, dateTime_year gibi binding’ler üzerinden doğrudan erişim sağlanır. Detaylar için Script’te Kullanım Farkı bölümüne bakınız.

Bağlantılar

Bağlantı TürüDesteklenen Alanlar
Database ConnectionHost, port, kullanıcı adı, şifre, connection string
LDAP ConnectionURL, base DN, kullanıcı adı, şifre
Email ConnectionHost, port, kullanıcı adı

Diğer Alanlar

AlanDesteklenen Türler
Routing Adresi${key} ve #{key}
JSON Error Response Template#{key} (hata değişkenleri dahil)
XML Error Response Template#{key} (hata değişkenleri dahil)
Identity Provider (DB, LDAP, API)${key} ve #{key}
IP Group${key} ve #{key}
Credential${key} ve #{key}
Bağlantı ayarlarında (Database, LDAP, Email) genellikle ${key} (Environment Variable) kullanılır çünkü bu değerler ortam bazlıdır ve deploy anında çözümlenmelidir. #{key} (Context Variable) ise istek zamanında çözümlenir ve daha çok politika ayarlarında ve routing adreslerinde kullanılır.

UI’da Değişken Seçimi

Politika ve bağlantı düzenleme ekranlarında, breadcrumb alanında “Değişken” butonu bulunur. Bu butona tıklandığında açılan menüden iki diyaloğa erişilebilir:

Environment Variable Diyaloğu

Menüden “Environment Variable” seçildiğinde açılan diyalog, tanımlanmış tüm ortam değişkenlerini listeler:
  • Global Değişkenler — Tüm ortamlarda geçerli olan değişkenler
  • Ortama Özel Değişkenler — Belirli ortamlar için tanımlanmış değişkenler
Değişkene tıklandığında ${variableName} formatında panoya kopyalanır ve ilgili alana yapıştırılabilir.

Context Variable Diyaloğu

Menüden “Context Variable” seçildiğinde açılan diyalog, kullanılabilir tüm bağlam değişkenlerini kategorize ederek listeler:
  • Error Variables — Hata bilgileri
  • Request Variables — İstek bilgileri
  • Message Variables — Mesaj bilgileri
  • API Variables — API Proxy bilgileri
  • Credential Variables — Kimlik bilgileri
  • DateTime Variables — Tarih/saat bilgileri
Değişkene tıklandığında #{variableName} formatında panoya kopyalanır.
Her iki diyalog da bağımsızdır. Aynı alanda hem ${key} hem #{key} kullanabilirsiniz.

Context Variable Referansı

Request (İstek)

FormatAçıklamaÖrnek Değer
#{context.request.httpMethod}HTTP metoduGET, POST
#{context.request.uri}İstek URI’si/api/users/123
#{context.request.contentType}İçerik tipiapplication/json
#{context.request.remoteAddress}İstemci IP adresi192.168.1.100
#{context.request.queryString}Query parametreleri?id=123
#{context.request.pathInfo}Path bilgisi/api/users
#{context.request.contextPath}Context path/apinizer

DateTime (Tarih/Saat)

FormatAçıklamaÖrnek Değer
#{context.system.year}Yıl2026
#{context.system.month}Ay (1-12)2
#{context.system.dayOfMonth}Gün (1-31)4
#{context.system.dayOfWeek}Haftanın günü (1=Pazartesi, 7=Pazar)3
#{context.system.hour}Saat (0-23)14
#{context.system.minute}Dakika (0-59)30
#{context.system.second}Saniye (0-59)45
#{context.system.epochMillis}Unix timestamp (milisaniye)1707058245000
#{context.system.dateTime}Formatlanmış tarih/saat (UTC)2026-02-04T14:30:45.000Z
#{context.system.date}Formatlanmış tarih2026-02-04
#{context.system.time}Formatlanmış saat14:30:45

Message (Mesaj)

FormatAçıklamaÖrnek Değer
#{context.message.correlationId}Benzersiz istek ID’siabc123-def456-ghi789
API Proxy veya Proxy Group üzerinde tanımlanan özel message variable’lar da bu kategoride görüntülenir.

API

FormatAçıklamaÖrnek Değer
#{context.apiProxy.id}API Proxy ID’siapi-proxy-123
#{context.apiProxy.name}API Proxy adıUser Management API

Credential (Kimlik)

FormatAçıklamaÖrnek Değer
#{context.credential.clientId}Kimlik doğrulanmış credential key/usernamemy-app-key
#{context.credential.username}Credential kullanıcı adıadmin
#{context.credential.email}Credential e-postaadmin@example.com
#{context.credential.fullName}Credential tam adıAhmet Yılmaz

Error (Hata)

FormatAçıklamaÖrnek Değer
#{error.customizedErrorCode}Özelleştirilmiş hata koduCUSTOM_001
#{error.customizedHttpCode}Özelleştirilmiş HTTP kodu400
#{error.customizedMessage}Özelleştirilmiş mesajLütfen tekrar deneyin
#{error.defaultErrorCode}Varsayılan hata koduDEFAULT_001
#{error.defaultMessage}Varsayılan mesajBir hata oluştu
#{error.defaultHttpCode}Varsayılan HTTP kodu500

Script’te Kullanım Farkı

Context variable’lar script politikası içinde farklı formatta kullanılır. Runtime’da nokta (.) ile ayrılan format, script’te alt çizgi (_) ile yazılır:
Runtime FormatScript Format
#{context.request.httpMethod}request_httpMethod
#{context.system.year}dateTime_year
#{context.message.correlationId}message_correlationId
#{context.apiProxy.name}apiProxy_name
#{error.defaultErrorCode}error_defaultErrorCode
// Script içinde context variable kullanımı
String method = request_httpMethod
String year = dateTime_year
String correlationId = message_correlationId

Global Variable Kullanımı

Global variable’lar, Custom Variable tanımı ile oluşturulan ve script ile değer atanan değişkenlerdir. Politikalar arasında veri aktarımı için kullanılır.
1

Variable Tanımı Oluşturun

Project > Variables bölümünden Custom Variable tipinde yeni bir tanım oluşturun.
2

Script ile Değer Atayın

Script politikası içinde customVariableMap.put("variableName", "value") ile değer atayın.
3

Değişkeni Kullanın

#{variableName} formatında diğer politika ve ayarlarda kullanın.
Script Örneği:
// Request body'den kullanıcı bilgisi çıkarma
if (bodyTextFC != null && !bodyTextFC.isEmpty()) {
    def jsonBody = new groovy.json.JsonSlurper().parseText(bodyTextFC)
    if (jsonBody.userId) {
        customVariableMap.put("userId", jsonBody.userId.toString())
    }
}

// Header'dan değer alma
String token = headerMapFC.get("X-Custom-Token")
if (token != null) {
    customVariableMap.put("customToken", token)
}
Global variable’lar script politikası çalıştıktan sonra kullanılabilir. Değişkeni kullanan politika, değer atayan script politikasından sonra çalışmalıdır (policy sırası önemlidir).

Kullanım Örnekleri

Hata Yanıt Şablonu

{
  "error": {
    "code": "#{error.defaultErrorCode}",
    "message": "#{error.defaultMessage}",
    "requestId": "#{context.message.correlationId}",
    "timestamp": "#{context.system.epochMillis}"
  }
}

Dinamik Routing

https://${api.hostname}/v1/#{tenantId}/users/#{context.request.pathInfo}
${api.hostname} deploy anında, #{tenantId} ve #{context.request.pathInfo} her istekte çözümlenir.

Response Header Ekleme

X-Request-ID: #{context.message.correlationId}
X-API-Name: #{context.apiProxy.name}
X-Processed-At: #{context.system.dateTime}

Davranış Kuralları

  • Bulunamayan #{key} değerleri boş string ("") ile değiştirilir; hata fırlatılmaz, uyarı log’u yazılır
  • Bulunamayan ${key} değerleri çözümlenemez ve olduğu gibi kalır
  • Script politikasında custom variable map’e doğrudan erişim olduğu için #{...} placeholder mekanizması kullanılmaz
  • Variable isimleri büyük/küçük harf duyarsızdır

Sonraki Adımlar

Environment Variable

Ortam değişkenlerini detaylı öğrenin

Değişkenler

Variable tanımlarını öğrenin

Script Politikası

Script ile değişken kullanımı

Environment Variable Yönetimi

Environment Variable CRUD işlemleri