WebSocket Proxy Yönlendirme Kılavuzu
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)
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
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
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
Eşleştirme Öncelik Sırası
Birden fazla path tanımı aynı isteğe uyuyorsa, aşağıdaki öncelik sırası kullanılır:
- Tam Eşleşme (en yüksek öncelik)
- Parametreli Path
- 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)
Önemli Notlar ve Best Practices
- Path Sonlandırma
- Sondaki "/" opsiyoneldir
- Sistem otomatik olarak sondaki "/" varlığını/yokluğunu normalize eder
- 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
- Query Parametreleri
- Query parametreleri her zaman backend'e aynen aktarılır
- Query parametreleri path eşleştirmesi sırasında dikkate alınmaz
- Parametre İsimlendirme
- Parametre isimleri benzersiz olmalıdır
- Anlamlı ve açıklayıcı parametre isimleri kullanın
- Parametre isimlerinde sadece alfanumerik karakterler kullanın
- Wildcard Kullanımı
- Wildcard'ları gerektiği kadar az kullanın
- Çok genel wildcard tanımları yerine daha spesifik path'ler tercih edin