FastAPI WebSockets'i Öğrenmek: Yeni Başlayanlar İçin Bir Rehber

FastAPI ile WebSocket kullanarak gerçek zamanlı uygulamalar geliştirin. API entegrasyonu, parametre geçirme ve güvenliği öğrenin.

Efe Demir

Efe Demir

5 June 2025

FastAPI WebSockets'i Öğrenmek: Yeni Başlayanlar İçin Bir Rehber

FastAPI ve WebSockets'in heyecan verici dünyasına hoş geldiniz! Bugün, FastAPI kullanarak WebSockets'in mekaniğine derinlemesine dalacağız. İster deneyimli bir geliştirici olun, ister yeni başlıyor olun, bu rehber sizi WebSockets'in temel kavramları ve pratik uygulamaları konusunda yönlendirecektir. Ancak başlamadan önce, API geliştirmenizi kolaylaştıracak kullanışlı bir aracı unutmayalım—Apidog. Apidog'u ücretsiz olarak indirebilir ve API testinizi ve dokümantasyonunuzu zahmetsizce kolaylaştırabilirsiniz.

button

FastAPI Nedir?

FastAPI, Python 3.7+ ile standart Python tür ipuçlarını temel alarak API'ler oluşturmak için modern, hızlı (yüksek performanslı) bir web çerçevesidir. Sağlam ve performanslı web API'leri hızlı bir şekilde oluşturmanıza olanak tanır. FastAPI'nin öne çıkan özelliklerinden biri, eşzamansız programlama ve WebSockets'i kolaylıkla ele alma yeteneğidir.

WebSockets Nedir?

WebSockets, tek bir TCP bağlantısı üzerinden tam çift yönlü iletişim kanalları sağlayan bir iletişim protokolüdür. Bir istek-yanıt protokolü olan HTTP'den farklı olarak, WebSockets istemci ve sunucu arasında çift yönlü iletişimi sağlar. Bu, onları sohbet uygulamaları, canlı bildirimler ve oyun gibi gerçek zamanlı uygulamalar için mükemmel kılar.

Websocket

Neden WebSockets ile FastAPI Kullanmalısınız?

FastAPI'nin tasarımı, WebSockets'i destekleyen API'ler oluşturmayı kolaylaştırır. FastAPI ile yalnızca hızlı ve güvenilir değil, aynı zamanda WebSockets kullanarak eşzamansız iletişimi de destekleyen API'ler oluşturabilirsiniz. Bu kombinasyon, modern, gerçek zamanlı uygulamalar geliştirmek için mükemmeldir.

FastAPI WebSockets'e Başlarken

Başlamak için, FastAPI uygulamalarınızı sunmak için bir ASGI sunucusu olan FastAPI ve Uvicorn'u yüklemeniz gerekir.

pip install fastapi uvicorn

Gerekli paketleri yükledikten sonra, WebSocket desteğiyle FastAPI uygulamanızı oluşturmaya başlayabilirsiniz.

Temel Bir FastAPI WebSocket Uygulaması Oluşturma

FastAPI'de WebSocket iletişiminin temellerini anlamak için basit bir örnekle başlayalım.

from fastapi import FastAPI, WebSocket
from fastapi.responses import HTMLResponse

app = FastAPI()

html = """
<!DOCTYPE html>
<html>
    <head>
        <title>WebSocket Example</title>
    </head>
    <body>
        <h1>WebSocket Example</h1>
        <button onclick="connectWebSocket()">Connect</button>
        <script>
            function connectWebSocket() {
                const ws = new WebSocket("ws://localhost:8000/ws");
                ws.onmessage = function(event) {
                    const message = event.data;
                    alert("Message from server: " + message);
                };
                ws.onopen = function() {
                    ws.send("Hello Server");
                };
            }
        </script>
    </body>
</html>
"""

@app.get("/")
async def get():
    return HTMLResponse(html)

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    data = await websocket.receive_text()
    await websocket.send_text(f"Message text was: {data}")

Bu örnekte, bir düğmeye tıklandığında bir WebSocket sunucusuna bağlanan basit bir HTML sayfamız var. Sunucu "Hello Server" mesajını alır ve "Message text was: Hello Server" ile yanıt verir.

Birden Fazla Bağlantıyı Yönetme

WebSockets'in güçlü yönlerinden biri, aynı anda birden fazla istemci bağlantısını yönetmesidir. Örneğimizi birden fazla bağlantıyı yönetmek ve mesajları tüm bağlı istemcilere yayınlamak için genişletelim.

from fastapi import FastAPI, WebSocket
from typing import List

app = FastAPI()

class ConnectionManager:
    def __init__(self):
        self.active_connections: List[WebSocket] = []

    async def connect(self, websocket: WebSocket):
        await websocket.accept()
        self.active_connections.append(websocket)

    def disconnect(self, websocket: WebSocket):
        self.active_connections.remove(websocket)

    async def broadcast(self, message: str):
        for connection in self.active_connections:
            await connection.send_text(message)

manager = ConnectionManager()

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await manager.connect(websocket)
    try:
        while True:
            data = await websocket.receive_text()
            await manager.broadcast(f"Client says: {data}")
    except:
        manager.disconnect(websocket)

Bu güncellenmiş örnekte, birden fazla WebSocket bağlantısını yönetmek için bir ConnectionManager sınıfı tanıttık. broadcast yöntemi, bağlı tüm istemcilere bir mesaj gönderir. Bu sayede, her istemci, diğer herhangi bir istemci tarafından gönderilen herhangi bir mesajı alır.

WebSocket Uç Noktalarına Parametre Geçirme

Bazen, WebSocket uç noktalarınıza parametreler geçirmeniz gerekebilir. FastAPI bunu kolaylaştırır. İşte bir örnek:

from fastapi import FastAPI, WebSocket

app = FastAPI()

@app.websocket("/ws/{client_id}")
async def websocket_endpoint(websocket: WebSocket, client_id: str):
    await websocket.accept()
    await websocket.send_text(f"Hello, Client {client_id}")
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f"Message from {client_id}: {data}")

Bu örnekte, bir client_id parametresini kabul eden bir WebSocket uç noktası tanımlıyoruz. Bu parametre, istemciyi tanımlamak ve mesajları kişiselleştirmek için kullanılabilir.

WebSockets'i API Uç Noktalarıyla Entegre Etme

FastAPI, WebSocket iletişimini mevcut API uç noktalarınızla entegre etmenize olanak tanır. Bu, gerçek zamanlı iletişimi geleneksel API istekleriyle birleştirmeniz gerektiğinde kullanışlıdır.

from fastapi import FastAPI, WebSocket, HTTPException

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    if item_id == 0:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"item_id": item_id, "name": "Item name"}

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    await websocket.send_text("Connected to WebSocket")
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f"Received: {data}")

Bu örnekte, bir WebSocket uç noktası /ws'nin yanı sıra geleneksel bir API uç noktası /items/{item_id}'ye sahibiz. Her iki uç nokta da aynı anda kullanılabilir ve uygulamanızda hem eşzamanlı hem de eşzamansız iletişimi yönetmenize olanak tanır.

Güvenlik Hususları

WebSockets ile çalışırken, kimlik doğrulama ve yetkilendirme gibi güvenlik yönlerini dikkate almak önemlidir. FastAPI, WebSocket bağlantılarınızı güvenli hale getirmek için araçlar sağlar.

WebSocket Bağlantılarını Güvenli Hale Getirme

WebSocket uç noktalarınızı güvenli hale getirmek için FastAPI'nin bağımlılık enjeksiyon sistemini kullanabilirsiniz. İşte bir WebSocket uç noktasını basit bir belirteç tabanlı kimlik doğrulamasıyla güvenli hale getirmenin bir örneği.

from fastapi import FastAPI, WebSocket, Depends, HTTPException, status

app = FastAPI()

def get_token_header(token: str = None):
    if token != "mysecrettoken":
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Invalid token")

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket, token: str = Depends(get_token_header)):
    await websocket.accept()
    await websocket.send_text("Connected to WebSocket")
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f"Received: {data}")

Bu örnekte, belirtecin geçerliliğini kontrol eden get_token_header bağımlılığını enjekte etmek için Depends işlevini kullanıyoruz. Belirteç geçersizse, bir HTTP 403 Yasak hatası yükseltilir.

İkili Verileri İşleme

WebSockets ayrıca ikili veri iletimini de destekler. Bu, dosya veya resim göndermek için yararlı olabilir. FastAPI, ikili verileri işlemeyi kolaylaştırır.

from fastapi import FastAPI, WebSocket

app = FastAPI()

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    await websocket.send_text("Connected to WebSocket")
    while True:
        data = await websocket.receive_bytes()
        await websocket.send_bytes(data)

Bu örnekte, WebSocket uç noktası receive_bytes kullanarak ikili veri alır ve send_bytes kullanarak istemciye geri gönderir.

FastAPI WebSockets'in Gerçek Dünya Uygulamaları

WebSockets inanılmaz derecede çok yönlüdür ve çeşitli gerçek dünya uygulamalarında kullanılabilir. İşte birkaç örnek:

Gerçek Zamanlı Sohbet Uygulaması

WebSockets için en yaygın kullanım durumlarından biri, gerçek zamanlı sohbet uygulamaları oluşturmaktır. FastAPI ile, birden fazla istemciyi yöneten ve mesajları gerçek zamanlı olarak yayınlayan bir sohbet sunucusu kolayca oluşturabilirsiniz.

Canlı Bildirimler

WebSockets, canlı bildirimler sunmak için mükemmeldir. Örneğin, kullanıcıları yeni mesajlar, güncellemeler veya uyarılar hakkında gerçek zamanlı olarak bilgilendirmek için WebSockets kullanabilirsiniz.

Çevrimiçi Oyun

WebSockets, oyuncular arasında gerçek zamanlı iletişimi sağlamak için çevrimiçi oyunlarda yaygın olarak kullanılmaktadır. FastAPI'nin eşzamansız programlama desteği, onu oyun sunucuları oluşturmak için harika bir seçim haline getirir.

Bir WebSocket istemcisini hata ayıklamak için Apidog'u nasıl kullanabilirsiniz?

API'leri ve gerçek zamanlı verileri yönetmek zorlayıcı olabilir. İşte Apidog'un devreye girdiği yer burasıdır. Apidog, API geliştirmeyi, test etmeyi ve yönetmeyi basitleştirerek hem FastAPI ile HTTP isteklerini hem de WebSockets ile gerçek zamanlı güncellemeleri yönetmeyi kolaylaştırır.

button
  1. Apidog'u Açın: İlk olarak, Apidog uygulamasını başlatın ve sol taraftaki "+" düğmesine tıklayın, Yeni bir açılır menü açılacaktır. Oradan "Yeni WebSocket API"'yi seçin:
Apidog interface

2. Bir Bağlantı Kurun: WebSocket API URL'sini Apidog'un adres çubuğuna girerek başlayın. Daha sonra el sıkışma işlemini başlatmak ve bir bağlantı kurmak için "Bağlan" düğmesine tıklayabilirsiniz. Apidog, el sıkışma sırasında Parametreler, Başlıklar ve Çerezler gibi parametreleri özelleştirmenize olanak tanır.

Apidog interface

3. Mesaj Gönderin ve Alın: Bağlantı kurulduktan sonra, "Mesaj" sekmesi altında mesaj gönderebilirsiniz. Metin, JSON, XML, HTML ve diğer metin formatı mesajların yanı sıra Base64 veya Onaltılık kullanarak ikili format mesajlar yazabilirsiniz. Apidog'un yeni zaman çizelgesi görünümü, bağlantı durumunu, gönderilen mesajları ve alınan mesajları kronolojik sırayla gösterir. Bir mesaja tıkladığınızda, ayrıntılarını kolayca görüntüleyebilirsiniz.

Apidog interface

4. API Dokümantasyonu: Apidog, WebSocket etkileşimlerinizi etkili bir şekilde belgelemeye olanak tanıyan, WebSocket API'leri için sağlam API dokümantasyon işlevselliğini miras alır.

Apidog interface

Hata ayıklama işleminiz sırasında bağlantı sorunları, mesaj formatı hataları ve güvenlik endişeleri gibi yaygın WebSocket sorunlarını kontrol etmeyi unutmayın.

HTTP İstekleri Göndermek için Apidog'u Kullanma

Apidog, HTTP isteklerini test etme yeteneğini daha da geliştiren çeşitli gelişmiş özellikler sunar. Bu özellikler, isteklerinizi özelleştirmenize ve daha karmaşık senaryoları zahmetsizce yönetmenize olanak tanır.

button

Adım 1: Apidog'u açın ve yeni bir istek oluşturun.

Apidog

Adım 2: Yapmak istediğiniz POST isteği için API ayrıntılarını bulun veya manuel olarak girin.

Apidog

Adım 3: Gerekli parametreleri ve istek gövdesine dahil etmek istediğiniz verileri doldurun.

Apidog

Sonuç

FastAPI ve WebSockets, modern, gerçek zamanlı uygulamalar oluşturmak için güçlü bir kombinasyondur. İster bir sohbet uygulaması, ister canlı bildirim sistemi veya çevrimiçi oyun oluşturuyor olun, FastAPI, WebSocket iletişimini verimli bir şekilde yönetmek için ihtiyacınız olan araçları sağlar.

API geliştirme sürecinizi kolaylaştırmak için Apidog'u ücretsiz indirmeyi unutmayın. Apidog, API'lerinizi test etmeyi ve belgelemeyi kolaylaştırarak size zaman ve çaba kazandırır.

button

Explore more

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Yapay zeka hızla gelişiyor. FractalAIResearch/Fathom-R1-14B, 14.8 milyar parametreyle matematik ve genel akıl yürütmede başarılı.

5 June 2025

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code'u keşfedin: Kurumsal kullanıma özel, en özelleştirilebilir yapay zeka destekli kodlama asistanı.

5 June 2025

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code, 2025'te yapay zeka destekli kodlamayı nasıl devrimleştiriyor? Özelliklerini, kullanımını ve Windsurf kısıtlamalarından sonra neden popüler olduğunu öğrenin. Geliştiriciler için okunması gereken!

5 June 2025

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin