Ana içeriğe geç

Header Parametreleri

🌐 Translation by AI and humans

This translation was made by AI guided by humans. 🤝

It could have mistakes of misunderstanding the original meaning, or looking unnatural, etc. 🤖

You can improve this translation by helping us guide the AI LLM better.

English version

Query, Path ve Cookie parametrelerini nasıl tanımlıyorsanız, Header parametrelerini de aynı şekilde tanımlayabilirsiniz.

Header'ı Import Edin

Önce Header'ı import edin:

from typing import Annotated

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: Annotated[str | None, Header()] = None):
    return {"User-Agent": user_agent}
🤓 Other versions and variants
from typing import Annotated, Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: Annotated[Union[str, None], Header()] = None):
    return {"User-Agent": user_agent}

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: str | None = Header(default=None)):
    return {"User-Agent": user_agent}

Tip

Prefer to use the Annotated version if possible.

from typing import Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: Union[str, None] = Header(default=None)):
    return {"User-Agent": user_agent}

Header Parametrelerini Tanımlayın

Ardından header parametrelerini, Path, Query ve Cookie ile kullandığınız yapının aynısıyla tanımlayın.

Default değeri ve ek validation ya da annotation parametrelerinin tamamını belirleyebilirsiniz:

from typing import Annotated

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: Annotated[str | None, Header()] = None):
    return {"User-Agent": user_agent}
🤓 Other versions and variants
from typing import Annotated, Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: Annotated[Union[str, None], Header()] = None):
    return {"User-Agent": user_agent}

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: str | None = Header(default=None)):
    return {"User-Agent": user_agent}

Tip

Prefer to use the Annotated version if possible.

from typing import Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(user_agent: Union[str, None] = Header(default=None)):
    return {"User-Agent": user_agent}

Teknik Detaylar

Header, Path, Query ve Cookie'nin "kardeş" sınıfıdır. Ayrıca aynı ortak Param sınıfından kalıtım alır.

Ancak şunu unutmayın: fastapi'den Query, Path, Header ve diğerlerini import ettiğinizde, bunlar aslında özel sınıfları döndüren fonksiyonlardır.

Bilgi

Header'ları tanımlamak için Header kullanmanız gerekir; aksi halde parametreler query parametreleri olarak yorumlanır.

Otomatik Dönüştürme

Header, Path, Query ve Cookie'nin sağladıklarına ek olarak küçük bir ekstra işlevsellik sunar.

Standart header'ların çoğu, "hyphen" karakteri (diğer adıyla "minus symbol" (-)) ile ayrılır.

Ancak user-agent gibi bir değişken adı Python'da geçersizdir.

Bu yüzden, default olarak Header, header'ları almak ve dokümante etmek için parametre adlarındaki underscore (_) karakterlerini hyphen (-) ile dönüştürür.

Ayrıca HTTP header'ları büyük/küçük harfe duyarlı değildir; dolayısıyla onları standart Python stiliyle (diğer adıyla "snake_case") tanımlayabilirsiniz.

Yani User_Agent gibi bir şey yazıp ilk harfleri büyütmeniz gerekmeden, Python kodunda normalde kullandığınız gibi user_agent kullanabilirsiniz.

Herhangi bir nedenle underscore'ların hyphen'lara otomatik dönüştürülmesini kapatmanız gerekirse, Header'ın convert_underscores parametresini False yapın:

from typing import Annotated

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    strange_header: Annotated[str | None, Header(convert_underscores=False)] = None,
):
    return {"strange_header": strange_header}
🤓 Other versions and variants
from typing import Annotated, Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    strange_header: Annotated[
        Union[str, None], Header(convert_underscores=False)
    ] = None,
):
    return {"strange_header": strange_header}

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    strange_header: str | None = Header(default=None, convert_underscores=False),
):
    return {"strange_header": strange_header}

Tip

Prefer to use the Annotated version if possible.

from typing import Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    strange_header: Union[str, None] = Header(default=None, convert_underscores=False),
):
    return {"strange_header": strange_header}

Uyarı

convert_underscores'u False yapmadan önce, bazı HTTP proxy'lerinin ve server'ların underscore içeren header'ların kullanımına izin vermediğini unutmayın.

Yinelenen Header'lar

Yinelenen header'lar almak mümkündür. Yani aynı header'ın birden fazla değeri olabilir.

Bu tür durumları, type tanımında bir list kullanarak belirtebilirsiniz.

Yinelenen header'daki tüm değerleri Python list olarak alırsınız.

Örneğin, birden fazla kez gelebilen X-Token header'ını tanımlamak için şöyle yazabilirsiniz:

from typing import Annotated

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(x_token: Annotated[list[str] | None, Header()] = None):
    return {"X-Token values": x_token}
🤓 Other versions and variants
from typing import Annotated, Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(x_token: Annotated[Union[list[str], None], Header()] = None):
    return {"X-Token values": x_token}

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(x_token: list[str] | None = Header(default=None)):
    return {"X-Token values": x_token}

Tip

Prefer to use the Annotated version if possible.

from typing import Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(x_token: Union[list[str], None] = Header(default=None)):
    return {"X-Token values": x_token}

Eğer bu path operation ile iki HTTP header göndererek iletişim kurarsanız:

X-Token: foo
X-Token: bar

response şöyle olur:

{
    "X-Token values": [
        "bar",
        "foo"
    ]
}

Özet

Header'ları Header ile tanımlayın; Query, Path ve Cookie ile kullanılan ortak kalıbı burada da kullanın.

Değişkenlerinizdeki underscore'lar konusunda endişelenmeyin, FastAPI bunları dönüştürmeyi halleder.