Ana içeriğe geç

Ek Status Code'ları

🌐 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

Varsayılan olarak FastAPI, response'ları bir JSONResponse kullanarak döndürür; path operation'ınızdan döndürdüğünüz içeriği bu JSONResponse'un içine yerleştirir.

Varsayılan status code'u veya path operation içinde sizin belirlediğiniz status code'u kullanır.

Ek status code'ları

Ana status code'a ek olarak başka status code'lar da döndürmek istiyorsanız, JSONResponse gibi bir Response'u doğrudan döndürerek bunu yapabilirsiniz ve ek status code'u doğrudan orada ayarlarsınız.

Örneğin, item'ları güncellemeye izin veren bir path operation'ınız olduğunu düşünelim; başarılı olduğunda 200 "OK" HTTP status code'unu döndürüyor olsun.

Ancak yeni item'ları da kabul etmesini istiyorsunuz. Ve item daha önce yoksa, onu oluşturup 201 "Created" HTTP status code'unu döndürsün.

Bunu yapmak için JSONResponse import edin ve içeriğinizi doğrudan onunla döndürün; istediğiniz status_code'u da ayarlayın:

from typing import Annotated

from fastapi import Body, FastAPI, status
from fastapi.responses import JSONResponse

app = FastAPI()

items = {"foo": {"name": "Fighters", "size": 6}, "bar": {"name": "Tenders", "size": 3}}


@app.put("/items/{item_id}")
async def upsert_item(
    item_id: str,
    name: Annotated[str | None, Body()] = None,
    size: Annotated[int | None, Body()] = None,
):
    if item_id in items:
        item = items[item_id]
        item["name"] = name
        item["size"] = size
        return item
    else:
        item = {"name": name, "size": size}
        items[item_id] = item
        return JSONResponse(status_code=status.HTTP_201_CREATED, content=item)
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import Body, FastAPI, status
from fastapi.responses import JSONResponse

app = FastAPI()

items = {"foo": {"name": "Fighters", "size": 6}, "bar": {"name": "Tenders", "size": 3}}


@app.put("/items/{item_id}")
async def upsert_item(
    item_id: str,
    name: str | None = Body(default=None),
    size: int | None = Body(default=None),
):
    if item_id in items:
        item = items[item_id]
        item["name"] = name
        item["size"] = size
        return item
    else:
        item = {"name": name, "size": size}
        items[item_id] = item
        return JSONResponse(status_code=status.HTTP_201_CREATED, content=item)

Uyarı

Yukarıdaki örnekte olduğu gibi bir Response'u doğrudan döndürdüğünüzde, response aynen olduğu gibi döndürülür.

Bir model ile serialize edilmez, vb.

İçinde olmasını istediğiniz veriyi taşıdığından emin olun ve değerlerin geçerli JSON olduğundan emin olun (eğer JSONResponse kullanıyorsanız).

Teknik Detaylar

from starlette.responses import JSONResponse da kullanabilirsiniz.

FastAPI, geliştirici olarak size kolaylık olsun diye starlette.responses içindekileri fastapi.responses altında da sunar. Ancak mevcut response'ların çoğu doğrudan Starlette'ten gelir. status için de aynı durum geçerlidir.

OpenAPI ve API docs

Ek status code'ları ve response'ları doğrudan döndürürseniz, FastAPI sizin ne döndüreceğinizi önceden bilemeyeceği için bunlar OpenAPI şemasına (API docs) dahil edilmez.

Ancak bunu kodunuzda şu şekilde dokümante edebilirsiniz: Ek Response'lar.