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

# API Proxy Client Route Kullanım Kılavuzu

> Client Route özelliği ile API Gateway'de gelen isteklerin esnek ve dinamik yönlendirilmesi

# API Proxy Client Route Kullanım Kılavuzu

<Frame caption="Client Route Genel Bakış">
  <img src="https://mintcdn.com/apinizer/6BI-CH7WKi5pxWdR/images/develop/api-proxy-konfigurasyonu/client-route/01-client-route-overview.png?fit=max&auto=format&n=6BI-CH7WKi5pxWdR&q=85&s=41049070853e0dfbf982ec67c1569adf" alt="Client Route Genel Bakış" width="800" data-path="images/develop/api-proxy-konfigurasyonu/client-route/01-client-route-overview.png" />
</Frame>

## Genel Bakış

Apinizer'ın Client Route özelliği, API Gateway'de gelen isteklerin daha esnek ve dinamik bir şekilde yönlendirilmesini sağlar. Bu özellik sayesinde:

* Bir proxy'e birden fazla relative path tanımlanabilir
* Host bilgisine göre farklı proxy'lere yönlendirme yapılabilir
* HTTP header değerlerine göre yönlendirme kuralları oluşturulabilir
* Method bazlı yönlendirme yapılabilir

Bu özellik geliştirilmeden önce, her proxy için yalnızca tek bir benzersiz (unique) relative path tanımlanabiliyordu. Yeni özellik ile aynı relative path'e sahip birden fazla proxy oluşturulabilir ve bunlar arasında host, header veya method bilgilerine göre dinamik yönlendirme yapılabilir.

## Client Route Nasıl Çalışır?

Client Route özelliği, gelen istekleri belirli bir öncelik sırasına göre değerlendirerek doğru proxy'e yönlendirir.

### Yönlendirme Öncelik Sırası

Gateway, gelen istekleri aşağıdaki öncelik sırasına göre değerlendirir:

1. **Relative Path** (En yüksek öncelik)
2. **Hosts**
3. **Headers**
4. **Methods** (En düşük öncelik)

### Eşleştirme Mantığı

* **Hosts**: Birden fazla host tanımlandığında **OR** mantığı ile çalışır. Yani tanımlanan hostlardan **herhangi birinin** eşleşmesi yeterlidir.
* **Headers**: Birden fazla header tanımlandığında **AND** mantığı ile çalışır. Yani tanımlanan **tüm header'ların** eşleşmesi gerekir.

## Wildcard Hostname Kullanımı

Apinizer, host tanımlamalarında esneklik sağlamak için **wildcard (joker karakter)** kullanımını destekler. Wildcard hostname'ler, belirli bir pattern'e uyan tüm Host header değerlerinin koşulu sağlamasına ve böylece ilgili Route ile eşleşmesine olanak tanır.

### Wildcard Kuralları

Wildcard hostname'ler aşağıdaki kurallara uygun olmalıdır:

* Domain'in **en solundaki** veya **en sağındaki** label'ında yalnızca **bir adet** asterisk (\*) içerebilir
* Asterisk, domain'in başında veya sonunda kullanılabilir

### Wildcard Örnekleri

#### Sol Taraf Wildcard

```text theme={null}
*.example.com
```

Bu tanımlama aşağıdaki Host değerlerinin eşleşmesini sağlar:

* a.example.com
* x.y.example.com
* api.example.com
* test.subdomain.example.com

#### Sağ Taraf Wildcard

```text theme={null}
example.*
```

Bu tanımlama aşağıdaki Host değerlerinin eşleşmesini sağlar:

* example.com
* example.org
* example.net
* example.io

## Örnek Senaryo

Aşağıdaki tabloda 5 farklı proxy ve bunlara tanımlanmış Client Route yapılandırmaları gösterilmektedir.

| Proxy ID | Relative Path       | Methods | Hosts (VEYA)                     | Headers (VE)             |
| -------- | ------------------- | ------- | -------------------------------- | ------------------------ |
| 1        | /jokes              | -       | -                                | testmode:true, test:true |
| 2        | /jokes              | -       | hostname\_x.com, hostname\_y.com | -                        |
| 3        | /jokes1/endpoint\_x | -       | -                                | -                        |
| 4        | /jokes1             | -       | -                                | -                        |
| 5        | /jokes              | -       | -                                | -                        |

### Yönlendirme Örnekleri

Bu yapılandırmaya göre gelen istekler şu şekilde yönlendirilir:

#### Örnek 1: Temel Yönlendirme

**İstek:**

```text theme={null}
GET https://<ACCESS_URL>/jokes
```

**Sonuç:** Proxy 5'e yönlendirilir (herhangi bir koşul sağlanmadığı için varsayılan proxy)

#### Örnek 2: Host Bazlı Yönlendirme

**İstek:**

```text theme={null}
GET https://<ACCESS_URL>/jokes
Host: hostname_x.com
```

**Sonuç:** Proxy 2'ye yönlendirilir (host koşulu sağlandı)

#### Örnek 3: Eksik Header ile Yönlendirme

**İstek:**

```text theme={null}
GET https://<ACCESS_URL>/jokes
testmode: true
```

**Sonuç:** Proxy 5'e yönlendirilir (Proxy 1 için her iki header gerekli, sadece biri sağlandı)

#### Örnek 4: Tam Header Eşleşmesi

**İstek:**

```text theme={null}
GET https://<ACCESS_URL>/jokes
testmode: true
test: true
```

**Sonuç:** Proxy 1'e yönlendirilir (tüm header koşulları sağlandı)

#### Örnek 5: Path Önceliği - Temel Path

**İstek:**

```text theme={null}
GET https://<ACCESS_URL>/jokes1
```

**Sonuç:** Proxy 4'e yönlendirilir (path tam eşleşme)

#### Örnek 6: Path Önceliği - Uzun Path

**İstek:**

```text theme={null}
GET https://<ACCESS_URL>/jokes1/endpoint_x
```

**Sonuç:** Proxy 3'e yönlendirilir (daha spesifik path öncelikli)

#### Örnek 7: Path ile Alt Yol

**İstek:**

```text theme={null}
GET https://<ACCESS_URL>/jokes1/endpoint_x/endpoint_y
```

**Sonuç:** Proxy 3'e yönlendirilir (en yakın parent path eşleşmesi)

#### Örnek 8: Path Eşleşmesi - Farklı Alt Yol

**İstek:**

```text theme={null}
GET https://<ACCESS_URL>/jokes1/endpoint_y
```

**Sonuç:** Proxy 4'e yönlendirilir (parent path olarak /jokes1 eşleşti)

#### Örnek 9: Host ve Header Kombinasyonu

**İstek:**

```text theme={null}
GET https://<ACCESS_URL>/jokes
Host: hostname_x.com
testmode: true
test: true
```

**Sonuç:** Proxy 2'ye yönlendirilir (host, header'dan daha yüksek önceliğe sahip)

## Önemli Notlar

### Path Eşleştirme

* Relative path eşleştirmesi en yüksek önceliğe sahiptir.
* Daha spesifik (uzun) path'ler, daha genel (kısa) path'lerden önce değerlendirilir.
* Tam eşleşme bulunamazsa, en yakın parent path kullanılır.

### Host Eşleştirme

* Birden fazla host tanımlanabilir.
* Hostlar **OR** mantığı ile çalışır.
* İstekteki host değeri, tanımlanan hostlardan herhangi biriyle eşleşirse koşul sağlanır.

### Header Eşleştirme

* Birden fazla header tanımlanabilir.
* Header'lar **AND** mantığı ile çalışır.
* İstekte tanımlanan **tüm header'lar** mevcut olmalıdır.
* Eksik veya hatalı header durumunda bir sonraki uygun proxy'ye geçilir.

### Method Eşleştirme

* Method kontrolü en düşük önceliğe sahiptir.
* Belirtilmezse tüm HTTP methodları kabul edilir.

Client Route özelliği, API Gateway'inizde karmaşık yönlendirme senaryolarını kolayca yönetmenizi sağlar. Öncelik sırası ve eşleştirme mantığını doğru anlayarak, esnek ve güçlü API yönlendirme yapılandırmaları oluşturabilirsiniz.

## Routing Kombinasyon Tablosu

**Yok** → API proxy tanımında bulunmamaktadır. Client'ın gönderdiği kontrol edilmez.

**Eşleşti** → API proxy tanımında bulunmaktadır. Client'ın gönderdiği kontrol edilir, beklenen değeri gönderdi.

**Eşleşmedi** → API proxy tanımında bulunmaktadır. Client'ın gönderdiği kontrol edilir, beklenen değeri göndermedi.

Bu tablo API Proxy açısından, API Proxy nasıl seçilir bilgisini göstermektedir.

| #  | HOST      | PATH      | METHOD    | HEADER    | SONUÇ        | AÇIKLAMA                                                      |
| -- | --------- | --------- | --------- | --------- | ------------ | ------------------------------------------------------------- |
| 1  | Yok       | Yok       | Yok       | Yok       | ✓ SEÇİLİR    | Hiçbir kriter tanımlı değil                                   |
| 2  | Yok       | Yok       | Yok       | Eşleşti   | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (HEADER)                             |
| 3  | Yok       | Yok       | Yok       | Eşleşmedi | ✗ REDDEDİLİR | HEADER eşleşmediği için routing yapılamaz                     |
| 4  | Yok       | Yok       | Eşleşti   | Yok       | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (METHOD)                             |
| 5  | Yok       | Yok       | Eşleşti   | Eşleşti   | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (METHOD, HEADER)                     |
| 6  | Yok       | Yok       | Eşleşti   | Eşleşmedi | ✗ REDDEDİLİR | HEADER eşleşmediği için routing yapılamaz                     |
| 7  | Yok       | Yok       | Eşleşmedi | Yok       | ✗ REDDEDİLİR | METHOD eşleşmediği için routing yapılamaz                     |
| 8  | Yok       | Yok       | Eşleşmedi | Eşleşti   | ✗ REDDEDİLİR | METHOD eşleşmediği için routing yapılamaz                     |
| 9  | Yok       | Yok       | Eşleşmedi | Eşleşmedi | ✗ REDDEDİLİR | METHOD, HEADER eşleşmediği için routing yapılamaz             |
| 10 | Yok       | Eşleşti   | Yok       | Yok       | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (PATH)                               |
| 11 | Yok       | Eşleşti   | Yok       | Eşleşti   | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (PATH, HEADER)                       |
| 12 | Yok       | Eşleşti   | Yok       | Eşleşmedi | ✗ REDDEDİLİR | HEADER eşleşmediği için routing yapılamaz                     |
| 13 | Yok       | Eşleşti   | Eşleşti   | Yok       | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (PATH, METHOD)                       |
| 14 | Yok       | Eşleşti   | Eşleşti   | Eşleşti   | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (PATH, METHOD, HEADER)               |
| 15 | Yok       | Eşleşti   | Eşleşti   | Eşleşmedi | ✗ REDDEDİLİR | HEADER eşleşmediği için routing yapılamaz                     |
| 16 | Yok       | Eşleşti   | Eşleşmedi | Yok       | ✗ REDDEDİLİR | METHOD eşleşmediği için routing yapılamaz                     |
| 17 | Yok       | Eşleşti   | Eşleşmedi | Eşleşti   | ✗ REDDEDİLİR | METHOD eşleşmediği için routing yapılamaz                     |
| 18 | Yok       | Eşleşti   | Eşleşmedi | Eşleşmedi | ✗ REDDEDİLİR | METHOD, HEADER eşleşmediği için routing yapılamaz             |
| 19 | Yok       | Eşleşmedi | Yok       | Yok       | ✗ REDDEDİLİR | PATH eşleşmediği için routing yapılamaz                       |
| 20 | Yok       | Eşleşmedi | Yok       | Eşleşti   | ✗ REDDEDİLİR | PATH eşleşmediği için routing yapılamaz                       |
| 21 | Yok       | Eşleşmedi | Yok       | Eşleşmedi | ✗ REDDEDİLİR | PATH, HEADER eşleşmediği için routing yapılamaz               |
| 22 | Yok       | Eşleşmedi | Eşleşti   | Yok       | ✗ REDDEDİLİR | PATH eşleşmediği için routing yapılamaz                       |
| 23 | Yok       | Eşleşmedi | Eşleşti   | Eşleşti   | ✗ REDDEDİLİR | PATH eşleşmediği için routing yapılamaz                       |
| 24 | Yok       | Eşleşmedi | Eşleşti   | Eşleşmedi | ✗ REDDEDİLİR | PATH, HEADER eşleşmediği için routing yapılamaz               |
| 25 | Yok       | Eşleşmedi | Eşleşmedi | Yok       | ✗ REDDEDİLİR | PATH, METHOD eşleşmediği için routing yapılamaz               |
| 26 | Yok       | Eşleşmedi | Eşleşmedi | Eşleşti   | ✗ REDDEDİLİR | PATH, METHOD eşleşmediği için routing yapılamaz               |
| 27 | Yok       | Eşleşmedi | Eşleşmedi | Eşleşmedi | ✗ REDDEDİLİR | PATH, METHOD, HEADER eşleşmediği için routing yapılamaz       |
| 28 | Eşleşti   | Yok       | Yok       | Yok       | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (HOST)                               |
| 29 | Eşleşti   | Yok       | Yok       | Eşleşti   | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (HOST, HEADER)                       |
| 30 | Eşleşti   | Yok       | Yok       | Eşleşmedi | ✗ REDDEDİLİR | HEADER eşleşmediği için routing yapılamaz                     |
| 31 | Eşleşti   | Yok       | Eşleşti   | Yok       | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (HOST, METHOD)                       |
| 32 | Eşleşti   | Yok       | Eşleşti   | Eşleşti   | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (HOST, METHOD, HEADER)               |
| 33 | Eşleşti   | Yok       | Eşleşti   | Eşleşmedi | ✗ REDDEDİLİR | HEADER eşleşmediği için routing yapılamaz                     |
| 34 | Eşleşti   | Yok       | Eşleşmedi | Yok       | ✗ REDDEDİLİR | METHOD eşleşmediği için routing yapılamaz                     |
| 35 | Eşleşti   | Yok       | Eşleşmedi | Eşleşti   | ✗ REDDEDİLİR | METHOD eşleşmediği için routing yapılamaz                     |
| 36 | Eşleşti   | Yok       | Eşleşmedi | Eşleşmedi | ✗ REDDEDİLİR | METHOD, HEADER eşleşmediği için routing yapılamaz             |
| 37 | Eşleşti   | Eşleşti   | Yok       | Yok       | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (HOST, PATH)                         |
| 38 | Eşleşti   | Eşleşti   | Yok       | Eşleşti   | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (HOST, PATH, HEADER)                 |
| 39 | Eşleşti   | Eşleşti   | Yok       | Eşleşmedi | ✗ REDDEDİLİR | HEADER eşleşmediği için routing yapılamaz                     |
| 40 | Eşleşti   | Eşleşti   | Eşleşti   | Yok       | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (HOST, PATH, METHOD)                 |
| 41 | Eşleşti   | Eşleşti   | Eşleşti   | Eşleşti   | ✓ SEÇİLİR    | Tüm tanımlı kriterler OK (HOST, PATH, METHOD, HEADER)         |
| 42 | Eşleşti   | Eşleşti   | Eşleşti   | Eşleşmedi | ✗ REDDEDİLİR | HEADER eşleşmediği için routing yapılamaz                     |
| 43 | Eşleşti   | Eşleşti   | Eşleşmedi | Yok       | ✗ REDDEDİLİR | METHOD eşleşmediği için routing yapılamaz                     |
| 44 | Eşleşti   | Eşleşti   | Eşleşmedi | Eşleşti   | ✗ REDDEDİLİR | METHOD eşleşmediği için routing yapılamaz                     |
| 45 | Eşleşti   | Eşleşti   | Eşleşmedi | Eşleşmedi | ✗ REDDEDİLİR | METHOD, HEADER eşleşmediği için routing yapılamaz             |
| 46 | Eşleşti   | Eşleşmedi | Yok       | Yok       | ✗ REDDEDİLİR | PATH eşleşmediği için routing yapılamaz                       |
| 47 | Eşleşti   | Eşleşmedi | Yok       | Eşleşti   | ✗ REDDEDİLİR | PATH eşleşmediği için routing yapılamaz                       |
| 48 | Eşleşti   | Eşleşmedi | Yok       | Eşleşmedi | ✗ REDDEDİLİR | PATH, HEADER eşleşmediği için routing yapılamaz               |
| 49 | Eşleşti   | Eşleşmedi | Eşleşti   | Yok       | ✗ REDDEDİLİR | PATH eşleşmediği için routing yapılamaz                       |
| 50 | Eşleşti   | Eşleşmedi | Eşleşti   | Eşleşti   | ✗ REDDEDİLİR | PATH eşleşmediği için routing yapılamaz                       |
| 51 | Eşleşti   | Eşleşmedi | Eşleşti   | Eşleşmedi | ✗ REDDEDİLİR | PATH, HEADER eşleşmediği için routing yapılamaz               |
| 52 | Eşleşti   | Eşleşmedi | Eşleşmedi | Yok       | ✗ REDDEDİLİR | PATH, METHOD eşleşmediği için routing yapılamaz               |
| 53 | Eşleşti   | Eşleşmedi | Eşleşmedi | Eşleşti   | ✗ REDDEDİLİR | PATH, METHOD eşleşmediği için routing yapılamaz               |
| 54 | Eşleşti   | Eşleşmedi | Eşleşmedi | Eşleşmedi | ✗ REDDEDİLİR | PATH, METHOD, HEADER eşleşmediği için routing yapılamaz       |
| 55 | Eşleşmedi | Yok       | Yok       | Yok       | ✗ REDDEDİLİR | HOST eşleşmediği için routing yapılamaz                       |
| 56 | Eşleşmedi | Yok       | Yok       | Eşleşti   | ✗ REDDEDİLİR | HOST eşleşmediği için routing yapılamaz                       |
| 57 | Eşleşmedi | Yok       | Yok       | Eşleşmedi | ✗ REDDEDİLİR | HOST, HEADER eşleşmediği için routing yapılamaz               |
| 58 | Eşleşmedi | Yok       | Eşleşti   | Yok       | ✗ REDDEDİLİR | HOST eşleşmediği için routing yapılamaz                       |
| 59 | Eşleşmedi | Yok       | Eşleşti   | Eşleşti   | ✗ REDDEDİLİR | HOST eşleşmediği için routing yapılamaz                       |
| 60 | Eşleşmedi | Yok       | Eşleşti   | Eşleşmedi | ✗ REDDEDİLİR | HOST, HEADER eşleşmediği için routing yapılamaz               |
| 61 | Eşleşmedi | Yok       | Eşleşmedi | Yok       | ✗ REDDEDİLİR | HOST, METHOD eşleşmediği için routing yapılamaz               |
| 62 | Eşleşmedi | Yok       | Eşleşmedi | Eşleşti   | ✗ REDDEDİLİR | HOST, METHOD eşleşmediği için routing yapılamaz               |
| 63 | Eşleşmedi | Yok       | Eşleşmedi | Eşleşmedi | ✗ REDDEDİLİR | HOST, METHOD, HEADER eşleşmediği için routing yapılamaz       |
| 64 | Eşleşmedi | Eşleşti   | Yok       | Yok       | ✗ REDDEDİLİR | HOST eşleşmediği için routing yapılamaz                       |
| 65 | Eşleşmedi | Eşleşti   | Yok       | Eşleşti   | ✗ REDDEDİLİR | HOST eşleşmediği için routing yapılamaz                       |
| 66 | Eşleşmedi | Eşleşti   | Yok       | Eşleşmedi | ✗ REDDEDİLİR | HOST, HEADER eşleşmediği için routing yapılamaz               |
| 67 | Eşleşmedi | Eşleşti   | Eşleşti   | Yok       | ✗ REDDEDİLİR | HOST eşleşmediği için routing yapılamaz                       |
| 68 | Eşleşmedi | Eşleşti   | Eşleşti   | Eşleşti   | ✗ REDDEDİLİR | HOST eşleşmediği için routing yapılamaz                       |
| 69 | Eşleşmedi | Eşleşti   | Eşleşti   | Eşleşmedi | ✗ REDDEDİLİR | HOST, HEADER eşleşmediği için routing yapılamaz               |
| 70 | Eşleşmedi | Eşleşti   | Eşleşmedi | Yok       | ✗ REDDEDİLİR | HOST, METHOD eşleşmediği için routing yapılamaz               |
| 71 | Eşleşmedi | Eşleşti   | Eşleşmedi | Eşleşti   | ✗ REDDEDİLİR | HOST, METHOD eşleşmediği için routing yapılamaz               |
| 72 | Eşleşmedi | Eşleşti   | Eşleşmedi | Eşleşmedi | ✗ REDDEDİLİR | HOST, METHOD, HEADER eşleşmediği için routing yapılamaz       |
| 73 | Eşleşmedi | Eşleşmedi | Yok       | Yok       | ✗ REDDEDİLİR | HOST, PATH eşleşmediği için routing yapılamaz                 |
| 74 | Eşleşmedi | Eşleşmedi | Yok       | Eşleşti   | ✗ REDDEDİLİR | HOST, PATH eşleşmediği için routing yapılamaz                 |
| 75 | Eşleşmedi | Eşleşmedi | Yok       | Eşleşmedi | ✗ REDDEDİLİR | HOST, PATH, HEADER eşleşmediği için routing yapılamaz         |
| 76 | Eşleşmedi | Eşleşmedi | Eşleşti   | Yok       | ✗ REDDEDİLİR | HOST, PATH eşleşmediği için routing yapılamaz                 |
| 77 | Eşleşmedi | Eşleşmedi | Eşleşti   | Eşleşti   | ✗ REDDEDİLİR | HOST, PATH eşleşmediği için routing yapılamaz                 |
| 78 | Eşleşmedi | Eşleşmedi | Eşleşti   | Eşleşmedi | ✗ REDDEDİLİR | HOST, PATH, HEADER eşleşmediği için routing yapılamaz         |
| 79 | Eşleşmedi | Eşleşmedi | Eşleşmedi | Yok       | ✗ REDDEDİLİR | HOST, PATH, METHOD eşleşmediği için routing yapılamaz         |
| 80 | Eşleşmedi | Eşleşmedi | Eşleşmedi | Eşleşti   | ✗ REDDEDİLİR | HOST, PATH, METHOD eşleşmediği için routing yapılamaz         |
| 81 | Eşleşmedi | Eşleşmedi | Eşleşmedi | Eşleşmedi | ✗ REDDEDİLİR | HOST, PATH, METHOD, HEADER eşleşmediği için routing yapılamaz |
