Ana içeriğe atla

FastAPI Eğitimi: FastAPI Kullanımına Giriş

FastAPI çatısını keşfedin ve Python’da API oluşturmak için nasıl kullanabileceğinizi öğrenin
Güncel 16 Nis 2026  · 13 dk. oku

API’ler (Uygulama Programlama Arayüzleri), uygulamaların modüler ve gevşek bağlı olmasını sağladıkları için modern mimarinin bel kemiğidir. Bu da uygulamaları hızlı ve kolay bir şekilde geliştirmenize, bakımını yapmanıza ve güncellemenize imkân tanır. 

API’ler, farklı uygulamaların veri paylaşmasına ve birlikte çalışmasına olanak vererek zaman ve emek tasarrufu sağladığı için makine öğreniminde de büyük önem taşır. Python’da API geliştirmek için birçok farklı çatı vardır. Python’da API oluşturmaya yönelik en popüler çatılar arasında Django, Flask ve FastAPI bulunur. Bu eğitim, FastAPI adlı çatılardan birine derinlemesine bir bakış sunar.

Bu konuya daha derinlemesine dalmak isterseniz şu kursu öneririm: Deploying AI Into Production With FastAPI.

API nedir?

API, Uygulama Programlama Arayüzü anlamına gelir. API, iki uygulamanın birbiriyle konuşmasını sağlayan bir yazılım aracısıdır. Telefonunuzdaki bir uygulamayı kullandığınızda, uygulama internete bağlanır ve bir sunucuya veri gönderir. Sunucu veriyi işler ve tekrar telefonunuza gönderir. Telefonunuzdaki uygulama da veriyi yorumlayıp size okunabilir bir şekilde sunar. 

API, bir restorandaki garsona benzer. Garson siparişinizi alır ve mutfağa iletir. Mutfak yemeği hazırlar ve garsona verir. Garson da yemeği size getirir. 

Aynı şekilde API, bir uygulamadan gelen isteği alır ve sunucuya iletir. Sunucu isteği işler ve veriyi uygulamaya geri gönderir. Uygulama veriyi yorumlar ve kullanıcıya sunar.

Basit bir API mimarisi tasarımı

Görsel Kaynağı: https://www.techfunnel.com/wp-content/uploads/2021/07/api.png

Makine öğrenimi işlem hatları, API’ler ve MLOps hakkında daha fazla bilgi edinmek istiyorsanız Makine Öğrenimi, İşlem Hatları, Dağıtım ve MLOps Eğitimimize göz atabilirsiniz.

FastAPI nedir

FastAPI, standart Python tür ipuçlarına dayanan ve Python 3.7+ ile API’ler oluşturmak için yüksek performanslı bir web çatısıdır. Geliştiricilere uygulamaları hızlı ve verimli biçimde inşa etmede yardımcı olur. FastAPI, Starlette web sunucusu üzerine kuruludur ve otomatik veri doğrulama, hata yönetimi ve etkileşimli API dokümantasyonu gibi web uygulamaları geliştirmeyi kolaylaştıran özellikler içerir. 

Bu bölümde bu özelliklerin her birine ayrı ayrı bakacağız. Önce, FastAPI’nin orijinal dokümantasyonunda vurgulanan temel özelliklere göz atalım.

  • Performans: NodeJS ve Go diliyle aynı seviyede.
  • Hız: Geliştirme hızını 2-3 kat artırır.
  • Kolay: Üstün editör desteği. Her yerde otomatik tamamlama. Öğrenmesi ve kullanması kolay.
  • Sağlam: Otomatik etkileşimli dokümantasyonla üretime hazır kod.
  • OpenAPI tabanlı: OpenAPI ve JSON Schema ile tamamen uyumlu.

FastAPI’nin kurulumu

FastAPI, Python 3.7+ gerektirir ve pip ile kurulabilir. FastAPI’yi ve ASGI sunucusu `uvicorn`’u kurmanız gerekir.

``

# install fastapi

pip install fastapi




# install uvicorn
pip install uvicorn

``

Basit bir API oluşturma

Hadi doğrudan çok basit bir örnek API oluşturarak başlayalım. Bunu uygulamak için VS Code kullanıyorum, ancak dilediğiniz editörü kullanabilirsiniz.

```

from typing import Union

from fastapi import FastAPI




app = FastAPI()




@app.get("")

def read_root():

    return {"Hello": "World"}




@app.get("/items/{item_id}")

def read_item(item_id: int, q: Union[str, None] = None):

    return {"item_id": item_id, "q": q}

```

(Örnek orijinal dokümantasyondan uyarlanmıştır). @tiangolo’ya teşekkürler.

Şimdi bir komut satırı terminali kullanarak bu API’yi aşağıdaki komutla çalıştırın:

```

uvicorn main:app –reload

```

`main`, Python dosyasının adı; `app` ise FastAPI sınıfını tutan değişkendir. İstediğiniz isimleri verebilirsiniz. Yukarıdaki komutu çalıştırdığınızda terminalinizde buna benzer bir çıktı göreceksiniz:

Komut Terminali

Tarayıcınızda bağlantıya gidin; `Hello World` yazan bir sayfa görüyorsanız API çalışıyor demektir.

API tarayıcıda localhost üzerinde çalışıyor

Görsel: Yazar

İlk API’nizi oluşturduğunuz için tebrikler. 

Etkileşimli API Dokümanları

FastAPI, API’lerinizin tümü için OpenAPI standardını kullanarak bir "şema" üretir. "Şema", bir şeyin tanımı ya da betimlemesidir. Onu uygulayan kod değil, soyut bir tanımdır. OpenAPI şeması, FastAPI ile gelen iki etkileşimli dokümantasyon sistemini besler.

Dokümantasyonu görmek için URL’ye yalnızca `/docs` ekleyin (`http://127.0.0.1:8000/docs`). Bu bağlantı otomatik etkileşimli API dokümantasyonunu gösterecektir.

FastAPI tarafından oluşturulan otomatik dokümantasyon

Görsel: Yazar

API’yi test etmek için sağ üst köşedeki `Try it out` düğmesine tıklayın.

FastAPI tarafından oluşturulan otomatik dokümantasyon 2

Görsel: Yazar

Yanıt gövdesinin bir sözlük olduğunu görebilirsiniz. Bu, `main.py` içinde tanımlanan `read_item` fonksiyonunun döndürdüğü değerdir. Ayrıca istek URL’si olan `http://127.0.0.1:8000/items/1?q=orange` adresini de görüyorsunuz. `1` ve `orange` API’ye verdiğimiz girdilerdi.

FastAPI’de alternatif bir etkileşimli otomatik dokümantasyon daha vardır. Bunu görmek için http://127.0.0.1:8000/redoc` adresine gidin. Görünümü şöyledir:

FastAPI tarafından oluşturulan otomatik dokümantasyon 3

Görsel: Yazar

Daha gelişmiş örnekler

Bir API geliştirirken, "yol" isteğin rotasını veya uç noktasını tanımlar. Ancak burada vermemiz gereken bir karar daha vardır: “İşlem.” Buradaki `operation` sözcüğü HTTP "yöntemlerinden" birine karşılık gelir. Bu "yöntemlerden" birini (veya birkaçını) kullanarak, HTTP protokolünün desteklediği çeşitli yollardan her biriyle iletişim kurabilirsiniz. Genellikle şu yöntemleri kullanırsınız:

  • POST: veri oluşturmak için.
  • GET: veri okumak için.
  • PUT: veriyi güncellemek için.
  • DELETE: veriyi silmek için.
  • Ve birkaç gelişmiş yöntem daha 

FastAPI tüm http yöntemlerini destekler. 

FastAPI’nin Python tür ipuçları üzerine kurulu olması da bu çatının bir başka önemli yönüdür. Tür ipuçları Python 3.6 ve sonrasında desteklenir. Tür ipuçları, bir değişkenin türünü bildirmenizi sağlayan özel bir sözdizimidir. 

Değişkenleriniz için türleri bildirmeniz, editörler ve diğer araçların size daha iyi yardım sağlamasını mümkün kılar. Gelişmiş bir örneğe bakalım.

`main.py` dosyamızı, farklı veri tiplerinde birden fazla girdi alacak yeni bir `PUT` isteğini içerecek şekilde değiştireceğiz. 

```

from typing import Union




from fastapi import FastAPI

from pydantic import BaseModel




app = FastAPI()




class Item(BaseModel):

    name: str

    price: float

    is_offer: Union[bool, None] = None




@app.get("")

def read_root():

    return {"Hello": "World"}




@app.get("/items/{item_id}")

def read_item(item_id: int, q: Union[str, None] = None):

    return {"item_id": item_id, "q": q}




@app.put("/items/{item_id}")

def update_item(item_id: int, item: Item):

    return {"item_name": item.name, "item_id": item_id}

```

(Örnek orijinal dokümantasyondan uyarlanmıştır). @tiangolo’ya teşekkürler.

Değişiklik:

İki girdi alan bir `put` isteği eklendi. `item_id` bir tamsayıdır ve `item` türü, `pydantic`’in `BaseModel`’inden türeyen özel `Item` sınıfını işaret eder. `Item` sınıfı üç öznitelik içerir: `name`, `price`, `is_offer` ve bunların her biri farklı veri tiplerine sahiptir.

FastAPI şunları kontrol eder: 

  • `name` bir `str`’dir.
  • `price` bir `float`’tır.
  • `is_offer` varsa bool’dur.

Tür ipuçlarını kullanmanın avantajı, parametreler, gövde vb. için türleri standart Python (3.6+) fonksiyon parametreleri olarak bir kez bildirmenizdir. Bunun karşılığında şunları elde edersiniz:

  • Editör desteği, otomatik tamamlama ve tür kontrolleri dahil
  • Veri Doğrulama
  • Girdi verisinin dönüştürülmesi
  • Çıktı verisinin dönüştürülmesi
  • Anlaşılması kolay hatalar.

FastAPI’nin Django ve Flask ile karşılaştırması

Bu üç çatı da web uygulamaları geliştirmek için kullanabileceğiniz Python web çatılarıdır. Her birinin güçlü ve zayıf yönleri vardır.

Django, yerleşik bir ORM ve yönetim paneli de dâhil olmak üzere başlamak için gereken her şeyi içeren, tam özellikli bir çatıdadır. Yeni başlayanlar için biraz göz korkutucu olabilir, ancak kapsamlı dokümantasyonu öğrenmeyi kolaylaştırır.

Flask, hafif ve başlaması kolay bir mikro çatıdadır. Django kadar çok özellikle gelmez, ancak basit projeler için idealdir.

FastAPI, hızlı ve kullanımı kolay olacak şekilde tasarlanmış yeni bir çatıdadır. Otomatik veri doğrulama ve dokümantasyon gibi özellikler içerir. 

 

Django

Flask

FastAPI

Topluluk

Büyük. 

66K GitHub yıldızı

Büyük. 

61K GitHub yıldızı

Büyük. 

50K GitHub yıldızı

Performans

Django kapsamlıdır. Performans açısından en iyisi değildir.

Flask bir mikro web çatısıdır. Django’dan daha iyi performans gösterir.

FastAPI, yerel async desteğiyle çatı verimliliğini artıran en hızlı web çatılarından biridir. 

Async desteği

Evet, sınırlı gecikmeyle.

Hayır. 

Asyncio gerekir

FastAPI yerel async desteği sağlar.

Kullanım kolaylığı

Django kapsamlıdır ve bu nedenle öğrenmesi biraz karmaşıktır.

Flask öğrenmesi kolay ve kullanımı oldukça yalındır.

FastAPI üçünün içinde en basit olanıdır.

Etkileşimli Dokümantasyon

Etkileşimli değil

Hayır

Evet (OpenAI, Redoc)

Veri Doğrulama

Hayır

Hayır

Evet


FastAPI Performans Kıyasları

techempower tarafından yürütülen testlerin sonuçlarına göre, FastAPI genel performans açısından diğer tüm çatılardan üstündür. 

API Performans kıyasları

Kaynak: https://www.techempower.com/benchmarks/

Örnek: PyCaret ile uçtan uca bir makine öğrenimi işlem hattı kurup FastAPI ile dağıtma 

Bu bölümde hızlıca bir makine öğrenimi işlem hattı kurup ardından modeli sunmak için bir API oluşturacağız. İşlem hattını kurmak ve bir API oluşturmak için düşük kodlu bir Python kütüphanesi olan PyCaret’i kullanacağız. PyCaret’in FastAPI ile entegrasyonu vardır; bu da makine öğrenimi modellerini API olarak oluşturmayı ve sunmayı son derece kolaylaştırır.

PyCaret

PyCaret, makine öğrenimi iş akışlarını otomatikleştiren, Python’da açık kaynaklı, düşük kodlu bir makine öğrenimi kütüphanesidir. Deney döngüsünü katlanarak hızlandıran ve üretkenliğinizi artıran uçtan uca bir makine öğrenimi ve model yönetim aracıdır.

```

pip install pycaret

```




```

import pycaret

pycaret.__version__

>>> 2.3.10

```

Bu örnekte `insurance` veri setini kullanacağız. Bu, yaş, cinsiyet, BMI ve bölgeye göre tıbbi harcamaları tahmin etmeye yönelik bir regresyon kullanım senaryosudur. 

```

from pycaret.datasets import get_data

data = get_data(‘insurance’)

```

Örnek Veri Seti

Görsel: Yazar

Sonraki adımda pycaret’ten `setup` fonksiyonunu başlatacağız. Bu fonksiyon, PyCaret’te deneyi başlatır ve fonksiyona geçirilen tüm parametrelere göre dönüşüm işlem hattını oluşturur. 

`setup`, diğer herhangi bir fonksiyondan önce mutlaka çalıştırılmalıdır. Çalışması için iki parametre gerekir: `data` ve `target`. `setup` içindeki diğer tüm argümanlar isteğe bağlıdır. `setup` fonksiyonu, veri ön işleme prosedürlerinin tamamını kontrol etmekten sorumludur. PyCaret’te desteklenen tüm ön işleme prosedürlerinin kapsamlı dökümü için PyCaret dokümantasyonuna bakın.

```

from pycaret.regression import *

s = setup(data, target = 'charges')

```

PyCaret'in setup fonksiyonundan çıktı

Görsel: Yazar Çıktı kısaltılmıştır.

Kurulum tamamlandıktan sonra, yalnızca tek satır kodla model eğitimi ve seçimine başlayabiliriz: `compare_models`. Bu fonksiyon, çapraz doğrulama kullanarak model kütüphanesindeki tüm kestirimcilerin model performansını eğitir ve değerlendirir. Fonksiyonun sonucu, çapraz doğrulamadan elde edilen ortalama puanları içeren bir skor tablosudur.

Python ile Makine Öğreniminde Ön İşleme

Temizlenmiş verinizi modellemeye hazır hâle getirme hakkında daha fazla öğrenmek ister misiniz? Python ile Makine Öğreniminde Ön İşleme kursumuzu alın.

Hemen başlayın
```

best = compare_models()

```

PyCaret'in compare_models fonksiyonundan çıktı

Görsel: Yazar

Buna göre en iyi performans gösteren model `Gradient Boosting Regressor` oldu. İstersek, görselleştirme yoluyla modeli analiz edebilir ve hiperparametre ayarlaması veya model birleştirme ile performansı daha da artırmayı deneyebiliriz; ancak bu eğitimde bunu yapmayacağız. 

FastAPI kullanarak üretimde tahmin sunmak için en iyi modelin API’sini oluşturmaya doğrudan geçeceğiz. Unutmayın, PyCaret’in FastAPI ile entegrasyonu vardır; bu sayede `create_api` fonksiyonunu kullanarak modelden otomatik olarak bir REST API oluşturabilir.

```

create_api (best, 'insurance_prediction_model')

```

API Başarıyla Oluşturuldu

Şimdi bu API’yi çalıştırmak için komut istemi terminalini açın, Notebook’unuzun bulunduğu klasöre gidin ve şu komutu çalıştırın: `python insurance_prediction_model.py`. 

Komut Satırı

`http://127.0.0.1:8000/docs` adresine gidin; bu eğitimde daha önce gördüğünüzle aynı arayüzü göreceksiniz

API http:::127.0.0.1:8000:docs üzerinde

Görsel: Yazar

API http:::127.0.0.18000:docs üzerinde

Görsel: Yazar

Alternatif etkileşimli dokümantasyonu da `http://127.0.0.1:8000/redoc` adresine giderek görebilirsiniz’

API http:::127.0.0.1:8000:docs3 üzerinde

Görsel: Yazar

Unutmayın, varsayılan ve redoc etkileşimli dokümantasyonun her ikisi de OpenAPI standartlarıyla desteklenmektedir. 

PyCaret’in `create_api` fonksiyonunu kullandığınızda oluşturduğu dosyayı görmek isterseniz, Notebook’unuzla aynı klasördeki dosyaya bakabilirsiniz. Şuna benziyor:

```

import pandas as pd

from pycaret.regression import load_model, predict_model

from fastapi import FastAPI

import uvicorn




# Create the app

app = FastAPI()




# Load trained Pipeline

model = load_model('my_lr_api')




# Define predict function

@app.post('/predict')

def predict(age, sex, bmi, children, smoker, region):

    data = pd.DataFrame([[age, sex, bmi, children, smoker, region]])

    data.columns = ['age', 'sex', 'bmi', 'children', 'smoker', 'region']

    predictions = predict_model(model, data=data) 

    return {'prediction': list(predictions['Label'])}




if __name__ == '__main__':

    uvicorn.run(app, host='127.0.0.1', port=8000)




```

Sonuç

Bu yazıda API kavramını ve neden kullanıldığını ele aldık. API’ler, farklı yazılım programlarının veri ve işlevsellik paylaşmasına olanak tanıdığı için modern mimaride önemlidir. Bu sayede daha güvenilir ve bakımı daha kolay karmaşık sistemler oluşturmak mümkün olur.

Ardından Python’daki nispeten yeni bir çatı olan FastAPI’ye derinlemesine daldık. FastAPI, kullanımı kolay ve verimli olacak şekilde tasarlanmış daha yeni bir API çatısıdır. Hızlı ve kolay bir şekilde API oluşturmak isteyen geliştiriciler için harika bir seçenektir.

GitHub yıldız geçmişi - star-history.com kullanılarak oluşturuldu

GitHub yıldız geçmişi - star-history.com kullanılarak oluşturuldu

Eğer siz de Python’da Flask kullanarak bir makine öğrenimi modelinden basit bir API oluşturmayı öğrenmek istiyorsanız, bu kolay takip edilebilir Makine Öğrenimi Modellerini Python’da API’lere Dönüştürme eğitimine göz atın.

FastAPI SSS

FastAPI asenkron mudur?

FastAPI, Python’daki async/await anahtar sözcüklerini kullanarak kutudan çıktığı gibi eşzamanlı olmayan (asenkron) kodu destekler.

FastAPI üretime hazır mı?

FastAPI, mükemmel dokümantasyon, destek ve kullanımı kolay bir arayüzle tamamen üretime hazırdır.

FastAPI, Flask’tan nasıl farklıdır?

FastAPI asenkron çağrıları destekler. Flask’tan daha hafif, daha hızlı ve öğrenmesi daha kolaydır. Hem Flask hem de FastAPI’nin büyük toplulukları vardır.

FastAPI’nin yerleşik bir geliştirme sunucusu var mı?

Hayır, FastAPI’nin yerleşik bir geliştirme sunucusu yoktur. Bunun için `uvicorn` kullanmanız gerekir.

FastAPI, Python 2’de destekleniyor mu?

Hayır, FastAPI yalnızca Python 3.6+ sürümlerinde kullanılabilir.

FastAPI yalnızca Python’da mı mevcut?

Evet

FastAPI, Go programlama dilinden daha hızlı mı?

Hayır. techempower’a göre, Golang Fiber dünyadaki en hızlı 50. API’dir. FastAPI ise 183. sıradadır.

FastAPI, Pydantic ile uyumlu mu?

FastAPI, Pydantic ile tamamen uyumludur (ve onun üzerine kuruludur).

Konular

Bu kurslarla yapay zekâ öğrenin!

Kurs

Efficient AI Model Training with PyTorch

4 sa
1.4K
Learn how to reduce training times for large language models with Accelerator and Trainer for distributed training
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow