Skip to content

FastAPI

FastAPI

ืชืฉืชื™ืช FastAPI, ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื, ืงืœื” ืœืœืžื™ื“ื”, ืžื”ื™ืจื” ืœืชื›ื ื•ืช, ืžื•ื›ื ื” ืœืกื‘ื™ื‘ืช ื™ื™ืฆื•ืจ

Test Coverage Package version Supported Python versions


ืชื™ืขื•ื“: https://fastapi.tiangolo.com

ืงื•ื“: https://github.com/tiangolo/fastapi


FastAPI ื”ื™ื ืชืฉืชื™ืช ืจืฉืช ืžื•ื“ืจื ื™ืช ื•ืžื”ื™ืจื” (ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื) ืœื‘ื ื™ื™ืช ืžืžืฉืงื™ ืชื›ื ื•ืช ื™ื™ืฉื•ืžื™ื (API) ืขื ืคื™ื™ืชื•ืŸ 3.6+ ื‘ื”ืชื‘ืกืก ืขืœ ืจืžื–ื™ ื˜ื™ืคื•ืกื™ื ืกื˜ื ื“ืจื˜ื™ื™ื.

ืชื›ื•ื ื•ืช ื”ืžืคืชื— ื”ืŸ:

  • ืžื”ื™ืจื”: ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ืžืื•ื“, ื‘ืงื ื” ืื—ื“ ืขื NodeJS ื• - Go (ืชื•ื“ื•ืช ืœ - Starlette ื• - Pydantic). ืื—ืช ืžืชืฉืชื™ื•ืช ื”ืคื™ื™ืชื•ืŸ ื”ืžื”ื™ืจื•ืช ื‘ื™ื•ืชืจ.

  • ืžื”ื™ืจื” ืœืชื›ื ื•ืช: ื”ื’ื‘ื™ืจื• ืืช ืžื”ื™ืจื•ืช ืคื™ืชื•ื— ื”ืชื›ื•ื ื•ืช ื”ื—ื“ืฉื•ืช ื‘ื› - %200 ืขื“ %300. *

  • ืคื—ื•ืช ืฉื’ื™ืื•ืช: ืžื ืขื• ื› - %40 ืžืฉื’ื™ืื•ืช ืื ื•ืฉ (ืžืคืชื—ื™ื). *
  • ืื™ื ื˜ื•ืื™ื˜ื™ื‘ื™ืช: ืชืžื™ื›ืช ืขื•ืจืš ืžืขื•ืœื”. ื”ืฉืœืžื” ื‘ื›ืœ ืžืงื•ื. ืคื—ื•ืช ื–ืžืŸ ื ื™ืคื•ื™ ืฉื’ื™ืื•ืช.
  • ืงืœื”: ืžืชื•ื›ื ื ืช ืœื”ื™ื•ืช ืงืœื” ืœืฉื™ืžื•ืฉ ื•ืœืœืžื™ื“ื”. ืคื—ื•ืช ื–ืžืŸ ืงืจื™ืืช ืชื™ืขื•ื“.
  • ืงืฆืจื”: ืžื–ืขืจื• ืฉื›ืคื•ืœ ืงื•ื“. ืžืกืคืจ ืชื›ื•ื ื•ืช ืžื›ืœ ื”ื›ืจื–ืช ืคืจืžื˜ืจ. ืคื—ื•ืช ืฉื’ื™ืื•ืช.
  • ื—ืกื•ื ื”: ืงื‘ืœื• ืงื•ื“ ืžื•ื›ืŸ ืœืกื‘ื™ื‘ืช ื™ื™ืฆื•ืจ. ืขื ืชื™ืขื•ื“ ืื™ื ื˜ืจืงื˜ื™ื‘ื™ ืื•ื˜ื•ืžื˜ื™.
  • ืžื‘ื•ืกืกืช ืกื˜ื ื“ืจื˜ื™ื: ืžื‘ื•ืกืกืช ืขืœ (ื•ืชื•ืืžืช ืœื—ืœื•ื˜ื™ืŸ ืœ -) ื”ืกื˜ื“ื ืจื˜ื™ื ื”ืคืชื•ื—ื™ื ืœืžืžืฉืงื™ ืชื›ื ื•ืช ื™ื™ืฉื•ืžื™ื: OpenAPI (ื™ื“ื•ืขื™ื ืœืฉืขื‘ืจ ื› - Swagger) ื• - JSON Schema.

* ื”ืขืจื›ื” ืžื‘ื•ืกืกืช ืขืœ ื‘ื“ื™ืงื•ืช ืฉืœ ืฆื•ื•ืช ืคื™ืชื•ื— ืคื ื™ืžื™ ืฉื‘ื•ื ื” ืืคืœื™ืงืฆื™ื•ืช ื‘ืกื‘ื™ื‘ืช ื™ื™ืฆื•ืจ.

ื ื•ืชื ื™ ื—ืกื•ืช

ื ื•ืชื ื™ ื—ืกื•ืช ืื—ืจื™ื

ื“ืขื•ืช

"[...] I'm using FastAPI a ton these days. [...] I'm actually planning to use it for all of my team's ML services at Microsoft. Some of them are getting integrated into the core Windows product and some Office products."

Kabir Khan - Microsoft (ref)

"We adopted the FastAPI library to spawn a REST server that can be queried to obtain predictions. [for Ludwig]"

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

"Netflix is pleased to announce the open-source release of our crisis management orchestration framework: Dispatch! [built with FastAPI]"

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

"Iโ€™m over the moon excited about FastAPI. Itโ€™s so fun!"

Brian Okken - Python Bytes podcast host (ref)

"Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted Hug to be - it's really inspiring to see someone build that."

Timothy Crosley - Hug creator (ref)

"If you're looking to learn one modern framework for building REST APIs, check out FastAPI [...] It's fast, easy to use and easy to learn [...]"

"We've switched over to FastAPI for our APIs [...] I think you'll like it [...]"

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

Typer, ื” - FastAPI ืฉืœ ืžืžืฉืงื™ ืฉื•ืจืช ืคืงื•ื“ื” (CLI).

ืื ืืชื ื‘ื•ื ื™ื ืืคืœื™ืงืฆื™ื™ืช CLI ืœืฉื™ืžื•ืฉ ื‘ืžืกื•ืฃ ื‘ืžืงื•ื ืžืžืฉืง ืจืฉืช, ื”ืขื™ืคื• ืžื‘ื˜ ืขืœ Typer.

Typer ื”ื™ื ืื—ื•ืชื” ื”ืงื˜ื ื” ืฉืœ FastAPI. ื•ืžื˜ืจืชื” ื”ื™ื ืœื”ื™ื•ืช ื” - FastAPI ืฉืœ ืžืžืฉืงื™ ืฉื•ืจืช ืคืงื•ื“ื”. โŒจ๏ธ ๐Ÿš€

ืชืœื•ื™ื•ืช

ืคื™ื™ืชื•ืŸ 3.6+

FastAPI ืขื•ืžื“ืช ืขืœ ื›ืชืคื™ ืขื ืงื™ื•ืช:

  • Starlette ืœื—ืœืงื™ ื”ืจืฉืช.
  • Pydantic ืœื—ืœืงื™ ื”ืžื™ื“ืข.

ื”ืชืงื ื”

$ pip install fastapi

---> 100%

ืชืฆื˜ืจื›ื• ื’ื ืฉืจืช ASGI ื›ื’ื•ืŸ Uvicorn ืื• Hypercorn.

$ pip install "uvicorn[standard]"

---> 100%

ื“ื•ื’ืžื

ืฆืจื• ืื•ืชื”

  • ืฆืจื• ืงื•ื‘ืฅ ื‘ืฉื main.py ืขื:
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}
ืื• ื”ืฉืชืžืฉื• ื‘ - async def...

ืื ื”ืงื•ื“ ืฉืœื›ื ืžืฉืชืžืฉ ื‘ - async / await, ื”ืฉืชืžืฉื• ื‘ - 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}

ืฉื™ืžื• ืœื‘:

ืื ืื™ื ื›ื ื™ื•ื“ืขื™ื, ื‘ื“ืงื• ืืช ืคืจืง "ืžืžื”ืจื™ื?" ืขืœ async ื• - await ื‘ืชื™ืขื•ื“.

ื”ืจื™ืฆื• ืื•ืชื”

ื”ืชื—ื™ืœื• ืืช ื”ืฉืจืช ืขื:

$ 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.
ืขืœ ื”ืคืงื•ื“ื” uvicorn main:app --reload...

ื”ืคืงื•ื“ื” uvicorn main:app ืžืชื™ื™ื—ืกืช ืœ:

  • main: ื”ืงื•ื‘ืฅ main.py (ืžื•ื“ื•ืœ ืคื™ื™ืชื•ืŸ).
  • app: ื”ืื•ื‘ื™ื™ืงื˜ ืฉื ื•ืฆืจ ื‘ืชื•ืš main.py ืขื ื”ืฉื•ืจื” app = FastAPI().
  • --reload: ื’ืจืžื• ืœืฉืจืช ืœื”ืชืืชื—ืœ ืœืื—ืจ ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื“. ืขืฉื• ื–ืืช ืจืง ื‘ืกื‘ื™ื‘ืช ืคื™ืชื•ื—.

ื‘ื“ืงื• ืื•ืชื”

ืคืชื—ื• ืืช ื”ื“ืคื“ืคืŸ ืฉืœื›ื ื‘ื›ืชื•ื‘ืช http://127.0.0.1:8000/items/5?q=somequery.

ืืชื ืชืจืื• ืชื’ื•ื‘ืช JSON:

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

ื›ื‘ืจ ื™ืฆืจืชื API ืฉ:

  • ืžืงื‘ืœ ื‘ืงืฉื•ืช HTTP ื‘ื ืชื™ื‘ื™ื / ื• - /items/{item_id}.
  • ืฉื ื™ ื” ื ืชื™ื‘ื™ื ืžืงื‘ืœื™ื ื‘ืงืฉื•ืช GET (ื™ื“ื•ืขื•ืช ื’ื ื›ืžืชื•ื“ื•ืช HTTP).
  • ื” ื ืชื™ื‘ /items/{item_id} ื›ื•ืœืœ *ืคืจืžื˜ืจ ื ืชื™ื‘_ item_id ืฉืืžื•ืจ ืœื”ื™ื•ืช int.
  • ื” ื ืชื™ื‘ /items/{item_id} *ืคืจืžื˜ืจ ืฉืื™ืœืชื_ ืื•ืคืฆื™ื•ื ืœื™ q.

ืชื™ืขื•ื“ API ืื™ื ื˜ืจืงื˜ื™ื‘ื™

ื›ืขืช ืคื ื• ืœื›ืชื•ื‘ืช http://127.0.0.1:8000/docs.

ืืชื ืชืจืื• ืืช ื”ืชื™ืขื•ื“ ื”ืื•ื˜ื•ืžื˜ื™ (ืžืกื•ืคืง ืขืœ ื™ื“ื™ Swagger UI):

Swagger UI

ืชื™ืขื•ื“ ืืœื˜ืจื ื˜ื™ื‘ื™

ื›ืขืช ืคื ื• ืœื›ืชื•ื‘ืช http://127.0.0.1:8000/redoc.

ืืชื ืชืจืื• ืชื™ืขื•ื“ ืืœื˜ืจื ื˜ื™ื‘ื™ (ืžืกื•ืคืง ืขืœ ื™ื“ื™ ReDoc):

ReDoc

ืฉื“ืจื•ื’ ืœื“ื•ื’ืžื

ื›ืขืช ืขืจื›ื• ืืช ื”ืงื•ื‘ืฅ main.py ื›ืš ืฉื™ื•ื›ืœ ืœืงื‘ืœ ื’ื•ืฃ ืžื‘ืงืฉืช PUT.

ื”ื’ื“ื™ืจื• ืืช ื”ื’ื•ืฃ ื‘ืขื–ืจืช ืจืžื–ื™ ื˜ื™ืคื•ืกื™ื ืกื˜ื ื“ืจื˜ื™ื™ื, ื”ื•ื“ื•ืช ืœ - Pydantic.

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}

ื”ืฉืจืช ืืžื•ืœ ืœื”ืชืืชื—ืœ ืื•ื˜ื•ืžื˜ื™ืช (ืžืื—ืจ ื•ื”ื•ืกืคืชื --reload ืœืคืงื•ื“ืช uvicorn ืฉืœืžืขืœื”).

ืฉื“ืจื•ื’ ื”ืชื™ืขื•ื“ ื”ืื™ื ื˜ืจืงื˜ื™ื‘ื™

ื›ืขืช ืคื ื• ืœื›ืชื•ื‘ืช http://127.0.0.1:8000/docs.

  • ื”ืชื™ืขื•ื“ ื”ืื•ื˜ื•ืžื˜ื™ ื™ืชืขื“ื›ืŸ, ื›ื•ืœืœ ื”ื’ื•ืฃ ื”ื—ื“ืฉ:

Swagger UI

  • ืœื—ืฆื• ืขืœ ื”ื›ืคืชื•ืจ "Try it out", ื”ื•ื ื™ืืคืฉืจ ืœื›ื ืœืžืœื ืืช ื”ืคืจืžื˜ืจื™ื ื•ืœืขื‘ื•ื“ ื™ืฉื™ืจื•ืช ืžื•ืœ ื” - API.

Swagger UI interaction

  • ืื—ืจ ื›ืš ืœื—ืฆื• ืขืœ ื”ื›ืคืชื•ืจ "Execute", ื”ืืชืจ ื™ืชืงืฉืจ ืขื ื” - API ืฉืœื›ื, ื™ืฉืœื— ืืช ื”ืคืจืžื˜ืจื™ื, ื™ืฉื™ื’ ืืช ื”ืชื•ืฆืื•ืช ื•ืื– ื™ืจืื” ืื•ืชืŸ ืขืœ ื”ืžืกืš:

Swagger UI interaction

ืฉื“ืจื•ื’ ื”ืชื™ืขื•ื“ ื”ืืœื˜ืจื ื˜ื™ื‘ื™

ื›ืขืช ืคื ื• ืœื›ืชื•ื‘ืช http://127.0.0.1:8000/redoc.

  • ื”ืชื™ืขื•ื“ ื”ืืœื˜ืจื ื˜ื™ื‘ื™ ื’ื ื™ืจืื” ืืช ืคืจืžื˜ืจ ื”ืฉืื™ืœืชื ื•ื”ื’ื•ืฃ ื”ื—ื“ืฉื™ื.

ReDoc

ืกื™ื›ื•ื

ืœืกื™ื›ื•ื, ืืชื ืžื›ืจื™ื–ื™ื ** ืคืขื ืื—ืช** ืขืœ ื˜ื™ืคื•ืกื™ ื”ืคืจืžื˜ืจื™ื, ื’ื•ืฃ ื•ื›ื•' ื›ืคืจืžื˜ืจื™ื ืœืคื•ื ืงืฆื™ื”.

ืืชื ืขื•ืฉื™ื ืืช ื–ื” ืขื ื˜ื™ืคื•ืกื™ ืคื™ื™ืชื•ืŸ ืžื•ื“ืจื ื™ื™ื.

ืืชื ืœื ืฆืจื™ื›ื™ื ืœืœืžื•ื“ ืชื—ื‘ื™ืจ ื—ื“ืฉ, ืžืชื•ื“ื•ืช ืื• ืžื—ืœืงื•ืช ืฉืœ ืกืคืจื™ื™ื” ืกืคื™ืฆื™ืคื™ืช, ื•ื›ื•'

ืจืง ืคื™ื™ืชื•ืŸ 3.6+ ืกื˜ื ื“ืจื˜ื™.

ืœื“ื•ื’ืžื, ืœ - int:

item_id: int

ืื• ืœืžื•ื“ืœ Item ืžื•ืจื›ื‘ ื™ื•ืชืจ:

item: Item

...ื•ืขื ื”ื›ืจื–ืช ื”ื˜ื™ืคื•ืก ื”ืื—ืช ื”ื–ื• ืืชื ืžืงื‘ืœื™ื:

  • ืชืžื™ื›ืช ืขื•ืจืš, ื›ื•ืœืœ:
    • ื”ืฉืœืžื•ืช.
    • ื‘ื“ื™ืงืช ื˜ื™ืคื•ืกื™ื.
  • ืื™ืžื•ืช ืžื™ื“ืข:
    • ืฉื’ื™ืื•ืช ื‘ืจื•ืจื•ืช ื•ืื˜ื•ืžื˜ื™ื•ืช ื›ืืฉืจ ืžื•ื›ื ืก ืžื™ื“ืข ืœื ื—ื•ืงื™ .
    • ืื™ืžื•ืช ืืคื™ืœื• ืœืื•ื‘ื™ื™ืงื˜ื™ JSON ืžืงื•ื ื ื™ื.
  • ื”ืžืจื” ืฉืœ ืžื™ื“ืข ืงืœื˜: ื”ืžืจื” ืฉืœ ืžื™ื“ืข ืฉืžื’ื™ืข ืžื”ืจืฉืช ืœืžื™ื“ืข ื•ื˜ื™ืคื•ืกื™ื ืฉืœ ืคื™ื™ืชื•ืŸ. ืงื•ืจื ืž:
    • JSON.
    • ืคืจืžื˜ืจื™ ื ืชื™ื‘.
    • ืคืจืžื˜ืจื™ ืฉืื™ืœืชื.
    • ืขื•ื’ื™ื•ืช.
    • ื›ื•ืชืจื•ืช.
    • ื˜ืคืกื™ื.
    • ืงื‘ืฆื™ื.
  • ื”ืžืจื” ืฉืœ ืžื™ื“ืข ืคืœื˜: ื”ืžืจื” ืฉืœ ืžื™ื“ืข ื•ื˜ื™ืคื•ืกื™ื ืžืคื™ื™ืชื•ืŸ ืœืžื™ื“ืข ืจืฉืช (ื› - JSON):
    • ื”ืžื™ืจื• ื˜ื™ืคื•ืกื™ ืคื™ื™ืชื•ืŸ (str, int, float, bool, list, etc).
    • ืขืฆืžื™ datetime.
    • ืขืฆืžื™ UUID.
    • ืžื•ื“ืœื™ ื‘ืกื™ืกื™ ื ืชื•ื ื™ื.
    • ...ื•ืจื‘ื™ื ืื—ืจื™ื.
  • ืชื™ืขื•ื“ API ืื•ื˜ื•ืžื˜ื™ ื•ืื™ื ื˜ืจืงื˜ื™ื‘ื™ืช ื›ื•ืœืœ ืฉืชื™ ืืœื˜ืจื ื˜ื™ื‘ื•ืช ืœืžืžืฉืง ื”ืžืฉืชืžืฉ:
    • Swagger UI.
    • ReDoc.

ื‘ื—ื–ืจื” ืœื“ื•ื’ืžืืช ื”ืงื•ื“ ื”ืงื•ื“ืžืช, FastAPI ื™ื“ืื’:

  • ืœืืžืช ืฉื™ืฉ item_id ื‘ื ืชื™ื‘ ื‘ื‘ืงืฉื•ืช GET ื• - PUT.
  • ืœืืžืช ืฉื” - item_id ื”ื•ื ืžื˜ื™ืคื•ืก int ื‘ื‘ืงืฉื•ืช GET ื• - PUT.
    • ืื ื”ื•ื ืœื, ื”ืœืงื•ื— ื™ืจืื” ืฉื’ื™ืื” ื‘ืจื•ืจื” ื•ืฉื™ืžื•ืฉื™ืช.
  • ืœื‘ื“ื•ืง ื”ืื ืงื™ื™ื ืคืจืžื˜ืจ ืฉืื™ืœืชื ื‘ืฉื q (ืงืจื™ http://127.0.0.1:8000/items/foo?q=somequery) ืœื‘ืงืฉื•ืช GET.
    • ืžืื—ืจ ื•ื”ืคืจืžื˜ืจ q ืžื•ื’ื“ืจ ืขื = None, ื”ื•ื ืื•ืคืฆื™ื•ื ืœื™.
    • ืœื•ืœื ื” - None ื”ื•ื ื”ื™ื” ื—ื•ื‘ื” (ื›ืžื• ื”ื’ื•ืฃ ื‘ืžืงืจื” ืฉืœ PUT).
  • ืœื‘ืงืฉื•ืช PUT ืœื ืชื™ื‘ /items/{item_id}, ืœืงืจื•ื ืืช ื’ื•ืฃ ื”ื‘ืงืฉื” ื› - JSON:
    • ืœืืžืช ืฉื”ื•ื ื›ื•ืœืœ ืืช ืžืืคื™ื™ืŸ ื”ื—ื•ื‘ื” name ืฉืืžื•ืจ ืœื”ื™ื•ืช ืžื˜ื™ืคื•ืก str.
    • ืœืืžืช ืฉื”ื•ื ื›ื•ืœืœ ืืช ืžืืคื™ื™ืŸ ื”ื—ื•ื‘ื” price ืฉื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžื˜ื™ืคื•ืก float.
    • ืœื‘ื“ื•ืง ื”ืื ื”ื•ื ื›ื•ืœืœ ืืช ืžืืคื™ื™ืŸ ื”ืจืฉื•ืช is_offer ืฉืืžื•ืจ ืœื”ื™ื•ืช ืžื˜ื™ืคื•ืก bool, ืื ื”ื•ื ื ืžืฆื.
    • ื›ืœ ื–ื” ื™ืขื‘ื•ื“ ื’ื ืœืื•ื‘ื™ื™ืงื˜ JSON ืžืงื•ื ืŸ.
  • ืœื”ืžื™ืจ ืž - JSON ื•ืœ- JSON ืื•ื˜ื•ืžื˜ื™ืช.
  • ืœืชืขื“ ื”ื›ืœ ื‘ืืžืฆืขื•ืช OpenAPI, ืชื™ืขื•ื“ ืฉื‘ื• ื™ื•ื›ืœื• ืœื”ืฉืชืžืฉ:
    • ืžืขืจื›ื•ืช ืชื™ืขื•ื“ ืื™ื ื˜ืจืงื˜ื™ื‘ื™ื•ืช.
    • ืžืขืจื›ื•ืช ื™ื™ืฆื•ืจ ืงื•ื“ ืื•ื˜ื•ืžื˜ื™ื•ืช, ืœื”ืจื‘ื” ืฉืคื•ืช.
  • ืœืกืคืง ื™ืฉื™ืจื•ืช ืฉืชื™ ืžืขืจื›ื•ืช ืชื™ืขื•ื“ ืจืฉืชื™ื•ืช.

ืจืง ื’ืจื“ื ื• ืืช ืงืฆื” ื”ืงืจื—ื•ืŸ, ืื‘ืœ ื›ื‘ืจ ื™ืฉ ืœื›ื ืจืขื™ื•ืŸ ืฉืœ ืื™ืš ื”ื›ืœ ืขื•ื‘ื“.

ื ืกื• ืœืฉื ื•ืช ืืช ื”ืฉื•ืจื”:

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

...ืž:

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

...ืœ:

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

...ื•ืจืื• ืื™ืš ื”ืขื•ืจืš ืฉืœื›ื ืžืฉืœื™ื ืืช ื”ืžืืคื™ื™ื ื™ื ื•ื™ื•ื“ืข ืืช ื”ื˜ื™ืคื•ืกื™ื ืฉืœื”ื:

editor support

ืœื“ื•ื’ืžื ื™ื•ืชืจ ืฉืœืžื” ืฉื›ื•ืœืœืช ืขื•ื“ ืชื›ื•ื ื•ืช, ืจืื• ืืช ื”ืžื“ืจื™ืš - ืœืžืฉืชืžืฉ.

ื”ืชืจืืช ืกืคื•ื™ืœืจื™ื: ื”ืžื“ืจื™ืš - ืœืžืฉืชืžืฉ ื›ื•ืœืœ:

  • ื”ื›ืจื–ื” ืขืœ ืคืจืžื˜ืจื™ื ืžืžืงื•ืจื•ืช ืื—ืจื™ื ื•ืฉื•ื ื™ื ื›ื’ื•ืŸ: ื›ื•ืชืจื•ืช, ืขื•ื’ื™ื•ืช, ื˜ืคืกื™ื ื• - ืงื‘ืฆื™ื.
  • ืื™ืš ืœืงื‘ื•ืข ืžื’ื‘ืœื•ืช ืื™ืžื•ืช ื‘ืขื–ืจืช maximum_length ืื• regex.
  • ื“ืจืš ื—ื–ืงื” ื•ืงืœื” ืœื”ืฉืชืžืฉ ื‘ื”ื–ืจืงืช ืชืœื•ื™ื•ืช.
  • ืื‘ื˜ื—ื” ื•ื”ืชืืžืชื•ืช, ื›ื•ืœืœ ืชืžื™ื›ื” ื‘ - OAuth2 ืขื JWT ื•ื”ืชืืžืชื•ืช HTTP Basic.
  • ื˜ื›ื ื™ืงื•ืช ืžืชืงื“ืžื•ืช (ืื‘ืœ ืงืœื•ืช ื‘ืื•ืชื” ืžื™ื“ื”) ืœื”ื›ืจื–ืช ืื•ื‘ื™ื™ืงื˜ื™ JSON ืžืงื•ื ื ื™ื (ืชื•ื“ื•ืช ืœ - Pydantic).
  • ืื™ื ื˜ืจืงืฆื™ื” ืขื GraphQL ื“ืจืš Strawberry ื•ืกืคืจื™ื•ืช ืื—ืจื•ืช.
  • ืชื›ื•ื ื•ืช ื ื•ืกืคื•ืช ืจื‘ื•ืช (ืชื•ื“ื•ืช ืœ - Starlette) ื›ื’ื•ืŸ:
    • WebSockets
    • ื‘ื“ื™ืงื•ืช ืงืœื•ืช ื‘ืžื™ื•ื—ื“ ืžื‘ื•ืกืกื•ืช ืขืœ requests ื• - pytest
    • CORS
    • Cookie Sessions
    • ...ื•ืขื•ื“.

ื‘ื™ืฆื•ืขื™ื

ื‘ื“ื™ืงื•ืช ืขืฆืžืื™ื•ืช ืฉืœ TechEmpower ื”ืจืื• ืฉืืคืœื™ืงืฆื™ื•ืช FastAPI ืฉืจืฆื•ืช ืชื—ืช Uvicorn ื”ืŸ ืžืชืฉืชื™ื•ืช ื”ืคื™ื™ืชื•ืŸ ื”ืžื”ื™ืจื•ืช ื‘ื™ื•ืชืจ, ืจืง ืžืชื—ืช ืœ - Starlette ื• - Uvicorn ืขืฆืžืŸ (ืฉ - FastAPI ืžื‘ื•ืกืกืช ืขืœื™ื”ืŸ). (*)

ื›ื“ื™ ืœื”ื‘ื™ืŸ ืขื•ื“ ืขืœ ื”ื ื•ืฉื, ืจืื• ืืช ื”ืคืจืง Benchmarks.

ืชืœื•ื™ื•ืช ืื•ืคืฆื™ื•ื ืœื™ื•ืช

ื‘ืฉื™ืžื•ืฉ Pydantic:

  • email_validator - ืœืื™ืžื•ืช ื›ืชื•ื‘ื•ืช ืื™ืžื™ื™ืœ.

ื‘ืฉื™ืžื•ืฉ Starlette:

  • httpx - ื“ืจื•ืฉ ืื ื‘ืจืฆื•ื ื›ื ืœื”ืฉืชืžืฉ ื‘ - TestClient.
  • jinja2 - ื“ืจื•ืฉ ืื ื‘ืจืฆื•ื ื›ื ืœื”ืฉืชืžืฉ ื‘ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืชืฆื•ืจืช ื”ื˜ืžืคืœื™ื™ื˜ื™ื.
  • python-multipart - ื“ืจื•ืฉ ืื ื‘ืจืฆื•ื ื›ื ืœืชืžื•ืš ื‘ "ืคืจืกื•ืจ" ื˜ืคืกื™ื, ื‘ืืฆืžืขื•ืช request.form().
  • itsdangerous - ื“ืจื•ืฉ ืื ื‘ืจืฆื•ื ื›ื ืœื”ืฉืชืžืฉ ื‘ - SessionMiddleware.
  • pyyaml - ื“ืจื•ืฉ ืื ื‘ืจืฆื•ื ื›ื ืœื”ืฉืชืžืฉ ื‘ - SchemaGenerator ืฉืœ Starlette (ื›ื ืจืื” ืฉืืชื ืœื ืฆืจื™ื›ื™ื ืืช ื–ื” ืขื FastAPI).
  • ujson - ื“ืจื•ืฉ ืื ื‘ืจืฆื•ื ื›ื ืœื”ืฉืชืžืฉ ื‘ - UJSONResponse.

ื‘ืฉื™ืžื•ืฉ FastAPI / Starlette:

  • uvicorn - ืœืฉืจืช ืฉื˜ื•ืขืŸ ื•ืžื’ื™ืฉ ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื›ื.
  • orjson - ื“ืจื•ืฉ ืื ื‘ืจืฆื•ื ื›ื ืœื”ืฉืชืžืฉ ื‘ - ORJSONResponse.

ืชื•ื›ืœื• ืœื”ืชืงื™ืŸ ืืช ื›ืœ ืืœื• ื‘ืืžืฆืขื•ืช pip install "fastapi[all]".

ืจืฉื™ื•ืŸ

ื”ืคืจื•ื™ืงื˜ ื”ื–ื” ื”ื•ื ืชื—ืช ื”ืชื ืื™ื ืฉืœ ืจืฉื™ื•ืŸ MIT.