Skip to content

FastAPI çerçevesi, yüksek performans, öğrenmesi kolay, kodlaması hızlı, üretime hazır

License

Notifications You must be signed in to change notification settings

Eren-Seyfi/Tr-fastapi

 
 

Repository files navigation

FastAPI

FastAPI çerçevesi, yüksek performans, öğrenmesi kolay, kodlaması hızlı, üretime hazır

Test Coverage Package version Supported Python versions


Belgeler: https://fastapi.tiangolo.com

Kaynak kodu: https://github.com/tiangolo/fastapi


FastAPI, standart Python türü ipuçlarına dayalı Python 3.6+ ile API'ler oluşturmaya yönelik modern, hızlı (yüksek performanslı) bir web çerçevesidir.

Temel özellikler şunlardır:

  • Hızlı: NodeJS ve Go ile eşit düzeyde çok yüksek performans. Mevcut en hızlı Python framework'lerinden biri.
  • Hızlı kodlama: Özellikleri geliştirme hızını yaklaşık %200 ila %300 artırın. *
  • Daha az hata: İnsan (geliştirici) kaynaklı hataların yaklaşık %40'ını azaltın. *
  • Sezgisel:Harika editör desteği. tamamlama her yerde. Daha az zaman hata ayıklama.
  • Kolay:Kullanımı ve öğrenmesi kolay olacak şekilde tasarlanmıştır. Dokümanları okumak için daha az zaman.
  • Kısa: Kod tekrarını en aza indirin. Her parametre bildiriminden birden çok özellik. Daha az hata.
  • Sağlam: Üretime hazır kod alın. Otomatik etkileşimli belgelerle.
  • Standartlara dayalı: API'ler için açık standartları temel alır (ve bunlarla tamamen uyumludur):OpenAPI (önceden Swagger olarak biliniyordu) ve JSON Şeması.

* üretim uygulamaları oluşturan dahili bir geliştirme ekibindeki testlere dayalı tahmin.

Sponsorlar

Other sponsors

Görüşler

"[...] Bu günlerde bir ton FastAPI kullanıyorum. [...] Aslında bunu ekibimin Microsoft**'taki tüm **ML hizmetleri için kullanmayı planlıyorum. temel Windows ürününe ve bazı Office ürünlerine entegre oluyorlar."

Kabir Khan - Microsoft (ref)

"FastAPI kitaplığını, tahminler elde etmek için sorgulanabilecek bir REST sunucusu oluşturmak için benimsedik. [Ludwig için]"

Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)

"Netflix, kriz yönetimi düzenleme çerçevemizin açık kaynaklı sürümünü duyurmaktan mutluluk duyar: Dispatch! [FastAPI ile oluşturulmuştur]"

Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)

"FastAPI için çok heyecanlıyım. Çok eğlenceli!"

Brian Okken - Python Baytları podcast sunucusu (ref)

"Dürüst olmak gerekirse, yaptığın şey süper sağlam ve gösterişli görünüyor. Birçok yönden, Sarılmak olmasını istediğim şey buydu - birinin bunu yaptığını görmek gerçekten ilham verici."

Timothy Crosley - Hug creator (ref)

"REST API'leri oluşturmak için bir modern çerçeve öğrenmek istiyorsanız, FastAPI'ye göz atın [...] Hızlı, kullanımı kolay ve öğrenmesi kolay [...]_"

"API'lerimiz için FastAPI'ye geçtik [...] Beğeneceğinizi düşünüyorum [...]"

Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)

Typer, CLI'lerin FastAPI'si

Eğer bir bina yapıyorsanız CLI bir web API'si yerine terminalde kullanılacak uygulama, kontrol edin Typer.

Typer FastAPI'nin küçük kardeşidir. Ve CLI'lerin FastAPI'si olması amaçlanmıştır. ⌨️ 🚀

Gereksinimler

Python 3.6+

FastAPI devlerin omuzlarında duruyor:

Kurulum

$ pip install fastapi

---> 100%

Ayrıca üretim için bir ASGI sunucusuna ihtiyacınız olacak. Uvicorn veya Hypercorn.

$ pip install "uvicorn[standard]"

---> 100%

Örnek

Oluştur

  • Şunlarla bir "main.py" dosyası oluşturun:
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}
Or use async def...

If your code uses async / await, use async def:

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

Not:

Bilmiyorsanız, hakkında "Aceleniz mi var?" bölümüne bakın. dokümanlarda "async" ve "await".

Çalıştır

Sunucuyu şununla çalıştırın:

$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28720]
INFO:     Started server process [28722]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
Komut hakkında uvicorn main:uygulama -- yeniden yükle...

"uvicorn main:app" komutu şu anlama gelir:

  • main: the file main.py (the Python "module").
  • app: the object created inside of main.py with the line app = FastAPI().
  • --reload: make the server restart after code changes. Only do this for development.

Kontrol et

Tarayıcınızı şuradan açın: http://127.0.0.1:8000/items/5?q=somequery.

JSON yanıtını şu şekilde göreceksiniz:

{"item_id": 5, "q": "somequery"}

Zaten bir API oluşturdunuz:

  • paths / ve /items/{item_id} içindeki HTTP isteklerini alır.
  • Both paths take GET operasyonlar (HTTP methods olarak da bilinir).
  • path "/items/{item_id}", "int" olması gereken bir path parametresi "item_id"ye sahiptir.
  • path /items/{item_id}, isteğe bağlı bir str query parametresi q içerir.

Etkileşimli API belgeleri

şimdi git http://127.0.0.1:8000/docs.

Otomatik etkileşimli API belgelerini göreceksiniz (tarafından sunulan Swagger Kullanıcı Arayüzü):

Swagger UI

Alternatif API belgeleri

Ve şimdi git http://127.0.0.1:8000/redoc.

Alternatif otomatik belgeleri göreceksiniz(tarafından sunulanyeniden belge):

ReDoc

Örnek yükseltme

Şimdi bir 'PUT' isteğinden bir gövde almak için 'main.py' dosyasını değiştirin.

Pydantic sayesinde standart Python türlerini kullanarak gövdeyi bildirin.

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}

Sunucu otomatik olarak yeniden yüklenmelidir (çünkü yukarıdaki "uvicorn" komutuna "--reload" eklediniz).

Etkileşimli API dokümanları yükseltmesi

şimdi git http://127.0.0.1:8000/docs.

  • Etkileşimli API belgeleri, yeni gövde de dahil olmak üzere otomatik olarak güncellenecektir:

Swagger UI

  • "Dene" düğmesine tıklayın, parametreleri doldurmanıza ve doğrudan API ile etkileşime girmenize olanak tanır:

Swagger UI interaction

  • Ardından "Yürüt" düğmesine tıklayın, kullanıcı arayüzü API'niz ile iletişim kuracak, parametreleri gönderecek, sonuçları alacak ve bunları ekranda gösterecektir:

Swagger UI interaction

Alternatif API dokümanları yükseltmesi

And now, go to http://127.0.0.1:8000/redoc.

  • Alternatif belgeler, yeni sorgu parametresini ve gövdesini de yansıtacaktır:

ReDoc

Özet

Özetle, parametre, gövde vb. türlerini bir kez işlev parametreleri olarak bildirirsiniz.

Bunu standart modern Python türleriyle yaparsınız.

Yeni bir sözdizimi, belirli bir kitaplığın yöntemlerini veya sınıflarını vb. öğrenmeniz gerekmez.

Sadece standart Python 3.6+.

Örneğin, bir "int" için:

item_id: int

veya daha karmaşık bir "Öğe" modeli için:

item: Item

... ve bu tek beyanla şunları elde edersiniz:

  • Aşağıdakiler dahil editör desteği:
    • Tamamlama.
    • Tip kontrolleri.
  • Verilerin doğrulanması:
    • Veriler geçersiz olduğunda otomatik ve net hatalar.
    • Derinlemesine yuvalanmış JSON nesneleri için bile doğrulama.
  • Dönüştürmekgirdi verilerinin sayısı: ağdan Python verisine ve türlerine geliyor. Şuradan okuma: *JSON.
    • Yol parametreleri.
    • Sorgu parametreleri.
    • Cookies.
    • Başlıklar.
    • Formlar.
    • Dosyalar.
  • Dönüştürmek çıktı verilerinin sayısı: Python verilerinden ve türlerinden ağ verilerine dönüştürme (JSON olarak):
    • Python türlerini dönüştürme(str, int, float, bool, list, etc).
    • 'datetime' nesneleri.
    • "UUID" nesneleri.
    • Veritabanı modelleri.
    • ...ve daha fazlası.
  • Automatic interactive API documentation, including 2 alternative user interfaces:
    • Swagger kullanıcı arayüzü.
    • ReDoc.

Önceki kod örneğine dönersek, FastAPI şunları yapacaktır:

  • "GET" ve "PUT" isteklerinin yolunda bir "item_id" olduğunu doğrulayın.
  • "item_id"nin "GET" ve "PUT" istekleri için "int" türünde olduğunu doğrulayın.
    • Değilse, istemci yararlı, net bir hata görecektir.
  • "GET" istekleri için "q" adlı isteğe bağlı bir sorgu parametresi olup olmadığını kontrol edin ('http://127.0.0.1:8000/items/foo?q=somequery'de olduğu gibi).
    • 'q' parametresi '= None' ile bildirildiğinden isteğe bağlıdır.
    • "Hiçbiri" olmadan gerekli olacaktır ("PUT" durumunda gövde olduğu gibi).
  • '/items/{item_id}' için 'PUT' istekleri için, Gövdeyi JSON olarak okuyun:
    • Bir "str" olması gereken gerekli bir "ad" özniteliğine sahip olup olmadığını kontrol edin.
    • Bir "değişken" olması gereken zorunlu bir "fiyat" özniteliğine sahip olup olmadığını kontrol edin.
    • Varsa, bir "bool" olması gereken isteğe bağlı bir "is_offer" özniteliğine sahip olup olmadığını kontrol edin.
    • Tüm bunlar, derinlemesine iç içe geçmiş JSON nesneleri için de işe yarar. *JSON'dan ve JSON'a otomatik olarak dönüştürün.
  • Aşağıdakiler tarafından kullanılabilecek her şeyi OpenAPI ile belgeleyin:
    • Ietkileşimli dokümantasyon sistemleri.
    • Birçok dil için otomatik istemci kodu oluşturma sistemleri.
  • Doğrudan 2 etkileşimli dokümantasyon web arayüzü sağlayın.

Biz sadece yüzeyi çizdik, ama zaten her şeyin nasıl çalıştığına dair bir fikriniz var.

Satırı şununla değiştirmeyi deneyin:

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

...from:

        ... "item_name": item.name ...

...to:

        ... "item_price": item.price ...

...ve düzenleyicinizin özellikleri nasıl otomatik olarak tamamlayacağını ve türlerini nasıl bileceğini görün:

editor support

Daha fazla özellik içeren daha eksiksiz bir örnek için Öğretici - Kullanıcı Kılavuzu'na bakın.

Spoiler uyarısı: öğretici - kullanım kılavuzu şunları içerir:

*Diğer farklı yerlerden parametrelerin beyanı: başlıklar, cookies, form alanları ve dosyalar. *Doğrulama kısıtlamaları nasıl "maksimum_uzunluk" veya "normal ifade" olarak ayarlanır.

  • Çok güçlü ve kullanımı kolay bir Bağımlılık Enjeksiyonu sistemi olarak da bilinir.
  • JWT belirteçleri ve HTTP Basic kimlik doğrulaması ile OAuth2 desteği dahil olmak üzere güvenlik ve kimlik doğrulama.
  • Derin yuvalanmış JSON modellerini bildirmek için daha gelişmiş (ancak aynı derecede kolay) teknikler (Pydantic sayesinde).
  • GraphQL Çilek ve diğer kitaplıklarla entegrasyon.
  • Birçok ekstra özellik (Starlette sayesinde):
    • WebSockets
    • "istekler" ve "pytest"e dayalı son derece kolay testler
    • CORS
    • Çerez Oturumları
    • ...ve dahası.

Verim

Bağımsız TechEmpower karşılaştırmaları, Uvicorn altında çalışan FastAPI uygulamalarını mevcut en hızlı Python çerçevelerinden biri, yalnızca Starlette ve Uvicorn'un altında (dahili olarak FastAPI tarafından kullanılır). (*)

Bununla ilgili daha fazla bilgi edinmek için Karşılaştırmalar bölümüne bakın.

İsteğe Bağlı Bağımlılıklar

Pydantic tarafından kullanılır:

Starlette tarafından kullanılır:

  • istekler - "TestClient"i kullanmak istiyorsanız gereklidir.
  • jinja2 - Varsayılan şablon yapılandırmasını kullanmak istiyorsanız gereklidir.
  • python-multipart - Formu desteklemek istiyorsanız gereklidir "ayrıştırma", request.form() ile.
  • itsdangerous - "SessionMiddleware" desteği için gereklidir.
  • pyyaml - Starlette'in "SchemaGenerator" desteği için gereklidir (muhtemelen FastAPI ile).
  • ujson - "UJSONResponse" kullanmak istiyorsanız gereklidir.

FastAPI / Starlette tarafından kullanılır:

  • uvicorn - uygulamanızı yükleyen ve sunan sunucu için. *orjson - "ORJSONResponse" kullanmak istiyorsanız gereklidir.

Bunların hepsini pip install "fastapi[all]" ile kurabilirsiniz.

Lisans

Bu proje MIT lisansı şartlarına göre lisanslanmıştır.

About

FastAPI çerçevesi, yüksek performans, öğrenmesi kolay, kodlaması hızlı, üretime hazır

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 99.9%
  • Other 0.1%