Genel Bakış

Apinizer WebSocket proxy'si, gelen WebSocket bağlantı isteklerini backend sunucularına yönlendirirken esnek bir path mapping sistemi kullanır. Bu sistem, basit yönlendirmelerden karmaşık dinamik path'lere kadar geniş bir yelpazede yapılandırma imkanı sunar.

Desteklenen Eşleştirme Tipleri

1. Tam Eşleşme (Exact Match)

En basit ve doğrudan eşleştirme tipidir. Gelen istek path'i, tanımlanan path ile birebir aynı olmalıdır.

Format:

  • Relative Path: /sabit/path
  • Routing Template: /backend/path

Özellikler:

  • Büyük/küçük harf duyarsızdır
  • Sondaki "/" opsiyoneldir
  • Query parametreleri korunur

Örnekler:

Örnek 1:
Relative Path: /websocket/chat
Routing Template: /ws/chat
─────────────────────────────
İstek: ws://host/websocket/chat        →  ws://backend/ws/chat
İstek: ws://host/websocket/chat/       →  ws://backend/ws/chat
İstek: ws://host/websocket/chat?id=123 →  ws://backend/ws/chat?id=123

Örnek 2:
Relative Path: /live/feed
Routing Template: /streaming/feed
─────────────────────────────
İstek: ws://host/live/feed      →  ws://backend/streaming/feed
İstek: ws://host/LIVE/FEED      →  ws://backend/streaming/feed  (büyük/küçük harf duyarsız)
CODE


2. Sonda Wildcard (Wildcard End)

Path'in belirli bir kısmından sonrasının dinamik olmasını sağlar. Wildcard (/*) ile biten path'ler bu kategoriye girer.

Format:

  • Relative Path: /sabit/kisim/*
  • Routing Template: /backend/path

Özellikler:

  • Wildcard sonrası gelen tüm path segmentleri korunur
  • Alt klasörler desteklenir
  • Query parametreleri korunur

Örnekler:

Örnek 1:
Relative Path: /ws/rooms/*
Routing Template: /chat/rooms
─────────────────────────────
İstek: ws://host/ws/rooms/123          →  ws://backend/chat/rooms/123
İstek: ws://host/ws/rooms/abc/user/456 →  ws://backend/chat/rooms/abc/user/456
İstek: ws://host/ws/rooms/             →  ws://backend/chat/rooms/

Örnek 2:
Relative Path: /stream/*
Routing Template: /video/live
─────────────────────────────
İstek: ws://host/stream/hd        →  ws://backend/video/live/hd
İstek: ws://host/stream/sd/mobile →  ws://backend/video/live/sd/mobile
CODE


3. Genel Wildcard (Wildcard All)

Path içinde herhangi bir konumda wildcard (*) kullanımına izin verir. Bu, en esnek eşleştirme tipidir.

Format:

  • Relative Path: /path*/sonrasi veya */path veya /ara*/kisim
  • Routing Template: /backend/* veya */backend veya /ara*/son

Özellikler:

  • Wildcard, path'in herhangi bir yerinde olabilir
  • Birden fazla wildcard kullanılabilir
  • Eşleşen wildcard içeriği, backend path'inde aynı sırayla kullanılır

Örnekler:



Örnek 1:
Relative Path: /ws/*/chat
Routing Template: /backend/*/messaging
─────────────────────────────
İstek: ws://host/ws/room1/chat  →  ws://backend/backend/room1/messaging
İstek: ws://host/ws/user5/chat  →  ws://backend/backend/user5/messaging

Örnek 2:
Relative Path: */socket
Routing Template: */ws
─────────────────────────────
İstek: ws://host/app1/socket  →  ws://backend/app1/ws
İstek: ws://host/chat/socket  →  ws://backend/chat/ws

Örnek 3:
Relative Path: /stream*type
Routing Template: /video*format
─────────────────────────────
İstek: ws://host/stream/hd/type  →  ws://backend/video/hd/format
İstek: ws://host/stream123type   →  ws://backend/video123format
CODE



4. Parametreli Path (Parameterized)

Path segmentlerini isimlendirilmiş parametreler olarak tanımlar. Her parametre {paramAdi} formatında belirtilir.

Format:

  • Relative Path: /path/{param1}/{param2}
  • Routing Template: /backend/path/{param2}/{param1}

Özellikler:

  • Parametreler süslü parantez içinde tanımlanır
  • Parametre isimleri benzersiz olmalıdır
  • Parametreler backend path'inde farklı sırada kullanılabilir
  • Sabit path segmentleri ile birlikte kullanılabilir
  • Query parametreleri korunur

Örnekler:


Örnek 1:
Relative Path: /chat/{roomId}/{userId}
Routing Template: /ws/room/{roomId}/user/{userId}
─────────────────────────────
İstek: ws://host/chat/123/456       →  ws://backend/ws/room/123/user/456
İstek: ws://host/chat/game1/player2 →  ws://backend/ws/room/game1/user/player2

Örnek 2:
Relative Path: /app/{tenant}/{service}/{instance}
Routing Template: /ws/{tenant}/{instance}/{service}
─────────────────────────────
İstek: ws://host/app/company1/chat/inst1 →  ws://backend/ws/company1/inst1/chat
İstek: ws://host/app/org2/mail/srv3     →  ws://backend/ws/org2/srv3/mail

Örnek 3:
Relative Path: /live/{channel}/feed/{quality}
Routing Template: /streaming/{quality}/{channel}
─────────────────────────────
İstek: ws://host/live/sports/feed/hd  →  ws://backend/streaming/hd/sports
İstek: ws://host/live/news/feed/4k    →  ws://backend/streaming/4k/news
CODE

Eşleştirme Öncelik Sırası

Birden fazla path tanımı aynı isteğe uyuyorsa, aşağıdaki öncelik sırası kullanılır:

  1. Tam Eşleşme (en yüksek öncelik)
  2. Parametreli Path
  3. Wildcard Eşleşmesi (en düşük öncelik)

Örnek:

Tanımlı Path'ler:
1. /chat/room1        (Tam Eşleşme)
2. /chat/{roomId}     (Parametreli)
3. /chat/*           (Wildcard)

İstek: ws://host/chat/room1
→ 1 numaralı tanım seçilir (Tam Eşleşme öncelikli)

İstek: ws://host/chat/room2
→ 2 numaralı tanım seçilir (Parametreli Path, Wildcard'dan öncelikli)

İstek: ws://host/chat/room3/user1
→ 3 numaralı tanım seçilir (Sadece Wildcard eşleşir)
CODE


Önemli Notlar ve Best Practices

  1. Path Sonlandırma
    • Sondaki "/" opsiyoneldir
    • Sistem otomatik olarak sondaki "/" varlığını/yokluğunu normalize eder
  2. Büyük/Küçük Harf Duyarlılığı
    • Tüm path eşleştirmeleri büyük/küçük harf duyarsızdır
    • /Chat/{RoomId} ve /chat/{roomid} aynı şekilde işlenir
  3. Query Parametreleri
    • Query parametreleri her zaman backend'e aynen aktarılır
    • Query parametreleri path eşleştirmesi sırasında dikkate alınmaz
  4. Parametre İsimlendirme
    • Parametre isimleri benzersiz olmalıdır
    • Anlamlı ve açıklayıcı parametre isimleri kullanın
    • Parametre isimlerinde sadece alfanumerik karakterler kullanın
  5. Wildcard Kullanımı
    • Wildcard'ları gerektiği kadar az kullanın
    • Çok genel wildcard tanımları yerine daha spesifik path'ler tercih edin