Movatterモバイル変換


[0]ホーム

URL:


Ana içeriğe geç
Join theFastAPI Cloud waiting list 🚀
Follow@fastapi onX (Twitter) to stay updated
FollowFastAPI onLinkedIn to stay updated
Subscribe to theFastAPI and friends newsletter 🎉
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor

Request Body

🌐 Yapay Zekâ ve İnsanlar Tarafından Çeviri

Bu çeviri, insanlar tarafından yönlendirilen bir yapay zekâ ile oluşturuldu. 🤝

Orijinal anlamın yanlış anlaşılması ya da kulağa doğal gelmeme gibi hatalar içerebilir. 🤖

Yapay zekâ LLM'ini daha iyi yönlendirmemize yardımcı olarak bu çeviriyi iyileştirebilirsiniz.

İngilizce sürüm

Bir client'ten (örneğin bir tarayıcıdan) API'nize veri göndermeniz gerektiğinde, bunurequest body olarak gönderirsiniz.

Birrequest body, client'in API'nize gönderdiği veridir. Birresponse body ise API'nizin client'e gönderdiği veridir.

API'niz neredeyse her zaman birresponse body göndermek zorundadır. Ancak client'lerin her zamanrequest body göndermesi gerekmez; bazen sadece bir path isterler, belki birkaç query parametresiyle birlikte, ama body göndermezler.

Birrequest body tanımlamak için, tüm gücü ve avantajlarıylaPydantic modellerini kullanırsınız.

Bilgi

Veri göndermek için şunlardan birini kullanmalısınız:POST (en yaygını),PUT,DELETE veyaPATCH.

GET request'i ile body göndermek, spesifikasyonlarda tanımsız bir davranıştır; yine de FastAPI bunu yalnızca çok karmaşık/uç kullanım senaryoları için destekler.

Önerilmediği için Swagger UI ile etkileşimli dokümanlar,GET kullanırken body için dokümantasyonu göstermez ve aradaki proxy'ler bunu desteklemeyebilir.

Pydantic'inBaseModel'ini import edin

Önce,pydantic içindenBaseModel'i import etmeniz gerekir:

fromfastapiimportFastAPIfrompydanticimportBaseModelclassItem(BaseModel):name:strdescription:str|None=Noneprice:floattax:float|None=Noneapp=FastAPI()@app.post("/items/")asyncdefcreate_item(item:Item):returnitem

Veri modelinizi oluşturun

Sonra veri modelinizi,BaseModel'den kalıtım alan bir class olarak tanımlarsınız.

Tüm attribute'lar için standart Python type'larını kullanın:

fromfastapiimportFastAPIfrompydanticimportBaseModelclassItem(BaseModel):name:strdescription:str|None=Noneprice:floattax:float|None=Noneapp=FastAPI()@app.post("/items/")asyncdefcreate_item(item:Item):returnitem

Query parametrelerini tanımlarken olduğu gibi, bir model attribute'ü default bir değere sahipse zorunlu değildir. Aksi halde zorunludur. Sadece opsiyonel yapmak içinNone kullanın.

Örneğin, yukarıdaki model şu şekilde bir JSON "object" (veya Pythondict) tanımlar:

{"name":"Foo","description":"An optional description","price":45.2,"tax":3.5}

...description vetax opsiyonel olduğu için (default değerleriNone), şu JSON "object" da geçerli olur:

{"name":"Foo","price":45.2}

Parametre olarak tanımlayın

Bunupath operation'ınıza eklemek için, path ve query parametrelerini tanımladığınız şekilde tanımlayın:

fromfastapiimportFastAPIfrompydanticimportBaseModelclassItem(BaseModel):name:strdescription:str|None=Noneprice:floattax:float|None=Noneapp=FastAPI()@app.post("/items/")asyncdefcreate_item(item:Item):returnitem

...ve type'ını, oluşturduğunuz model olanItem olarak belirtin.

Sonuçlar

Sadece bu Python type tanımıyla,FastAPI şunları yapar:

  • Request'in body'sini JSON olarak okur.
  • İlgili type'lara dönüştürür (gerekirse).
  • Veriyi doğrular (validate eder).
    • Veri geçersizse, tam olarak nerede ve hangi verinin hatalı olduğunu söyleyen, anlaşılır bir hata döndürür.
  • Aldığı veriyiitem parametresi içinde size verir.
    • Fonksiyonda bunun type'ınıItem olarak tanımladığınız için, tüm attribute'lar ve type'ları için editor desteğini (tamamlama vb.) de alırsınız.
  • Modeliniz içinJSON Schema tanımları üretir; projeniz için anlamlıysa bunları başka yerlerde de kullanabilirsiniz.
  • Bu şemalar üretilen OpenAPI şemasının bir parçası olur ve otomatik dokümantasyonUIs tarafından kullanılır.

Otomatik dokümanlar

Modellerinizin JSON Schema'ları, OpenAPI tarafından üretilen şemanın bir parçası olur ve etkileşimli API dokümanlarında gösterilir:

Ayrıca, ihtiyaç duyan herpath operation içindeki API dokümanlarında da kullanılır:

Editor desteği

Editor'ünüzde, fonksiyonunuzun içinde her yerde type hint'leri ve tamamlama (completion) alırsınız (Pydantic modeli yerinedict alsaydınız bu olmazdı):

Yanlış type işlemleri için hata kontrolleri de alırsınız:

Bu bir tesadüf değil; tüm framework bu tasarımın etrafında inşa edildi.

Ayrıca, bunun tüm editor'lerle çalışacağından emin olmak için herhangi bir implementasyon yapılmadan önce tasarım aşamasında kapsamlı şekilde test edildi.

Hatta bunu desteklemek için Pydantic'in kendisinde bile bazı değişiklikler yapıldı.

Önceki ekran görüntüleriVisual Studio Code ile alınmıştır.

AncakPyCharm ve diğer Python editor'lerinin çoğunda da aynı editor desteğini alırsınız:

İpucu

Editor olarakPyCharm kullanıyorsanız,Pydantic PyCharm Plugin kullanabilirsiniz.

Pydantic modelleri için editor desteğini şu açılardan iyileştirir:

  • auto-completion
  • type checks
  • refactoring
  • searching
  • inspections

Modeli kullanın

Fonksiyonun içinde model nesnesinin tüm attribute'larına doğrudan erişebilirsiniz:

fromfastapiimportFastAPIfrompydanticimportBaseModelclassItem(BaseModel):name:strdescription:str|None=Noneprice:floattax:float|None=Noneapp=FastAPI()@app.post("/items/")asyncdefcreate_item(item:Item):item_dict=item.model_dump()ifitem.taxisnotNone:price_with_tax=item.price+item.taxitem_dict.update({"price_with_tax":price_with_tax})returnitem_dict

Request body + path parametreleri

Path parametrelerini ve request body'yi aynı anda tanımlayabilirsiniz.

FastAPI, path parametreleriyle eşleşen fonksiyon parametrelerininpath'ten alınması gerektiğini ve Pydantic model olarak tanımlanan fonksiyon parametrelerininrequest body'den alınması gerektiğini anlayacaktır.

fromfastapiimportFastAPIfrompydanticimportBaseModelclassItem(BaseModel):name:strdescription:str|None=Noneprice:floattax:float|None=Noneapp=FastAPI()@app.put("/items/{item_id}")asyncdefupdate_item(item_id:int,item:Item):return{"item_id":item_id,**item.model_dump()}

Request body + path + query parametreleri

body,path vequery parametrelerini aynı anda da tanımlayabilirsiniz.

FastAPI bunların her birini tanır ve veriyi doğru yerden alır.

fromfastapiimportFastAPIfrompydanticimportBaseModelclassItem(BaseModel):name:strdescription:str|None=Noneprice:floattax:float|None=Noneapp=FastAPI()@app.put("/items/{item_id}")asyncdefupdate_item(item_id:int,item:Item,q:str|None=None):result={"item_id":item_id,**item.model_dump()}ifq:result.update({"q":q})returnresult

Fonksiyon parametreleri şu şekilde tanınır:

  • Parametre,path içinde de tanımlıysa path parametresi olarak kullanılır.
  • Parametretekil bir type'taysa (int,float,str,bool vb.),query parametresi olarak yorumlanır.
  • Parametre birPydantic model type'ı olarak tanımlandıysa, requestbody olarak yorumlanır.

Not

FastAPI,q değerinin zorunlu olmadığını= None default değerinden anlayacaktır.

str | None, FastAPI tarafından bu değerin zorunlu olmadığını belirlemek için kullanılmaz; FastAPI bunun zorunlu olmadığını= None default değeri olduğu için bilir.

Ancak type annotation'larını eklemek, editor'ünüzün size daha iyi destek vermesini ve hataları yakalamasını sağlar.

Pydantic olmadan

Pydantic modellerini kullanmak istemiyorsanız,Body parametrelerini de kullanabilirsiniz.Body - Multiple Parameters: Singular values in body dokümanına bakın.


[8]ページ先頭

©2009-2026 Movatter.jp