KoderKoder.ai
FiyatlandırmaKurumsalEğitimYatırımcılar için
Giriş YapBaşla

Ürün

FiyatlandırmaKurumsalYatırımcılar için

Kaynaklar

Bize UlaşınDestekEğitimBlog

Yasal

Gizlilik PolitikasıKullanım KoşullarıGüvenlikKabul Edilebilir Kullanım PolitikasıKötüye Kullanımı Bildir

Sosyal

LinkedInTwitter
Koder.ai
Dil

© 2026 Koder.ai. Tüm hakları saklıdır.

Ana Sayfa›Blog›FastAPI Nedir? API Oluşturmak İçin Pratik Rehber
08 Eyl 2025·7 dk

FastAPI Nedir? API Oluşturmak İçin Pratik Rehber

FastAPI, tip ipuçları, doğrulama ve otomatik OpenAPI dokümantasyonu sayesinde API'leri hızlıca oluşturmanızı sağlayan modern bir Python çerçevesidir. Temel bilgileri ve kullanım alanlarını öğrenin.

FastAPI Nedir? API Oluşturmak İçin Pratik Rehber

FastAPI kısa ve öz: Basit tanım

FastAPI, Python ile web API'leri hızlıca oluşturmak için kullanılan bir çerçevedir; temiz kod ve otomatik dokümantasyon sağlar. Küçük fonksiyonlar ("endpoint" olarak adlandırılır) yazarak API'nizin hangi verileri kabul ettiğini ve ne döndürdüğünü belirtirsiniz, FastAPI ise yönlendirme, doğrulama ve JSON yanıt üretimi gibi web altyapısını halleder.

API nedir? Basit bir örnek

API, bir yazılım parçasının başka bir yazılımla konuşmasını sağlayan URL'ler dizisidir.

Örneğin, telefonunuzdaki bir hava durumu uygulaması GET /weather?city=Berlin gibi bir URL çağırabilir. Sunucu sıcaklık ve tahmin gibi yapılandırılmış verilerle (genellikle JSON) cevap verir. Telefon uygulamasının sunucunun veritabanına doğrudan erişmesi gerekmez—sadece API'ye sorar ve sonucu gösterir.

FastAPI, bu URL'leri ve yanıtları Python ile oluşturmanıza yardımcı olur.

FastAPI kime yönelik?

  • Yeni başlayanlar: çok fazla tekrar yazmadan modern ve yönlendirici bir yol arayanlar.
  • Tek geliştiriciler: hızlı ilerlemek isterken kodu okunabilir tutmak isteyenler.
  • Ekipler: güçlü doğrulama, tutarlı sözleşmeler ve harika dokümanlardan yararlanan üretim hizmetleri inşa edenler.

Başlamak için asenkron programlamada uzman olmanız gerekmez; basit endpointler yazıp zamanla daha gelişmiş desenleri benimseyebilirsiniz.

Bu rehberde neler öğreneceksiniz

  • FastAPI'yi diğer Python API seçeneklerinden farklı kılanlar
  • İsteklerin ve yanıtların nasıl çalıştığı (ve "async"in gerçekte ne anlama geldiği)
  • Pydantic ile veri doğrulamanın nasıl işlediği
  • FastAPI'nin OpenAPI dokümanlarını (Swagger UI ve ReDoc) nasıl oluşturduğu
  • Bağımlılıklar, güvenlik, testler ve dağıtımın temel yapılarıyla uygulama nasıl yapılandırılır

Neden FastAPI popüler oldu?

FastAPI, Python'da API oluştururken sık karşılaşılan sürtünmeyi azaltıyor.

Yaygın API sorunlarını ele alıyor

Geleneksel API projeleri genellikle uzun kurulumlar ve çok sayıda "altyapı" ile başlar:

  • İstek ayrıştırma, doğrulama ve hata mesajlarını elle yazmak ve senkronize tutmak
  • Belirsiz API sözleşmeleri—bu endpoint tam olarak ne kabul ediyor ve ne döndürüyor?
  • Kod büyüdükçe geride kalan dokümantasyon

FastAPI'nin temel özellikleri bu sorunları doğrudan hedefler, böylece ekipler endpoint tasarımına daha fazla zaman ayırır, framework teferruatıyla daha az uğraşır.

Tip ipuçları kodu bir sözleşme gibi yapar

FastAPI, Python tip ipuçlarına güçlü şekilde dayanır. Bir alanın int, opsiyonel veya bir liste gibi olduğunu belirttiğinizde, FastAPI bu bilgiyi girişleri doğrulamak ve çıktıları biçimlendirmek için kullanır.

Bu, kimlikleri bazen metin bazen sayı olarak ele alma gibi "string ağırlıklı" hataları azaltır ve fonksiyon imzalarına gömülü daha net beklentiler sağlar.

Otomatik dokümanlar ekip hızını artırır

API şeması koddan türetildiği için FastAPI, etkileşimli dokümantasyonu otomatik olarak oluşturabilir (OpenAPI + Swagger UI/ReDoc). Bu, frontend geliştiricilerinin, QA'nın ve entegratörlerin endpointleri keşfetmesi, istek denemesi ve modelleri görmesi için önemli bir kolaylıktır.

Popüler ama sihirli değil

FastAPI kötü tasarlanmış bir API'yi tek başına düzeltmez. Yine de iyi isimlendirme, versiyonlama, hata yönetimi ve güvenlik kararlarına ihtiyaç vardır. FastAPI size fikirden "iyi tanımlanmış API"ye daha az sürprizle ulaşma yolu sunar.

Bilmeniz gereken ana kavramlar

FastAPI, birkaç temel fikir üzerine kurulu olduğu için mantığı kavradığınızda sade hisseder. İç detayları ezberlemek zorunda değilsiniz—günlük kullanacağınız parçaları tanımanız yeterli.

FastAPI bir çerçevedir

Bir çerçeve sıfırdan başlamadan bir API oluşturmak için araçlar ve kurallar setidir. FastAPI, endpoint tanımlama, girdi okuma, çıktı döndürme, hata yönetimi ve kodu sürdürülebilir şekilde organize etme gibi ortak API görevleri için "altyapıyı" sağlar.

Yönlendirme: endpointler nasıl tanımlanır

Routing bir URL ile HTTP metodunu bir Python kod parçasına eşleme işlemidir.

Örneğin GET /users "kullanıcıları listele" fonksiyonuna; POST /users ise "kullanıcı oluştur" fonksiyonuna yönlendirilebilir. FastAPI'de genellikle @app.get(...) ve @app.post(...) gibi dekoratörlerle rotalar tanımlanır; bu, API'nizin ne sunduğunu bir bakışta görmeyi kolaylaştırır.

İstekler ve yanıtlar

Her API çağrısı bir istek (istemcinin gönderdiği) ve bir yanıt (sunucunun döndürdüğü) içerir.

FastAPI size yardımcı olur:

  • Yolu (/users/{id}), sorgu dizesini (?page=2), başlıkları ve istek gövdesini okumak
  • Doğru durum kodlarıyla (ör. 200, 201, 404) yapılandırılmış JSON yanıtları döndürmek

ASGI (yüksek seviyede)

FastAPI ASGI üzerinde çalışır; bu, Python web sunucuları için modern bir standarttır. Pratikte bu, FastAPI'nin çok sayıda bağlantıyı verimli şekilde ele alacak şekilde tasarlandığı ve uzun ömürlü bağlantılar (ör. WebSocket'ler) gibi özellikleri destekleyebileceği anlamına gelir—bunu düşük seviyeli ağ yönetimi yapmadan kullanabilirsiniz.

Tip ipuçları: sadece "güzel" değil

Python tip ipuçları (ör. str, int, list[Item]) FastAPI'de sadece dokümantasyon değildir—ana girdi olarak kullanılır. FastAPI bunları beklediğiniz veriyi anlamak, gelen değerleri doğru tiplere dönüştürmek ve daha belirgin, öngörülebilir API'ler oluşturmak için kullanır.

Doğrulama için Pydantic modelleri

Pydantic modelleri verinin şeklini (alanlar, tipler, opsiyonel değerler) tek bir yerde tanımlamanıza izin verir. FastAPI bu modelleri gelen JSON'u doğrulamak, hatalı girdileri yararlı hata mesajlarıyla reddetmek ve çıktıyı tutarlı şekilde serileştirmek için kullanır—böylece istemciler dağınık veri gönderse bile API güvenilir davranır.

FastAPI istekleri ve yanıtları nasıl ele alır

Önce endpointlerinizi tasarlayın
Planning Mode'u kullanarak yolları, modelleri ve uç durumları kod üretmeden önce haritalayın.
API'yi Planla

FastAPI uygulamaları endpoint'ler etrafında kurulur: bir URL yolu artı bir HTTP yöntemi. Endpoint'i istemcinin "ne istediği" ve "nasıl istediği" olarak düşünebilirsiniz. Örneğin, bir istemci kullanıcı listesini almak için GET /users isteği yapabilir veya bir kullanıcı oluşturmak için POST /users isteği gönderebilir.

Endpoint = yollar + yöntemler

Bir yol rotadır, yöntem ise eylemdir:

  • GET /products → veri al
  • POST /products → veri göndererek bir şey oluştur
  • PUT /products/123 → bir şeyi değiştir/yerine koy
  • DELETE /products/123 → bir şeyi sil

Yol parametreleri vs. sorgu parametreleri

FastAPI yolun bir parçası olan veriyi ve isteğe bağlı filtreleri ayırır.

  • Yol parametresi: URL yapısına dahil edilir.
    • Örnek: GET /users/42 → 42 kullanıcı ID'sidir.
  • Sorgu parametresi: ? sonrası eklenir, genellikle isteğe bağlıdır.
    • Örnek: GET /users?limit=10&active=true → limit ve active sonuçları kontrol eder.

JSON yükleri için istek gövdeleri

İstemci yapılandırılmış veri (çoğunlukla JSON) gönderdiğinde bu istek gövdesinde olur; genellikle POST veya PUT ile kullanılır.

Örnek: POST /orders ve gövde olarak { "item_id": 3, "quantity": 2 } gönderme.

Yanıt modelleri ve tutarlı çıktı

FastAPI düz Python objeleri (sözlükler gibi) döndürebilir, ancak en iyi halini bir yanıt modeli tanımladığınızda gösterir. Bu model bir sözleşme gibi davranır: alanlar tutarlı biçimde şekillenir, fazladan veri filtrelenebilir ve tipler zorlanır. Sonuç, istemcilerin ne bekleyeceğini bildiği daha temiz API'lerdir.

FastAPI'de Async: Nedir ve Ne Zaman Yardımcı Olur

"Async" (eşanlı olmayan) bekleme süresi fazla olan durumlarda API'nizin istekleri verimli şekilde ele almasını sağlayan bir yaklaşımdır.

Günlük bir benzetme: I/O beklemek

Bir barista müşterileri aldığını düşünün. Espresso makinesi çalışırken yerinde bekleyip hiçbir şey yapmasalardı, daha az müşteri servis edilir. Daha iyi bir yaklaşım: kahveyi başlat, sonra makine çalışırken diğer siparişi al. Async tam olarak bunun gibi çalışır. FastAPI uygulamanız, ağ isteği veya veritabanı sorgusu gibi yavaş bir işlem başlattığında beklerken diğer gelen istekleri işleyebilir.

Async en çok ne zaman yardımcı olur

Async, çok fazla I/O yapan (beklemeye dayalı) işlemlerde etkilidir. Yaygın örnekler:

  • Veritabanı çağrıları (özellikle ağ üzerinden)
  • Harici servis çağrıları (ödeme sağlayıcıları, harita servisleri, e-posta API'leri)
  • Dosya okuma/yazma veya nesne depolamayla konuşma

Bu operasyonlar sıkça bekleme içeriyorsa, async iş hacmini artırabilir ve yoğunluk altında isteklerin kuyrukta birikmesini azaltabilir.

Async'in her şeyi hızlandırmadığı durumlar

Async her şeyi hızlandıran bir sihirli düğme değildir. Endpointiniz çoğunlukla CPU-ağırlıklıysa—örneğin büyük resim boyutlandırma, veri bilimi hesaplamaları veya büyük yükleri şifreleme—async hesaplamayı daha hızlı yapmaz. Bu durumlarda arka plan işçileri, işlem havuzları veya yatay ölçekleme gibi farklı taktikler gerekir.

İyi haber: Senkron kod hâlâ çalışır

FastAPI'yi kullanmak için her şeyi yeniden yazmanız gerekmez. Normal (senkron) route fonksiyonları yazabilirsiniz ve FastAPI bunları sorunsuz çalıştırır. Birçok proje her iki stili karıştırır: basit endpointleri senkron tutar ve veritabanı çağrıları veya dış HTTP isteklerinde async def kullanılır.

Pydantic ile Veri Doğrulama ve Serileştirme

Doğrulama, dış dünya ile kodunuz arasındaki kontrol noktasıdır. Bir API giriş kabul ettiğinde (JSON gövdesi, sorgu parametreleri, yol parametreleri) verinin eksiksiz, doğru tipte ve makul sınırlar içinde olduğundan emin olmak istersiniz—bunu yapmadan önce veritabanına yazma, başka servisi çağırma veya iş mantığını tetikleme istemezsiniz.

FastAPI bu iş için Pydantic modellerine dayanır. "İyi veri"nin nasıl görünmesi gerektiğini bir kez tanımlarsınız ve FastAPI otomatik olarak:

  • hatalı girdileri erken reddeder
  • tipleri mümkünse dönüştürür (örneğin "42"yi tamsayıya çevirir)
  • tutarlı JSON yanıtları (serileştirme) döndürür

Hatalı girdiyi erken yakalamak (ve anlaşılır hatalar)

Eğer bir istemci yanlış biçimde veri gönderirse, FastAPI 422 Unprocessable Entity ile ve hangi alanın neden hatalı olduğunu belirten yapılandırılmış bir hata yükü ile cevap verir. Bu, istemci geliştiricilerinin istekleri hızla düzeltmesini sağlar.

Yaygın doğrulama örnekleri

Burada gerekli alanları, tipleri, min/max kısıtlarını ve formatları gösteren küçük bir model var:

from pydantic import BaseModel, EmailStr, Field

class UserCreate(BaseModel):
    email: EmailStr
    age: int = Field(ge=13, le=120)
    username: str = Field(min_length=3, max_length=20)
  • Gerekli alanlar: email olmalıdır.
  • Tipler: age bir tamsayı olmalıdır.
  • Min/max: age 13–120 ile sınırlandırılmıştır.
  • Formatlar: EmailStr geçerli bir e-posta biçimini zorunlu kılar.

Serileştirme: temiz, öngörülebilir JSON döndürme

Aynı modeller çıktıyı şekillendirmek için de kullanılabilir, böylece API yanıtlarınız istemciye dahili alanları kazara sızdırmaz. Python objelerini döndürürsünüz; FastAPI (Pydantic aracılığıyla) bunları doğru alan adları ve tiplerle JSON'a çevirir.

Otomatik API Dokümanları: OpenAPI, Swagger UI, ReDoc

Sohbetten bir API oluşturun
API fikrinizi sohbetle anlatarak çalışan bir sunucu uygulamasına dönüştürün.
Ücretsiz Deneyin

FastAPI'nin en pratik özelliklerinden biri, zaten yazdığınız koda dayalı olarak API dokümantasyonunu otomatik oluşturmasıdır.

OpenAPI: makine tarafından okunabilir bir API sözleşmesi

OpenAPI, bir API'yi yapılandırılmış formatta (genellikle JSON) tanımlamanın standart yoludur. Şöyle bir "sözleşme" gibidir:

  • hangi endpointlerin olduğu (ör. GET /users/{id})
  • hangi parametreleri kabul ettikleri
  • istek gövdesinin nasıl görünmesi gerektiği
  • beklenen yanıtlar ve hata formatları

Makine tarafından okunabilir olduğu için araçlar bunu test istemcileri üretmek, istekleri doğrulamak ve ekipleri hizalamak için kullanabilir.

Swagger UI ve ReDoc: kutudan çıktığı gibi etkileşimli dokümanlar

FastAPI iki insan dostu doküman sayfasını otomatik olarak sunar:

  • Swagger UI (etkileşimli): tarayıcıdan doğrudan endpointleri deneyin, parametreleri doldurun, istek gönderin ve yanıtları görün.
  • ReDoc (okunabilir): temiz, referans tarzı bir doküman sayfası.

Tipik bir FastAPI projesinde bunları bulabilirsiniz:

  • /docs (Swagger UI)
  • /redoc (ReDoc)

Kodla senkron kalan dokümanlar

Yol parametrelerinizi, istek modellerinizi, yanıt modellerinizi veya doğrulama kurallarınızı değiştirdiğinizde OpenAPI şeması (ve doküman sayfaları) otomatik güncellenir. Ayrı bir "doküman bakımı" adımına gerek kalmaz.

Bu durum neden frontend ve QA işini hızlandırır

  • Frontend geliştiricileri endpointleri hemen keşfedebilir ve gerekli alanları beklemeden görebilir.
  • QA kenar durumları (eksik alanlar, yanlış tipler) hızla test edebilir ve tam hata yanıtlarını görebilir.
  • Herkesin ortak gerçek kaynak noktası: çalışan API ve onun OpenAPI sözleşmesi.

İlk FastAPI Uygulamanız (Kavramsal Adım Adım)

Bir FastAPI uygulaması küçük olabilir ve yine de "gerçek" hissi verir. Bir Python nesnesi olan appi tanımlarsınız, birkaç rota eklersiniz ve yerel sunucuda çalıştırıp tarayıcıda denersiniz.

1) Minimal "merhaba" endpointi

En küçük kullanışlı örnek şöyle:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI"}

Hepsi bu: bir rota (GET /) JSON döndürüyor.

2) Basit oluştur/oku item endpointleri (hafızada)

Daha API gibi hissettirmek için öğeleri bir listede saklayalım. Bu bir veritabanı değil—sunucu yeniden başlatıldığında veriler sıfırlanır—ama öğrenmek için ideal.

from fastapi import FastAPI

app = FastAPI()
items = []

@app.post("/items")
def create_item(name: str):
    item = {"id": len(items) + 1, "name": name}
    items.append(item)
    return item

@app.get("/items")
def list_items():
    return items

Şimdi şunları yapabilirsiniz:

  • POST /items?name=Coffee ile bir öğe ekleyin
  • GET /items ile listeyi alın

3) Tipik küçük proje düzeni

Yaygın başlangıç yapısı:

  • main.py (appi ve rotaları oluşturur)
  • requirements.txt veya pyproject.toml (bağımlılıklar)

4) Lokal çalıştırma (kavramsal)

Genellikle:

  1. Bağımlılıkları yükleyin (FastAPI + bir ASGI sunucusu gibi Uvicorn)
  2. Geliştirme sunucusunu başlatın (örneğin: uvicorn main:app --reload)
  3. http://127.0.0.1:8000 adresini açıp endpointleri deneyin

Bağımlılıklar ve Yeniden Kullanılabilir Yapı Taşları

FastAPI "bağımlılıklar"ı, endpointlerin işini yapması için gereken ortak girdilerdir—ör. veritabanı oturumu, oturum açmış kullanıcı, uygulama ayarları veya ortak sorgu parametreleri. Bunları her route'ta elle oluşturmak ve ayrıştırmak yerine bir kez tanımlar ve FastAPI'nin ihtiyaç duyulan yere sağlamasını sağlarsınız.

Bağımlılık nedir (basitçe)

Bir bağımlılık genellikle bir değer döndüren fonksiyon (veya sınıf)tır. FastAPI onu çağırır, hangi parametrelere ihtiyaç duyduğunu anlar ve sonucunu path operation fonksiyonunuza enjekte eder.

Buna bağımlılık enjeksiyonu denir, ancak şöyle düşünebilirsiniz: "İhtiyacınızı belirtin, FastAPI onu bağlar."

Neden tekrarları azaltır

Bağımlılıklar olmadan her endpointte şunları yapıyor olabilirsiniz:

  • Her endpointte veritabanı bağlantısı açıp kapatmak
  • Tüm yerlerde kimlik doğrulama kontrollerini tekrarlamak
  • Aynı sayfalandırma parametrelerini birçok rotada yeniden parse etmek

Bağımlılıklar ile bu mantığı merkezileştirirsiniz. Daha sonra veritabanı oturumu oluşturma veya geçerli kullanıcıyı yükleme değiştiğinde birden fazla endpointi değil, tek bir yeri güncellersiniz.

Yaygın bağımlılık örnekleri

  • Veritabanı oturumu: her istek için güvenilir şekilde bir oturum oluşturup kapatma
  • Ayarlar/konfigürasyon: ortam tabanlı ayarları merkezi sağlama
  • Sayfalandırma: page/limit ayrıştırma ve doğrulamasını yeniden kullanma
  • Auth user: token'dan geçerli kullanıcıyı alma ve izinleri uygulama

Bağımlılıklar endpointlere nasıl takılır

Birçok FastAPI uygulamasında göreceğiniz kavramsal desen şöyle:

from fastapi import Depends, FastAPI

app = FastAPI()

def get_settings():
    return {"items_per_page": 20}

@app.get("/items")
def list_items(settings=Depends(get_settings)):
    return {"limit": settings["items_per_page"]}

Depends(...) ile bağımlılığı bildirirsiniz ve FastAPI sonucunu endpoint parametrenize geçirir. Aynı yaklaşım daha karmaşık yapı taşları için de (ör. get_db() veya get_current_user()) çalışır; API büyüdükçe kodunuzu temiz tutar.

Güvenlik Temelleri: Kimlik Doğrulama ve Yetkilendirme

FastAPI API'nizi otomatik olarak güvence altına almaz—şemayı seçip endpoint'lere bağlamanız gerekir. İyi haber: FastAPI, bağımlılık sistemi aracılığıyla yaygın güvenlik desenlerini uygulamayı kolaylaştıran yapı taşları sağlar.

Kimlik doğrulama vs yetkilendirme

Kimlik doğrulama cevaplar: "Sen kimsin?" Yetkilendirme cevaplar: "Ne yapmana izin var?"

Örnek: bir kullanıcı doğrulanmış (geçerli token) olabilir fakat admin-only route'a erişme yetkisi olmayabilir.

Yaygın kimlik doğrulama yaklaşımları (yüksek seviyede)

  • API anahtarları: hizmetler arası erişim için basit. Genellikle bir header ile gönderilir (örn. X-API-Key). Rotasyon ve iptal politikasını yönetin.
  • OAuth2: yetkilendirilmiş erişim için standart; "... ile giriş yap" gibi durumlar veya kimlik doğrulamanın API'den ayrılması için yaygın.
  • JWT (JSON Web Token): genellikle bearer token olarak kullanılır. Durumsuz API'lar için uygun, ancak süresi, imzalama anahtarları ve iptal stratejisi ele alınmalıdır.

FastAPI bu desenleri fastapi.security gibi yardımcılarla destekler ve OpenAPI içinde temizce dokümante eder.

Parola saklama temelleri

Kullanıcı parolası saklıyorsanız, asla düz metin saklamayın. Tuzlu, yavaş bir hash kullanın (örn. bcrypt/argon2). Ayrıca hız sınırlama ve hesap kilitleme politikalarını düşünün.

Dikkatli bir not

Güvenlik detaylarla ilgilidir: token depolama, CORS ayarları, HTTPS, gizli anahtar yönetimi ve her hassas endpointte doğru yetkilendirme kontrolleri. Dahili yardımcıları bir başlangıç noktası olarak kabul edin ve üretime geçmeden önce yaklaşımınızı incelemeler ve testlerle doğrulayın.

FastAPI Uygulamalarını Test Etme

Üretim hissi verin
API'niz gerçek bir kitle için hazır olduğunda özel bir alan adı ekleyin.
Alan Adı Ayarla

Test etmek, FastAPI'nin "makinemde çalışıyor" sözünü gerçekten güvenilir hale getirir. İyi haber: FastAPI Starlette üzerine kurulu olduğu için güçlü test araçlarını az ayar ile kullanabilirsiniz.

Birim testleri vs entegrasyon testleri

Birim testleri küçük parçaları hedefler: bir değer hesaplayan fonksiyon, geçerli kullanıcıyı yükleyen bağımlılık veya veritabanıyla konuşan bir servis metodu (genellikle mocklanır).

Entegrasyon testleri API'yi uçtan uca çalıştırır: bir endpointi çağırır ve tam HTTP yanıtını doğrular. Bu testler yönlendirme hatalarını, bağımlılık zinciri sorunlarını ve doğrulama problemlerini yakalar.

Sağlıklı bir test paketi genellikle daha fazla birim testi (hızlı) ve daha az sayıda entegrasyon testi (daha yüksek güven) içerir.

TestClient fikri

FastAPI uygulamaları Starlette'in TestClient'i kullanılarak "istemci gibi" test edilebilir; bu, uygulamanıza işlem içinde istek gönderir—sunucu gerekmez.

from fastapi.testclient import TestClient
from app.main import app

client = TestClient(app)

def test_healthcheck():
    r = client.get("/health")
    assert r.status_code == 200

Ne test edilmeli (pratik kontrol listesi)

Kullanıcıların ve diğer sistemlerin güvendiği şeyleri test edin:

  • Durum kodları (200 vs 201 vs 404 vs 422)
  • Doğrulama hataları (eksik alanlar, yanlış tipler, fazladan alanlar)
  • Yanıt yapısı (anahtarlar mevcut, tipler doğru, boş listeler doğru ele alınıyor)
  • Kenar durumları (sıfır sonuç, büyük girdiler, sınır tarihleri)
  • Auth durumları (token yok, token süresi dolmuş, yetersiz rol)

Testleri hızlı ve tekrarlanabilir tutun

Tahmin edilebilir veriler kullanın, dış servisleri izole edin (mock veya test DB kullanın) ve testler arasında paylaşılan durumdan kaçının. Hızlı testler çalıştırılır; yavaş olanlar genelde atlanır.

FastAPI Dağıtımı: Pratik Seçenekler ve Kontrol Listesi

FastAPI uygulamasını canlıya almak çoğunlukla doğru "çalıştırıcı"yı seçmek ve birkaç üretim gerekliliğini eklemekle ilgilidir.

Geliştirme vs üretim sunucuları

uvicorn main:app --reload ile çalıştırırken geliştirme ayarlarını kullanırsınız: otomatik yeniden yükleme, ayrıntılı hatalar ve kullanım kolaylığını önceliklendiren ayarlar.

Üretimde genellikle Uvicorn reload kapalı çalıştırılır; sıklıkla bir süreç yöneticisi (ör. Gunicorn ile Uvicorn worker'ları) veya ters proxy arkasına alınır. Amaç istikrardır: kontrollü yeniden başlatmalar, öngörülebilir performans ve daha güvenli varsayılanlar.

Ortam değişkenleri ile yapılandırma

Yaygın bir desen:

  • Gizli anahtarlar ve ortam-spesifik değerleri (veritabanı URL'si, API anahtarları, izin verilen originler) ortam değişkenlerinde saklayın.
  • Lokal kullanım için kod içinde makul varsayılanlar tutun.
  • Başlangıçta ayarları yükleyip doğrulayın (çoğunlukla Pydantic settings ile).

Bu, tek bir kod tabanının farklı ortamlara düzenleme yapmadan dağıtılmasını sağlar.

Yaygın dağıtım hedefleri (kısa özet)

  • Konteynerler (Docker/Kubernetes): tekrar edilebilir derlemeler ve ölçekleme için popüler.
  • Sanal makineler: basit ve esnek; kendi sunucularınızı yönetiyorsanız iyi.
  • Serverless: küçük API'ler için çalışır; soğuk başlatma ve platform limitlerini göz önünde bulundurun.

Pratik dağıtım kontrol listesi

"Tamam" demeden önce şunların olduğundan emin olun:

  • Günlükleme: yapılandırılmış loglar, istek ID'leri (gerekirse) ve ortam başına log seviyeleri.
  • Sağlık kontrolleri: uptime izleme ve yük dengeleyiciler için /health gibi endpointler.
  • Hata yönetimi: tutarlı JSON hata yanıtları; kullanıcılara stack trace göstermeyin.
  • Zaman aşımılar ve limitler: istek gövdesi boyutu, worker zaman aşımıları ve gerektiğinde hız sınırlama.
  • Dokümantasyon politikası: Swagger UI/ReDoc'u herkese açık mı tutacağınıza yoksa kısıtlayacağınıza karar verin.

Yerelden üretime geçerken API sözleşmenizi standartlaştırmak yardımcı olur. Bazı ekipler FastAPI'nin OpenAPI çıktısını otomatik iş akışlarına bağlar—ör. istemciler üretmek, CI'de istekleri doğrulamak ve tutarlı dağıtım. Araçlar arasında Koder.ai gibi platformlar bu aşamaya uyum sağlayabilir: sohbet üzerinden oluşturduğunuz API'yi tanımlayıp hızlıca endpoint ve modeller üretebilir, ardından çıktıyı normal inceleme/dağıtım hattına aktarabilirsiniz.

FastAPI Ne Zaman Kullanılmalı (ve Ne Zaman Kullanılmamalı)

FastAPI, Python'da temiz, modern bir şekilde REST API'leri oluşturmak istediğinizde güçlü bir seçenektir—özellikle istek/yanıt modellerinin açık ve API büyüdükçe öngörülebilir davranışın önemli olduğu durumlarda.

Parlak kullanım alanları

FastAPI genellikle şu durumlarda çok iyi işler:

  • İç servisler: ekiplerin hızlı iterasyon, okunabilir endpointler ve hizmetler arası paylaşılan sözleşmeler istediği durumlar.
  • Halka açık API'ler: sıkı giriş doğrulaması ve tutarlı hata yönetiminden yararlanan servisler.
  • Mikroservisler: küçük, odaklı API'lerin bağımsız dağıtıldığı mimariler.
  • Prototipler ve MVP'ler: hızlı ilerlemek ama yapıdan vazgeçmemek istediğiniz durumlar (doğrulama + dokümantasyon).

Başka bir aracın daha uygun olduğu durumlar

FastAPI her zaman en basit cevap değildir:

  • Tek seferlik bir betik veya çok küçük bir webhook işleyici yazıyorsanız, daha hafif bir yaklaşım veya hatta saf Python yeterli olabilir.
  • Projeniz tam bir Django “batteries included” istiyorsa (ORM, admin, şablonlama, olgun ekosistem desenleri), Django veya Django REST Framework bazı kararlılık ve entegre özellikleri sağlayarak karar verme yükünü azaltabilir.

Performans hakkında gerçekçi bir not

FastAPI pratikte çok hızlı olabilir, ancak hız veritabanı çağrılarınız, ağ gecikmeleri ve iş mantığınızın verimliliğine bağlıdır. Tipik API iş yüklerinde iyi throughput ve düşük gecikme bekleyebilirsiniz—ancak çerçeve tek başına yavaş I/O veya verimsiz sorguları "düzeltmez".

Sonraki adımlar

FastAPI uygun görünüyorsa, bir sonraki odak noktalarınız route desenleri, Pydantic modelleri, veritabanı entegrasyonu, arka plan görevleri ve temel kimlik doğrulama olmalıdır.

Pratik bir yol, küçük bir endpoint seti oluşturmak, sonra yeniden kullanılabilir bağımlılıklar ve testlerle genişletmektir. Erken aşamada (rota, model ve ilk dağıtıma hazır yapıyı) hızlandırmak için sohbet tabanlı bir taslak akışı kullanmak işinizi kolaylaştırabilir—örneğin endpointleri planlayıp tek bir şemadan iterasyon yapmak. Bu alanda Koder.ai yardımcı olabilir: sohbetten prototip oluşturup üretilmiş kodu standart bir inceleme/dağıtım hattına aktarabilirsiniz.

SSS

Basitçe FastAPI nedir?

FastAPI, minimal tekrar gerektiren bir Python web çerçevesidir. Endpoint fonksiyonları (ör. @app.get("/users")) yazarsınız ve FastAPI yönlendirme, istek ayrıştırma, doğrulama ve JSON yanıtları ile ilgilenir.

Önemli bir avantaj, tip ipuçlarınızın ve Pydantic modellerinizin API'nin kabul ettiği ve döndürdüğü şeyler için açık bir sözleşme görevi görmesidir.

API nedir ve FastAPI bunun neresinde durur?

API, başka yazılımların veri alışverişi yapması için çağırabileceği bir dizi URL'dir.

Örneğin, bir istemci GET /weather?city=Berlin isteğiyle hava durumunu isteyebilir ve sunucu yapılandırılmış JSON ile cevap verir. İstemcinin veritabanına doğrudan erişmesi gerekmez—sadece API'yi kullanır.

FastAPI'de yönler (routes) ve HTTP yöntemleri nasıl çalışır?

Yönlendirme, bir HTTP yöntemi + yolu bir Python fonksiyonuna eşler.

FastAPI'de genellikle dekoratörler kullanırsınız:

  • @app.get("/items") okuma işlemleri için
  • @app.post("/items") oluşturma işlemleri için
  • @app.put("/items/{id}") güncelleme/yerine koyma için
Yol parametreleri ile sorgu parametreleri arasındaki fark nedir?

Yol (path) parametreleri URL yapısının bir parçasıdır ve genellikle belirli bir kaynağı tanımlar (zorunludur).

  • Yol: GET /users/42 → 42 bir yol parametresidir

Sorgu (query) parametreleri ? işaretinden sonra eklenir ve genellikle isteği filtrelemek veya kontrol etmek için isteğe bağlı kullanılır.

FastAPI Pydantic ile veriyi nasıl doğrular?

Pydantic modelleri, verinin şeklini ve kurallarını (tipler, zorunlu alanlar, kısıtlar) tanımlar. FastAPI bunları kullanarak:

  • Gelen istekleri doğrular
  • Mümkünse tipleri dönüştürür (ör. "42"yi tamsayıya çevirir)
  • Tutarlı, iyi biçimlendirilmiş JSON yanıtlar döndürür

Doğrulama başarısız olursa FastAPI genellikle 422 Unprocessable Entity döner ve hangi alanın neden hatalı olduğunu gösterir.

FastAPI otomatik API dokümantasyonunu nasıl oluşturur?

FastAPI, endpoint'lerinizden, tip ipuçlarından ve modellerinizden otomatik olarak bir OpenAPI şeması üretir.

Genellikle ücretsiz olarak interaktif dokümanlar elde edersiniz:

  • Swagger UI /docs altında
  • ReDoc /redoc altında

Şema koddan türetildiği için dokümanlar, parametreleri ve modelleri değiştirdiğinizde otomatik olarak güncellenir.

Ne zaman FastAPI'de async endpoint kullanmalıyım?

İstek beklerken geçen sürelerin yoğun olduğu durumlarda async def kullanın (veritabanı çağrıları, dış HTTP istekleri, dosya/nesne depolama erişimi gibi).

Aynı zamanda şunlar için def (senkron) kullanın:

  • Kod basit ve senkron ise
  • Kullandığınız kütüphaneler async desteklemiyorsa
  • İşlem ağırlıklı (CPU-bound) işler varsa (async hesaplamayı hızlandırmaz)

Aynı uygulama içinde senkron ve asenkron endpointleri karıştırmak yaygındır.

FastAPI bağımlılıkları (dependencies) nedir ve neden kullanışlıdır?

Bağımlılıklar (dependencies), FastAPI'nin endpointlere Depends() ile enjekte ettiği yeniden kullanılabilir "yapı taşları"dır.

Yaygın kullanım alanları:

  • Her istek için veritabanı oturumu
  • Kimlik doğrulama: geçerli kullanıcıyı yükleme ve izinleri uygulama
  • Ortak sorgu ayrıştırma (sayfalandırma, filtreler)
  • Uygulama ayarları/konfigürasyonu

Bu, tekrarları azaltır ve çapraz kesen mantığı tek bir yerde merkezileştirir.

FastAPI ile API geliştirirken bilmem gereken güvenlik temelleri nelerdir?

FastAPI API'nizi otomatik olarak güvenli hale getirmez—bir yaklaşım seçip endpoint'lere uygulamanız gerekir.

Yaygın desenler:

  • API anahtarları (genellikle header ile gönderilir)
  • OAuth2 akışları
  • Bearer tokenlar (genellikle JWT)

Ayrıca temel güvenlik uygulamaları şunlardır:

FastAPI uygulamasını pratikte nasıl test eder ve dağıtıma hazırlarım?

Test için FastAPI/Starlette'in TestClient'ini kullanarak uygulamanızı işlem içinde çağırabilirsiniz (sunucu gerektirmez).

Pratik olarak kontrol etmeniz gerekenler:

  • Durum kodları (200/201/404/422)
  • Doğrulama davranışı (eksik alanlar, yanlış tipler)
  • Yanıt yapısı (alanların varlığı, doğru tipler)
  • Kimlik doğrulama senaryoları (token yok, token süresi dolmuş, yetersiz rol)

Dağıtım için genellikle bir ASGI sunucusu (ör. Uvicorn) çalıştırılır; üretimde ek olarak günlükleme, sağlık kontrolleri ( gibi), zaman aşımı ayarları ve çevreye göre yapılandırma eklemelisiniz.

İçindekiler
FastAPI kısa ve öz: Basit tanımAPI nedir? Basit bir örnekFastAPI kime yönelik?Bu rehberde neler öğreneceksinizNeden FastAPI popüler oldu?Bilmeniz gereken ana kavramlarFastAPI istekleri ve yanıtları nasıl ele alırFastAPI'de Async: Nedir ve Ne Zaman Yardımcı OlurPydantic ile Veri Doğrulama ve SerileştirmeOtomatik API Dokümanları: OpenAPI, Swagger UI, ReDocİlk FastAPI Uygulamanız (Kavramsal Adım Adım)Bağımlılıklar ve Yeniden Kullanılabilir Yapı TaşlarıGüvenlik Temelleri: Kimlik Doğrulama ve YetkilendirmeFastAPI Uygulamalarını Test EtmeFastAPI Dağıtımı: Pratik Seçenekler ve Kontrol ListesiFastAPI Ne Zaman Kullanılmalı (ve Ne Zaman Kullanılmamalı)SSS
Paylaş
Koder.ai
Build your own app with Koder today!

The best way to understand the power of Koder is to see it for yourself.

Start FreeBook a Demo
  • @app.delete("/items/{id}") silme için
  • Bu, API yüzeyinizi koddan doğrudan taramayı kolaylaştırır.

  • Sorgu: GET /users?limit=10&active=true → limit, active sorgu parametreleridir
  • Parolaları düz metin olarak saklamayın; tuzlu, yavaş bir hash kullanın (örn. bcrypt/argon2)
  • Kimlik doğrulama (kimsiniz) ile yetkilendirmeyi (ne yapmaya izinli) ayırın
  • HTTPS kullanın ve tarayıcı istemcileri için CORS ayarlarını gözden geçirin
  • /health