> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Değişkenler (Variables)

> Değişkenler, mesajın başlık, parametre ya da gövde içerisinden değer almak ve değer göndermek gibi bilgi aktarımında kullanılır. Proje bazlı kullanılmak üzere tanımlar yapılır. Apinizer Platformu'nda ilk kurulum ile birlikte hazır değişkenler gelir ve yeni proje oluşturulduğunda Yönetim menüsü altındaki değişkenler ilgili projeye kopyalanır. Tüm değişkenler Globalleştir seçeneği ile Admin sayfasına taşınarak tüm projelerde kullanılabilir hale getirilebilir.

## Değişken Tipleri

Apinizer'da 5 farklı tipte değişken oluşturulur:

<CardGroup cols={2}>
  <Card title="Başlık (Header)" icon="file-lines">
    HTTP başlıklarından değer almak için kullanılır
  </Card>

  <Card title="Parametre (Parameter)" icon="link">
    URL parametrelerinden değer almak için kullanılır
  </Card>

  <Card title="Gövde (Body)" icon="file-code">
    Mesaj gövdesinden değer almak için kullanılır
  </Card>

  <Card title="Ortam Değeri (Context Value)" icon="server">
    Sistem özelliklerinden değer almak için kullanılır
  </Card>

  <Card title="Özel Değişken (Custom Variable)" icon="code">
    Politikalar arası veri taşımak için kullanılır
  </Card>
</CardGroup>

<Info>
  Apinizer Platformu'nda ilk kurulum ile birlikte hazır değişkenler gelmektedir. Yeni bir proje oluşturulduğunda **Yönetim** menüsü altındaki değişkenler bölümündeki tüm değişkenler ilgili projeye kopyalanır.

  Yönetim menüsü altında oluşturulan değişkenler, projelere kopyalanarak kullanıldığından, bu değişkenlerde yapılan güncelleme veya silme işlemleri kullanıldıkları yerlerdeki tanımlamaları etkilemez.

  Tüm değişkenler "Globalleştir" seçeneği ile Admin sayfasına taşınarak tüm projelerde kullanılabilir hale gelir ve yönetimi Admin kullanıcısına bırakılır.
</Info>

## Başlık (Header) Tipinde Değişken Oluşturma

Bu tipte değişken oluşturmak için \*\*tip \*\* olarak **Başlık** seçimi yapılarak ilgili girdi alanları doldurulur.

Değişken adı ile başlık adı farklı tanımlanabilir. Adı sistem genelinde tekil olan bir tanımdır. Başlık adı ise istemciden  beklenen değerdir.

| Alan                         | Açıklama                                                                                                                      |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| \*\*Ad \*\*                  | Değişken tanımının adının girildiği alandır.                                                                                  |
| \*\*Açıklama \*\*            | Oluşturulan değişken ile ilgili yönetimi kolaylaştırmak için açıklama yazılabilir.                                            |
| \*\*Tipi \*\*                | Değişkenin mesajın hangi bölümde beklendiğinin girildiği alandır.                                                             |
| **Başlık Adı (Header Name)** | İstemciden  gelen istekte beklenen başlık adının girildiği alandır. Eğer bu alan çoklu değer içeriyorsa ilk değer kullanılır. |

<Info>
  Başlık değişkenleri HTTP header'larından veri çıkarmak için kullanılır. Örneğin, `X-API-Key`, `Authorization`, `Content-Type` gibi header'lardan değer alınabilir.
</Info>

## Parametre (Parameter) Tipinde Değişken Oluşturma

Bu tipte değişken oluşturmak için \*\*tip \*\* olarak **Parametre** seçimi yapılarak ilgili girdi alanları doldurulur.

Değişken adı ile parametre adı farklı tanımlanabilir. Adı sistem genelinde tekil olan bir tanımdır. Parametre adı ise istemciden  beklenen değerdir.

| Alan                               | Açıklama                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| \*\*Ad \*\*                        | Değişken tanımının adının girildiği alandır.                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| \*\*Açıklama \*\*                  | Oluşturulan değişken ile ilgili yönetimi kolaylaştırmak için açıklama yazılabilir.                                                                                                                                                                                                                                                                                                                                                                                                              |
| \*\*Tipi \*\*                      | Değişkenin mesajın hangi bölümde beklendiğinin girildiği alandır.                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **Parametre Tipi (Param Type)**    | Parametrenin istemciden  gelen istek tipinin seçildiği alandır. Varsayılan değeri QUERY'dir. Form parametre değeri olarak okunabilecek değerler; **x-www-form** değerleri ve **attached text data part** değerleridir. x-www-form değerlerinde ekleme, silme, düzenleme yapılabilir, text data part kısmı sadece okunabilirdir (read-only), ekleme/düzenleme yapılamaz. Okuma işlemi her yerden yapılabilir. Değerleri ekleme/silme/düzenleme ise sadece istek (request) hattı için geçerlidir. |
| **Parametre Adı (Parameter Name)** | İstemciden  gelen istekte beklenen parametre adının girildiği alandır. Parametre Tipi'nin değeri Query ise ve çoklu değer ise ilk değer kullanılır.                                                                                                                                                                                                                                                                                                                                             |

<Info>
  Parametre değişkenleri URL query parametrelerinden, path parametrelerinden veya form parametrelerinden veri çıkarmak için kullanılır. Örneğin, `?page=1&limit=10` gibi query parametrelerinden veya `/users/{id}` gibi path parametrelerinden değer alınabilir.
</Info>

## Gövde (Body) Tipinde Değişken Oluşturma

Bu tipte değişken oluşturmak için \*\*tip \*\* olarak **Gövde** seçimi yapılarak ilgili girdi alanları doldurulur.

| Alan                          | Açıklama                                                                                              |
| ----------------------------- | ----------------------------------------------------------------------------------------------------- |
| \*\*Ad \*\*                   | Değişken tanımının adının girildiği alandır.                                                          |
| \*\*Açıklama \*\*             | Oluşturulan değişken ile ilgili yönetimi kolaylaştırmak için açıklama yazılabilir.                    |
| \*\*Tipi \*\*                 | Değişkenin mesajın hangi bölümde beklendiğinin girildiği alandır.                                     |
| **Mesaj Tipi (Message Type)** | Mesaj içeriğinin türünün seçildiği alandır. Varsayılan değeri JSON'dır.                               |
| **JSON/XML Path**             | İstemciden  gelen isteğin değerini almak için gerekli olan JSON/XPath bilgilerinin girildiği alandır. |

<Warning>
  XPath'ın çalışma mantığında bazı farklılıklar bulunmaktadır. Bu konuda detaylı bilgi için ilgili dokümantasyon sayfasına bakılması önerilir.
</Warning>

<Info>
  Gövde değişkenleri mesaj gövdesinden (body) veri çıkarmak için kullanılır. JSON formatı için JSONPath, XML formatı için XPath kullanılır. Örneğin, JSON içeriğinden `$.user.name` gibi bir JSONPath ifadesi ile kullanıcı adı çıkarılabilir.
</Info>

## Ortam Değerleri (Context Values) Tipinde Değişken Oluşturma

Bu tipte değişken oluşturmak için \*\*tip \*\* olarak **Ortam Değerleri** seçimi yapılarak ilgili girdi alanları doldurulur.

| Alan              | Açıklama                                                                                                                                                                                                                                                                                        |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| \*\*Ad \*\*       | Değişken tanımının adının girildiği alandır.                                                                                                                                                                                                                                                    |
| \*\*Açıklama \*\* | Oluşturulan değişken ile ilgili yönetimi kolaylaştırmak için açıklama yazılabilir.                                                                                                                                                                                                              |
| \*\*Tipi \*\*     | Değişkenin mesajın hangi bölümde beklendiğinin girildiği alandır.                                                                                                                                                                                                                               |
| **Değer (Value)** | İstemciden  gelen istekte beklenen ön tanımlı değerin seçildiği alandır. Buradaki değerlerden sadece Http Info ve Backend Endpoint düzenlenebilir, diğer değerler yalnızca okunabilirdir (read-only).                                                                                           |
| **Zone ID**       | Değer olarak Date/Time grubundaki değerlerden herhangi biri seçilmişse bu alan aktifleşir. Örnek değer: "+03:00" veya "Europe/Istanbul". Daha fazlası için [Java ZoneId dokümantasyonuna](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#of-java.lang.String-) bakabilirsiniz. |

<AccordionGroup>
  <Accordion title="Request Bilgileri">
    Formda seçilebilen request bilgileri:

    * Client IP adresi
    * HTTP method
    * Content type
    * Path bilgisi
    * Query string
    * Request URI
    * Remote user bilgisi
    * Server bilgileri (ad, port, vb.)
  </Accordion>

  <Accordion title="Tarih/Saat Değerleri">
    Tarih/saat değerleri zaman dilimi (zoneId) gerektirir:

    * Epoch milisaniye
    * Formatlanmış tarih-saat
    * Formatlanmış tarih
    * Formatlanmış saat
    * Yıl, ay, gün, saat, dakika, saniye bilgileri
  </Accordion>

  <Accordion title="Ortam ve API Proxy Bilgileri">
    * Ortam ID ve adı
    * API Proxy Group ID ve adı
    * API Proxy ID ve adı
    * API Method bilgileri
  </Accordion>

  <Accordion title="Mesaj Bilgileri">
    * Mesaj correlation ID
    * İçerik uzunluğu
    * Yanıt status kodu
    * Compression bilgileri
  </Accordion>
</AccordionGroup>

<Info>
  Ortam değerleri, sistem özelliklerinden ve istek bağlamından (context) veri çıkarmak için kullanılır. Bu değerler form tabanlı yapılandırmada dropdown menüden seçilir ve kullanıcı dostu label'lar ile gösterilir.
</Info>

## Özel Değişken (Custom Variable) Tipinde Değişken Oluşturma

Bu tipte değişken oluşturmak için \*\*tip \*\* olarak **Özel Değişken** seçimi yapılarak sadece isim alanı doldurulur.

Sonrasında bu değişkenin girilen ismi ile Script ve Business Rule politikalarından değer atamak, değerini okumak, değerini değiştirmek mümkün olur.

Daha çok bir politikadan diğerine veri taşınması için kullanılmaktadır.

| Alan                                                  | Açıklama                                                                                                                                                                                                                                                                                                                                                                                                           |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| \*\*Ad \*\*                                           | Değişken tanımının adının girildiği alandır.                                                                                                                                                                                                                                                                                                                                                                       |
| \*\*Açıklama \*\*                                     | Oluşturulan değişken ile ilgili yönetimi kolaylaştırmak için açıklama yazılabilir.                                                                                                                                                                                                                                                                                                                                 |
| \*\*Tipi \*\*                                         | Değişkenin mesajın hangi bölümde beklendiğinin girildiği alandır.                                                                                                                                                                                                                                                                                                                                                  |
| **Initialized with Script (Initialized with Script)** | Custom Variable'ın başlangıç değerini belirlemek için kullanılan alandır. Bu alan yalnızca değişken **hiç oluşturulmamışsa** veya **null** ise çalışır. İlk değer vermek için, burada kullanılan isim ile customVariableMap nesnesine eklenen değişken adı birebir aynı olmalıdır. Örneğin değişken adı "test" ise script içinde en son satırda `customVariableMap.put("test",value)` şeklinde ifade yazılmalıdır. |
| **Script Language**                                   | Script Dili seçildiği alandır.                                                                                                                                                                                                                                                                                                                                                                                     |
| **Script Body**                                       | Script içeriği girildiği alandır.                                                                                                                                                                                                                                                                                                                                                                                  |

<Info>
  **Custom Variable** özellikle pipeline'lar arası veri taşımak için kullanılır. Script ve [İş Kuralı](/tr/develop/politikalar/is-kurali) politikaları ile akış esnasında Custom Variable'a veri eklenebilir, okunabilir ve değiştirilebilir. Bu sayede bir politikadan diğerine veri aktarımı sağlanır. İş Kuralı politikasında aksiyon eklerken açılan değişken seçimi ve yeni değişken oluşturma ekranları ile kaynak ve hedef değişkenleri kolayca tanımlayabilirsiniz.

  Değişkenler ekranında her zaman ilk değer alınır, başlık (header) ve parametre (parameter) değeri çoklu (multiple) geldiğinde dahi ilk değeri kullanılır. Sadece script politikasında çoklu (multiple) değer var ise # ile ayrılarak kullanılabilir.

  Log kayıtlarında gösterirken **key: val1#val2#val3** şeklinde gösterilir.
</Info>

## Runtime Context Variable Desteği (#{})

HTTP çağrısı yapan politikalar ve routing adreslerinde context variable kullanımı desteklenir. `#{değişken_adi}` formatındaki placeholder'lar, her istekte istek bağlamındaki (custom variable map) değerlerle değiştirilir.

### Desteklenen Alanlar

* **HTTP URL** – Örn: `https://api.example.com/users/#{userId}`
* **Header adı ve değeri** – Örn: `Authorization: Bearer #{token}`
* **Query parametreleri** – Örn: `?sessionId=#{sessionId}`
* **Form parametreleri** (URL-encoded body)
* **Request body içeriği**
* **Routing adresi** – Backend adresinde runtime'da `#{...}` kullanılabilir
* **JSON Error Response Template ve XML Error Response Template** içinde `#{variableName}` kullanılabilir. Hata bilgisi için: `#{error.customizedErrorCode}`, `#{error.customizedHttpCode}`, `#{error.customizedMessage}`, `#{error.defaultErrorCode}`, `#{error.defaultMessage}`, `#{error.defaultHttpCode}`

### Değişken Türleri Karşılaştırması

| Format   | Açıklama             | Çözümleme Zamanı                |
| -------- | -------------------- | ------------------------------- |
| `${key}` | Environment variable | Deploy anında (mevcut davranış) |
| `#{key}` | Context variable     | Her istekte (yeni)              |

* **Environment variable:** Ortam genelinde sabit; deploy sırasında çözümlenir.
* **Context variable:** İstek bazlı; custom variable map'ten okunur (Script politikası, veri manipülasyonu vb. ile set edilebilir).

### Etkilenen Politikalar ve Alanlar

* REST API Policy
* JOSE Validation Policy (dynamic key HTTP isteği)
* JOSE Implementation Policy (dynamic key HTTP isteği)
* Authentication API Policy
* OIDC Policy (token endpoint, introspection endpoint, resource endpoint, form parametreleri)
* Routing adresleri (backend address)
* JSON Error Response Template ve XML Error Response Template
* Identity Providers: Database Provider, LDAP Provider, API Provider

### Davranış

* Bulunamayan `#{key}` değerleri boş metin "" olarak değiştirilir; exception fırlatılmaz, uygulama loguna uyarı seviyesinde log düşülür.
* Script politikasında custom variable map'e zaten doğrudan erişim olduğu için bu placeholder mekanizması orada kullanılmaz.
* Mevcut variable tabanlı substitution ve data manipulation mantığı değişmedi; üzerine ek bir katman olarak çalışır.

### Örnek Kullanım

* **REST API URL:** `https://${baseHost}/api/v1/users/#{userId}` — `${baseHost}` deploy'da, `#{userId}` her istekte çözümlenir.
* **JOSE dynamic key endpoint:** `https://auth.example.com/keys/#{keyId}`
* **Routing adresi:** `https://#{tenant}.backend.example.com` — tenant her istekte değişebilir.

<Note>
  Bu özellik şu an yalnızca HTTP bağlamında geçerlidir.
</Note>

## Değişken Yönetimi

<CardGroup cols={2}>
  <Card title="Proje Bazlı Kullanım" icon="folder">
    Değişkenler proje bazında tanımlanır ve ilgili projedeki tüm API Proxy'lerde kullanılabilir.
  </Card>

  <Card title="Yönetim Menüsü" icon="gear">
    Yönetim menüsü altında oluşturulan değişkenler, yeni proje oluşturulduğunda otomatik olarak projeye kopyalanır.
  </Card>

  <Card title="Globalleştirme" icon="globe">
    Tüm değişkenler "Globalleştir" seçeneği ile Admin sayfasına taşınarak tüm projelerde kullanılabilir hale getirilebilir.
  </Card>

  <Card title="Bağımsız Yönetim" icon="shield">
    Yönetim menüsündeki değişkenlerin güncellenmesi veya silinmesi, kopyalandıkları projelerdeki tanımları etkilemez.
  </Card>
</CardGroup>

## Değişken Kullanım Senaryoları

Değişkenler şu durumlarda kullanılır:

<CardGroup cols={2}>
  <Card title="Politika Yapılandırması" icon="shield" href="/tr/concepts/temel-kavramlar/politika-nedir">
    Politika ayarlarında dinamik değerler için kullanılır. Rate Limiting, Throttling, API Key gibi politikalar için client tanımlama.
  </Card>

  <Card title="Koşullu Politika Çalıştırma" icon="code-branch" href="/tr/concepts/temel-kavramlar/kosullu-politika-calistirma">
    Değişken değerlerine göre politika çalıştırma kararı vermek için kullanılır.
  </Card>

  <Card title="Routing ve Yönlendirme" icon="route" href="/tr/concepts/temel-kavramlar/routing-ve-upstream">
    Değişken değerlerine göre farklı backend'lere yönlendirme yapmak için kullanılır.
  </Card>

  <Card title="Mesaj İşleme" icon="arrows-rotate" href="/tr/concepts/temel-kavramlar/mesaj-isleme-ve-politika-uygulama">
    Mesaj dönüştürme işlemlerinde dinamik değerler için kullanılır.
  </Card>

  <Card title="Script Politikası" icon="code" href="/tr/develop/politikalar/script">
    Groovy/JavaScript script'lerinde değişken kullanımı ve Custom Variable'lara veri ekleme, okuma ve değiştirme.
  </Card>

  <Card title="Pipeline'lar Arası Veri Taşıma" icon="arrows-left-right">
    Custom Variable ile pipeline'lar arası veri aktarımı. Request Pipeline'dan Response Pipeline'a, bir politikadan diğerine veri taşıma.
  </Card>
</CardGroup>

## Sonraki Adımlar

<CardGroup cols={2}>
  <Card title="Environment Variable" icon="key" href="/tr/concepts/temel-kavramlar/environment-variable">
    Ortam değişkenlerini öğrenin
  </Card>

  <Card title="Politika Nedir?" icon="shield" href="/tr/concepts/temel-kavramlar/politika-nedir">
    Politika kavramını öğrenin
  </Card>

  <Card title="Koşullu Politika Çalıştırma" icon="code-branch" href="/tr/concepts/temel-kavramlar/kosullu-politika-calistirma">
    Koşullu politika çalıştırmayı öğrenin
  </Card>

  <Card title="Script Policy" icon="code" href="/tr/develop/politikalar/script">
    Script politikasında değişken kullanımı
  </Card>

  <Card title="Variable Definition API" icon="code" href="/api-reference/appendix/variable-definition">
    Variable tanımlama API referansı
  </Card>
</CardGroup>
