Files
fastapi/docs/bn/docs/index.md
2024-10-20 20:20:23 +01:00

30 KiB
Raw Blame History

FastAPI

FastAPI āωāĻšā§āϚāĻ•ā§āώāĻŽāϤāĻž āϏāĻŽā§āĻĒāĻ¨ā§āύ, āϏāĻšāĻœā§‡ āĻļ⧇āĻ–āĻžāϰ āĻāĻŦāĻ‚ āĻĻā§āϰ⧁āϤ āϕ⧋āĻĄ āĻ•āϰ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻĢā§āϰāĻžāĻŽāĻ“ā§ŸāĻžāĻ°ā§āĻ•āĨ¤

Test Coverage Package version


āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ: https://fastapi.tiangolo.com

āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ: https://github.com/fastapi/fastapi


FastAPI āĻāĻ•āϟāĻŋ āφāϧ⧁āύāĻŋāĻ•, āĻĻā§āϰ⧁āϤ ( āĻŦ⧇āĻļāĻŋ āĻ•ā§āώāĻŽāϤāĻž ) āϏāĻŽā§āĻĒāĻ¨ā§āύ, Python 3.6+ āĻĻāĻŋā§Ÿā§‡ API āϤ⧈āϰāĻŋāϰ āϜāĻ¨ā§āϝ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĒāĻžāχāĻĨāύ āϟāĻžāχāĻĒ āχāĻ™ā§āĻ—āĻŋāϤ āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ“āϝāĻŧ⧇āĻŦ āĻĢā§āϰ⧇āĻŽāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĨ¤

āĻāϰ āĻŽā§‚āϞ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϗ⧁āϞ⧋ āĻšāϞāσ

  • āĻ—āϤāĻŋ: āĻāϟāĻŋ NodeJS āĻāĻŦāĻ‚ Go āĻāϰ āĻŽāϤ āĻ•āĻžāĻ°ā§āϝāĻ•ā§āώāĻŽāϤāĻž āϏāĻŽā§āĻĒāĻ¨ā§āύ (Starlette āĻāĻŦāĻ‚ Pydantic āĻāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇)āĨ¤ āĻĒāĻžāχāĻĨāύ āĻāϰ āĻĻā§āϰ⧁āϤāϤāĻŽ āĻĢā§āϰ⧇āĻŽāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋāĨ¤

  • āĻĻā§āϰ⧁āϤ āϕ⧋āĻĄ āĻ•āϰāĻž:āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϤ⧈āϰāĻŋāϰ āĻ—āϤāĻŋ ⧍ā§Ļā§Ļ% āĻĨ⧇āϕ⧇ ā§Šā§Ļā§Ļ% āĻŦ⧃āĻĻā§āϧāĻŋ āĻ•āϰ⧇⧎ *

  • āĻ¸ā§āĻŦāĻ˛ā§āĻĒ bugs: āĻŽāĻžāύ⧁āĻŦ (āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ) āϏ⧃āĻˇā§āϟ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻĒā§āϰāĻžāϝāĻŧ ā§Ēā§Ļ% āĻšā§āϰāĻžāϏ āĻ•āϰ⧇āĨ¤ *

  • āĻ¸ā§āĻŦāĻœā§āĻžāĻžāϤ: āĻĻ⧁āĻ°ā§āĻĻāĻžāĻ¨ā§āϤ āĻāĻĄāĻŋāϟāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ Completion āύāĻžāĻŽā§‡āĻ“ āĻĒāϰāĻŋāϚāĻŋāϤāĨ¤ āĻĻā§āϰ⧁āϤ āĻĄāĻŋāĻŦāĻžāĻ— āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

  • āϏāĻšāϜ: āĻāϟāĻŋ āĻāĻŽāύ āĻ­āĻžāĻŦ⧇ āϏāϜāĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇ āϝ⧇āύ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ āĻĒā§œā§‡ āϏāĻšāĻœā§‡ āĻļ⧇āĻ–āĻž āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

  • āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ: āϕ⧋āĻĄ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻ•āĻŽāĻžāύ⧋āϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ, bug āĻ•āĻŽāĻžā§Ÿ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ˜ā§‹āώāĻŖāĻž āĻĨ⧇āϕ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĢāĻŋāϚāĻžāϰ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§Ÿ āĨ¤

  • āĻœā§‹āϰāĻžāϞ⧋: āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ­āĻžāĻŦ⧇ āϤ⧈āϰāĻŋ āĻ•ā§āϰāĻŋ⧟āĻžāĻļā§€āϞ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āύāĻĨāĻŋ (documentation) āϏāĻš āĻ‰ā§ŽāĻĒāĻžāĻĻāύ āωāĻĒāϝ⧋āĻ—āĻŋ (Production-ready) āϕ⧋āĻĄ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§ŸāĨ¤

  • āĻŽāĻžāύ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ•: āĻāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ OpenAPI (āϝāĻž āĻĒ⧁āĻ°ā§āĻŦ⧇ Swagger āύāĻžāĻŽā§‡ āĻĒāϰāĻŋāϚāĻŋāϤ āĻ›āĻŋāϞ) āĻāĻŦāĻ‚ JSON Schema āĻāϰ āφāĻĻāĻ°ā§āĻļ⧇āϰ āĻŽāĻžāύ⧇āϰ āĻ“āĻĒāϰ

* āĻ‰ā§ŽāĻĒāĻžāĻĻāύāĻŽā§āĻ–āĻŋ āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻŦāĻžāύāĻžāύ⧋āϰ āĻāĻ• āĻĻāϞ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ āĻāϰ āĻŽāϤāĻžāĻŽāϤ āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻĢāϞāĻžāĻĢāϞāĨ¤

āĻ¸ā§āĻĒāύāϏāϰ āĻ—āĻŖ

{% if sponsors %} {% for sponsor in sponsors.gold -%} {% endfor -%} {%- for sponsor in sponsors.silver -%} {% endfor %} {% endif %}

āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ¸ā§āĻĒāύāϏāϰ āĻ—āĻŖ

āĻŽāϤāĻžāĻŽāϤ āϏāĻŽā§‚āĻš

"āφāĻŽāĻŋ āφāϜāĻ•āĻžāϞ FastAPI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻ›āĻŋāĨ¤ [...] āφāĻŽāϰāĻž āĻ­āĻžāĻŦāĻ›āĻŋ āĻŽāĻžāχāĻ•ā§āϰ⧋āϏāĻĢā§āĻŸā§‡ ML āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ āϏāĻ•āϞ āĻĻāϞ⧇āϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦāĨ¤ āϝāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻ•āĻŋāϛ⧁ āĻĒāĻŖā§āϝ Windows āĻ āϏāĻ‚āϝ⧋āϝāύ āĻšā§Ÿ āĻāĻŦāĻ‚ āĻ•āĻŋāϛ⧁ Office āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āϝāύ āĻšāĻšā§āϛ⧇āĨ¤"

āĻ•āĻŦāĻŋāϰ āĻ–āĻžāύ - āĻŽāĻžāχāĻ•ā§āϰ⧋āϏāĻĢā§āĻŸā§‡ (ref)

"āφāĻŽāϰāĻž FastAPI āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĻ›āĻŋ āĻāĻ•āϟāĻŋ REST āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇, āϝāĻž āĻ­āĻŦāĻŋāĻˇā§āϝāĻĻā§āĻŦāĻžāĻŖā§€ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ [āϞ⧁āĻĄāωāχāϗ⧇āϰ āϜāĻ¨ā§āϝ]"

āĻĒāĻŋāϝāĻŧ⧇āϰ⧋ āĻŽā§‹āϞāĻŋāύ⧋, āχāϝāĻŧāĻžāϰ⧋āĻ¸ā§āϞāĻžāĻ­ āĻĻ⧁āĻĻāĻŋāύ, āĻāĻŦāĻ‚ āϏāĻžāχ āϏ⧁āĻŽāĻ¨ā§āĻĨ āĻŽāĻŋāϰāĻŋāϝāĻŧāĻžāϞāĻž - āωāĻŦāĻžāϰ (ref)

"Netflix āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āϰāĻžāχāϏāĻŋāϏ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āĻ…āĻ°ā§āϕ⧇āĻ¸ā§āĻŸā§āϰ⧇āĻļāύ āĻĢā§āϰ⧇āĻŽāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•: āĻĄāĻŋāϏāĻĒā§āϝāĻžāϚ āĻāϰ āĻ“āĻĒ⧇āύ āϏ⧋āĻ°ā§āϏ āϰāĻŋāϞāĻŋāϜ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāϤ⧇ āĻĒ⧇āϰ⧇ āφāύāĻ¨ā§āĻĻāĻŋāϤ! [āϝāĻžāĻ•āĻŋāύāĻž FastAPI āĻĻāĻŋāϝāĻŧ⧇ āύāĻŋāĻ°ā§āĻŽāĻŋāϤ]"

āϕ⧇āĻ­āĻŋāύ āĻ—ā§āϞāĻŋāϏāύ, āĻŽāĻžāĻ°ā§āĻ• āĻ­āĻŋāϞāĻžāύ⧋āĻ­āĻž, āĻĢāϰ⧇āĻ¸ā§āϟ āĻŽāύāϏ⧇āύ - āύ⧇āϟāĻĢā§āϞāĻŋāĻ•ā§āϏ (ref)

"āφāĻŽāĻŋ FastAPI āύāĻŋāϝāĻŧ⧇ āϚāĻžāρāĻĻ⧇āϰ āϏāĻŽāĻžāύ āĻ‰ā§ŽāϏāĻžāĻšāĻŋāϤāĨ¤ āĻāϟāĻŋ āϖ⧁āĻŦāχ āĻŽāϜāĻžāϰ!"

āĻŦā§āϰāĻžāϝāĻŧāĻžāύ āĻ“āϕ⧇āύ - āĻĒāĻžāχāĻĨāύ āĻŦāĻžāχāϟāϏ āĻĒāĻĄāĻ•āĻžāĻ¸ā§āϟ āĻšā§‹āĻ¸ā§āϟ (ref)

"_āϏāĻ¤ā§āϝāĻŋāχ, āφāĻĒāύāĻŋ āϝāĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧇āϛ⧇āύ āϤāĻž āϖ⧁āĻŦ āĻŽāϜāĻŦ⧁āϤ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻĒā§‚āĻ°ā§āύ⧎ āĻ…āύ⧇āĻ• āωāĻĒāĻžāϝāĻŧ⧇, āφāĻŽāĻŋ āϝāĻž Hug āĻ āĻ•āϰāϤ⧇ āĻšā§‡ā§Ÿā§‡āĻ›āĻŋāϞāĻžāĻŽ - āϤāĻž āĻ•āĻžāωāϕ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĻ⧇āϖ⧇ āφāĻŽāĻŋ āϏāĻ¤ā§āϝāĻŋāχ āĻ…āύ⧁āĻĒā§āϰāĻžāύāĻŋāϤ⧎_"

āϟāĻŋāĻŽā§‹āĻĨāĻŋ āĻ•ā§āϰāϏāϞ⧇ - Hug āĻ¸ā§āϰāĻˇā§āϟāĻž (ref)

"āφāĻĒāύāĻŋ āϝāĻĻāĻŋ REST API āϤ⧈āϰāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āφāϧ⧁āύāĻŋāĻ• āĻĢā§āϰ⧇āĻŽāĻ“ā§ŸāĻžāĻ°ā§āĻ• āĻļāĻŋāĻ–āϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ FastAPI āĻĻ⧇āϖ⧁āύ [...] āĻāϟāĻŋ āĻĻā§āϰ⧁āϤ, āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϏāĻšāϜ āĻāĻŦāĻ‚ āĻļāĻŋāĻ–āϤ⧇āĻ“ āϏāĻšāϜ [...]_"

"āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ APIs [...] āĻāϰ āϜāĻ¨ā§āϝ FastAPI- āϤ⧇ āĻāϏ⧇āĻ›āĻŋ [...] āφāĻŽāĻŋ āĻŽāύ⧇ āĻ•āϰāĻŋ āφāĻĒāύāĻŋāĻ“ āĻāϟāĻŋ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāĻŦ⧇āύ [...]"

āχāύ⧇āϏ āĻŽāĻ¨ā§āϟāĻžāύāĻŋ - āĻŽā§āϝāĻžāĻĨāĻŋāω āĻšā§‹āύāĻŋāĻŦāĻžāϞ - Explosion AI āĻĒā§āϰāϤāĻŋāĻˇā§āĻ āĻžāϤāĻž - spaCy āĻ¸ā§āϰāĻˇā§āϟāĻž (ref) - (ref)

Typer, CLI āĻāϰ āϜāĻ¨ā§āϝ FastAPI

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ CLI āĻ…ā§āϝāĻžāĻĒ āĻŦāĻžāύāĻžāϤ⧇ āϚāĻžāύ, āϝāĻž āĻ•āĻŋāύāĻž āĻ“ā§Ÿā§‡āĻŦ API āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻŦ⧇, āϤāĻžāĻšāϞ⧇ āĻĻ⧇āϖ⧁āύTyper.

āϟāĻžāχāĻĒāĻžāϰ āĻšāϞ FastAPI āĻāϰ āϛ⧋āϟ āĻ­āĻžāĻ‡ā§Ÿā§‡āϰ āĻŽāϤāĨ¤ āĻāĻŦāĻ‚ āĻāϟāĻŋāϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ āĻ›āĻŋāϞ CLIs āĻāϰ FastAPI āĻšāĻ“ā§ŸāĻžāĨ¤ âŒ¨ī¸ 🚀

āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āϗ⧁āϞ⧋

Python 3.7+

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: app = FastAPI() āϞāĻžāχāύ āĻĻāĻŋāϝāĻŧ⧇ main.py āĻāϰ āĻ­āĻŋāϤāϰ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāĨ¤
  • --reload: āϕ⧋āĻĄ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āĻĒāϰ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύāĨ¤ āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āĻāϰ āϏāĻŽā§Ÿ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤

āĻāϟāĻž āĻšā§‡āĻ• āĻ•āϰ⧁āύ

āφāĻĒāύāĻžāϰ āĻŦā§āϰāĻžāωāϜāĻžāϰ āϖ⧁āϞ⧁āύ http://127.0.0.1:8000/items/5?q=somequery āĻāĨ¤

āφāĻĒāύāĻŋ JSON āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ:

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

āφāĻĒāύāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ API āϤ⧈āϰāĻŋ āĻ•āϰ⧇āϛ⧇āύ āϝāĻž:

  • / āĻāĻŦāĻ‚ /items/{item_id} paths āĻ HTTP āĻ…āύ⧁āϰ⧋āϧ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤
  • āωāĻ­āϝāĻŧ pathāχ GET āĻ…āĻĒāĻžāϰ⧇āĻļāύ āύ⧇āϝāĻŧ ( āϝāĻž HTTP methods āύāĻžāĻŽā§‡āĻ“ āĻĒāϰāĻŋāϚāĻŋāϤ)āĨ¤
  • path /items/{item_id}-āĻ āĻāĻ•āϟāĻŋ path āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ item_id āφāϛ⧇ āϝāĻž āĻ•āĻŋāύāĻž int āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤
  • path /items/{item_id}-āĻāϰ āĻāĻ•āϟāĻŋ āϐāĻšā§āĻ›āĻŋāĻ• str query āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ q āφāϛ⧇āĨ¤

āĻ•ā§āϰāĻŋ⧟āĻžāĻļā§€āϞ API āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ

āĻāĻ–āύ āϝāĻžāύ http://127.0.0.1:8000/docs.

āφāĻĒāύāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•ā§āϰāĻŋ⧟āĻžāĻļā§€āϞ API āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ (Swagger UI āĻĒā§āϰāĻĻāĻ¤ā§āϤ):

Swagger UI

āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ API āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ

āĻāĻŦāĻ‚ āĻāĻ–āύ http://127.0.0.1:8000/redoc āĻ āϝāĻžāύ.

āφāĻĒāύāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ (ReDoc āĻĒā§āϰāĻĻāĻ¤ā§āϤ):

ReDoc

āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ āφāĻĒāĻ—ā§āϰ⧇āĻĄ

āĻāĻ–āύ main.py āĻĢāĻžāχāϞāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ āϝ⧇āύ āĻāϟāĻŋ PUT āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ āĻĨ⧇āϕ⧇ āĻŦāĻĄāĻŋ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

Python āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ, 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}

āϏāĻžāĻ°ā§āĻ­āĻžāϰāϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϞ⧋āĻĄ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ (āĻ•āĻžāϰāĻŖ āφāĻĒāύāĻŋ āωāĻĒāϰ⧇āϰ uvicorn āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡ --reload āϝ⧋āĻ— āĻ•āϰ⧇āϛ⧇āύ)āĨ¤

āĻ•ā§āϰāĻŋ⧟āĻžāĻļā§€āϞ API āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ āωāĻ¨ā§āύ⧀āϤāĻ•āϰāĻŖ

āĻāĻ–āύ http://127.0.0.1:8000/docs āĻāĻĄāĻĄā§āϰ⧇āϏ⧇ āϝāĻžāύ.

  • āĻ•ā§āϰāĻŋ⧟āĻžāĻļā§€āϞ API āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋāϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āωāĻ¨ā§āύ⧀āϤ āĻšāϝ⧇ āϝāĻžāĻŦ⧇, āύāϤ⧁āύ āĻŦāĻĄāĻŋ āϏāĻš:

Swagger UI

  • "Try it out" āĻŦāĻžāϟāύ⧇ āϚāĻžāĻĒ⧁āύ, āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻĒ⧇āϰāĻžāĻŽāĻŋāϟāĻžāϰāϗ⧁āϞ⧋ āĻĒā§‚āϰāĻŖ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ API āĻāϰ āϏāĻžāĻĨ⧇ āϏāϰāĻžāϏāϰāĻŋ āĻ•ā§āϰāĻŋ⧟āĻž-āĻ•āϞāĻžāĻĒ āĻ•āϰāϤ⧇ āĻĻāĻŋāĻŦ⧇:

Swagger UI interaction

  • āϤāĻžāϰāĻĒāϰ⧇ "Execute" āĻŦāĻžāϟāύ⧇ āϚāĻžāĻĒ⧁āύ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āφāĻĒāύāĻžāϰ API āĻāϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰāĻŦ⧇, āĻĒ⧇āϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĒāĻžāĻ āĻžāĻŦ⧇, āĻĢāϞāĻžāĻĢāϞāϗ⧁āϞāĻŋ āĻĒāĻžāĻŦ⧇ āĻāĻŦāĻ‚ āϏ⧇āϗ⧁āϞāĻŋ āĻĒāĻ°ā§āϰāĻĻāĻžā§Ÿ āĻĻ⧇āĻ–āĻžāĻŦ⧇:

Swagger UI interaction

āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ API āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ āφāĻĒāĻ—ā§āϰ⧇āĻĄ

āĻāĻŦāĻ‚ āĻāĻ–āύ http://127.0.0.1:8000/redoc āĻ āϝāĻžāύāĨ¤

  • āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋāϤ⧇āĻ“ āύāϤ⧁āύ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻāĻŦāĻ‚ āĻŦāĻĄāĻŋ āĻĒā§āϰāϤāĻŋāĻĢāϞāĻŋāϤ āĻšāĻŦ⧇:

ReDoc

āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤāĻ•āϰāĻŖ

āϏāĻ‚āĻ•ā§āώ⧇āĻĒ⧇, āφāĻĒāύāĻŋ āĻļ⧁āϧ⧁ āĻāĻ•āĻŦāĻžāϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ⧇āϰ āϧāϰāύ, āĻŦāĻĄāĻŋ āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰ⧇āύāĨ¤

āφāĻĒāύāĻŋ āϏ⧇āϟāĻŋ āφāϧ⧁āύāĻŋāĻ• āĻĒāĻžāχāĻĨāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āϰ⧇āύāĨ¤

āφāĻĒāύāĻžāϕ⧇ āύāϤ⧁āύ āĻ•āϰ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϕ⧋āύ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϰ āĻŦāĻžāĻ•ā§āϝ āĻ—āĻ āύ, āĻĢāĻžāĻ‚āĻļāύ āĻŦāĻž āĻ•ā§āϞāĻžāϏ āĻ•āĻŋāϛ⧁āχ āĻļāĻŋāĻ–āϤ⧇ āĻšāĻšā§āϛ⧇ āύāĻžāĨ¤

āĻļ⧁āϧ⧁āχ āφāϧ⧁āύāĻŋāĻ• Python 3.6+

āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, int āĻāϰ āϜāĻ¨ā§āϝ:

item_id: int

āĻ…āĻĨāĻŦāĻž āφāϰāĻ“ āϜāϟāĻŋāϞ Item āĻŽāĻĄā§‡āϞ⧇āϰ āϜāĻ¨ā§āϝ:

item: Item

...āĻāĻŦāĻ‚ āϏ⧇āχ āĻāĻ•āχ āĻ˜ā§‹āώāĻŖāĻžāϰ āϏāĻžāĻĨ⧇ āφāĻĒāύāĻŋ āĻĒāĻžāĻŦ⧇āύ:

  • āĻāĻĄāĻŋāϟāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ, āϝ⧇āĻŽāύ

    • āϏāĻŽāĻžāĻĒā§āϤāĻŋāĨ¤
    • āϧāϰāĻŖ āϝāĻžāϚāĻžāχ
  • āϤāĻĨā§āϝ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ:

    • āĻĄā§‡āϟāĻž āĻ…āĻŦ⧈āϧ āĻšāϞ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻžāĨ¤
    • āĻāĻŽāύāĻ•āĻŋ āĻ—āĻ­ā§€āϰāĻ­āĻžāĻŦ⧇ āύ⧇āĻ¸ā§āϟ āĻ•āϰāĻž JSON āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻŦ⧈āϧāϤāĻžāĨ¤
  • āĻĒā§āϰ⧇āϰāĻŋāϤ āϤāĻĨā§āϝ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ: āϝāĻž āύ⧇āϟāĻ“ā§ŸāĻžāĻ°ā§āĻ• āĻĨ⧇āϕ⧇ āĻĒāĻžāχāĻĨāύ⧇āϰ āϤāĻĨā§āϝ āĻāĻŦāĻ‚ āϧāϰāύ⧇ āφāϏ⧇, āĻāĻŦāĻ‚ āϏ⧇āĻ–āĻžāύ āĻĨ⧇āϕ⧇ āĻĒ⧜āĻž:

    • JSONāĨ¤
    • āĻĒāĻžāĻĨ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāĨ¤
    • āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāĨ¤
    • āϕ⧁āĻ•āĻŋāϜ
    • āĻšā§‡āĻĄāĻžāϰ
    • āĻĢāĻ°ā§āĻŽ
    • āĻĢāĻžāχāϞ
  • āφāωāϟāĻĒ⧁āϟ āĻĄā§‡āϟāĻžāϰ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ: āĻĒāĻžāχāĻĨāύ āĻĄā§‡āϟāĻž āĻāĻŦāĻ‚ āϟāĻžāχāĻĒ āĻĨ⧇āϕ⧇ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻĄā§‡āϟāĻžāϤ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻž (JSON āĻšāĻŋāϏāĻžāĻŦ⧇): -āĻĒāĻžāχāĻĨāύ āϟāĻžāχāĻĒ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰ⧁āύ (str, int, float, bool, list, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ)āĨ¤

    • datetime āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāĨ¤
    • UUID objeāĻ…āĻŦāĻœā§‡āĻ•ā§āϟctsāĨ¤
    • āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŽāĻĄā§‡āϞāĨ¤
    • ...āĻāĻŦāĻ‚ āφāϰ⧋ āĻ…āύ⧇āĻ•āĨ¤
  • āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•ā§āϰāĻŋ⧟āĻžāĻļā§€āϞ API āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ, 2āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āϏāĻš:

    • āϏ⧋āϝāĻŧāĻžāĻ—āĻžāϰ āχāω āφāχ (Swagger UI)āĨ¤
    • āϰāĻŋāĻĄāĻ• (ReDoc)āĨ¤

āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϕ⧋āĻĄ āωāĻĻāĻžāĻšāϰāϪ⧇ āĻĢāĻŋāϰ⧇ āφāϏāĻž āϝāĻžāĻ•, FastAPI āϝāĻž āĻ•āϰāĻŦ⧇:

  • GET āĻāĻŦāĻ‚ PUT āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ āĻĒāĻĨ⧇ item_id āφāϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰāĻŦ⧇āĨ¤
  • GET āĻāĻŦāĻ‚ PUT āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ item_id āϟāĻžāχāĻĒ int āĻāϰ āĻšāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰāĻŦ⧇āĨ¤
    • āϝāĻĻāĻŋ āύāĻž āĻšāϝāĻŧ āϤāĻŦ⧇ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻāĻ•āϟāĻŋ āωāĻĒāϝ⧁āĻ•ā§āϤ, āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ¤ā§āϰ⧁āϟāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύāĨ¤
  • GET āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϐāĻšā§āĻ›āĻŋāĻ• āĻ•ā§āϝ⧁āϝāĻŧ⧇āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āύāĻžāĻŽāĻ• q (āϝ⧇āĻŽāύ http://127.0.0.1:8000/items/foo?q=somequery) āφāϛ⧇ āĻ•āĻŋ āϤāĻž āĻšā§‡āĻ• āĻ•āϰāĻŦ⧇āĨ¤
    • āϝ⧇āĻšā§‡āϤ⧁ q āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāϟāĻŋ = None āĻĻāĻŋāϝāĻŧ⧇ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āϤāĻžāχ āĻāϟāĻŋ āϐāĻšā§āĻ›āĻŋāĻ•āĨ¤
    • None āĻ›āĻžāĻĄāĻŧāĻž āĻāϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻšāϤ⧋ (āϝ⧇āĻŽāύ PUT āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻšā§Ÿā§‡āϛ⧇)āĨ¤
  • /items/{item_id} āĻāϰ āϜāĻ¨ā§āϝ PUT āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āĻŦāĻĄāĻŋ JSON āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒāĻĄāĻŧ⧁āύ:
    • āϞāĻ•ā§āώ āĻ•āϰ⧁āύ, name āĻāĻ•āϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ…ā§āϝāĻžāĻŸā§āϰāĻŋāĻŦāĻŋāωāϟ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋ str āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤
    • āϞāĻ•ā§āώ āĻ•āϰ⧁āύ āĻāĻ–āĻžāύ⧇, price āĻ…ā§āϝāĻžāĻŸā§āϰāĻŋāĻŦāĻŋāωāϟāϟāĻŋ āφāĻŦāĻļā§āϝāĻ• āĻāĻŦāĻ‚ āĻāϟāĻŋ float āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤
    • āϞāĻ•ā§āώ āĻ•āϰ⧁āύ is_offer āĻāĻ•āϟāĻŋ āϐāĻšā§āĻ›āĻŋāĻ• āĻ…ā§āϝāĻžāĻŸā§āϰāĻŋāĻŦāĻŋāωāϟ āĻāĻŦāĻ‚ āĻāϟāĻŋ bool āĻšāϤ⧇ āĻšāĻŦ⧇ āϝāĻĻāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻĨāĻžāϕ⧇āĨ¤
    • āĻāχ āϏāĻŦāϟāĻŋ āĻ—āĻ­ā§€āϰāĻ­āĻžāĻŦ⧇ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύāϰāϤ JSON āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϗ⧁āϞāĻŋāϤ⧇āĻ“ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇āĨ¤
  • āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ JSON āĻšāϤ⧇ āĻāĻŦāĻ‚ JSON āĻĨ⧇āϕ⧇ āĻ•āύāĻ­āĻžāĻ°ā§āϟ āĻ•āϰ⧁āύāĨ¤
  • OpenAPI āĻĻāĻŋāϝāĻŧ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟ āĻ•āϰ⧁āύ, āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇:
    • āĻ•ā§āϰāĻŋ⧟āĻžāĻļā§€āϞ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋāĨ¤
    • āĻ…āύ⧇āĻ• āĻ­āĻžāώāĻžāϰ āϜāĻ¨ā§āϝ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϕ⧋āĻĄ āϤ⧈āϰāĻŋāϰ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāĨ¤
  • āϏāϰāĻžāϏāϰāĻŋ 2āϟāĻŋ āĻ•ā§āϰāĻŋ⧟āĻžāĻļā§€āϞ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž āύāĻĨāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻĒ⧃āĻˇā§āĻ  āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤

āφāĻŽāϰāĻž āĻāϤāĻ•ā§āώāύ āĻļ⧁āϧ⧁ āĻāϰ āĻĒ⧃āĻˇā§āĻ  āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĻ›āĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻĒāύāĻŋ āχāϤāĻŽāĻ§ā§āϝ⧇āχ āĻāϟāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āϤāĻžāϰ āϧāĻžāϰāĻŖāĻžāĻ“ āĻĒā§‡ā§Ÿā§‡ āĻ—āĻŋā§Ÿā§‡āϛ⧇āύāĨ¤

āύāĻŋāĻŽā§āύ⧋āĻ•ā§āϤ āϞāĻžāχāύ āϗ⧁āϞ⧋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ:

    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 auth āϏāĻš āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻāĻŦāĻ‚ āĻ…āύ⧁āĻŽā§‹āĻĻāύāĻĒā§āϰāĻžāĻĒā§āϤāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āĻŦāĻŋāώ⧟āϏāĻŽā§‚āĻšā§‡āϰ āωāĻĒāϰāĨ¤
  • āĻ—āĻ­ā§€āϰāĻ­āĻžāĻŦ⧇ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύāϰāϤ JSON āĻŽāĻĄā§‡āϞ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāϰāĻ“ āωāĻ¨ā§āύāϤ (āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻŽāĻžāύ āϏāĻšāϜ) āĻ•ā§ŒāĻļāϞ (Pydantic āϕ⧇ āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ)āĨ¤
  • āφāϰ⧋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ (āĻ¸ā§āϟāĻžāϰāϞ⧇āϟāϕ⧇ āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ) āĻšāĻŋāϏāĻžāĻŦ⧇:
    • WebSockets
    • GraphQL
    • HTTPX āĻāĻŦāĻ‚ pytest āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āϏāĻšāϜ āĻĒāϰ⧀āĻ•ā§āώāĻž
    • CORS
    • Cookie Sessions
    • ...āĻāĻŦāĻ‚ āφāϰ⧋āĨ¤

āĻ•āĻ°ā§āĻŽāĻ•ā§āώāĻŽāϤāĻž

āĻ¸ā§āĻŦāĻžāϧ⧀āύ TechEmpower Benchmarks āĻĻ⧇āĻ–āĻžāϝāĻŧ āϝ⧇ FastAPI āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϗ⧁āϞāĻŋ Uvicorn-āĻāϰ āĻ…āϧ⧀āύ⧇ āϚāϞāĻŽāĻžāύ āĻĻā§āϰ⧁āϤāϤāĻŽāĻĒāĻžāχāĻĨāύ āĻĢā§āϰ⧇āĻŽāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āϗ⧁āϞāĻŋāϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ Starlette āĻāĻŦāĻ‚ Uvicorn-āĻāϰ āĻĒāϰ (FastAPI āĻĻā§āĻŦāĻžāϰāĻž āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ)āĨ¤ (*)

āĻāϟāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āĻŦ⧁āĻāϤ⧇, āĻĻ⧇āϖ⧁āύ Benchmarks.

āϐāĻšā§āĻ›āĻŋāĻ• āύāĻŋāĻ°ā§āĻ­āϰāĻļā§€āϞāϤāĻž

Pydantic āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšā§ƒāϤ:

  • email-validator - āχāĻŽā§‡āϞ āϝāĻžāϚāĻžāχāĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝāĨ¤

āĻ¸ā§āϟāĻžāϰāϞ⧇āϟ āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšā§ƒāϤ:

  • httpx - āφāĻĒāύāĻŋ āϝāĻĻāĻŋ TestClient āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāύ āϤāĻžāĻšāϞ⧇ āφāĻŦāĻļā§āϝāĻ•āĨ¤
  • jinja2 - āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĒā§āϰāĻĻāĻ¤ā§āϤ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āϰ⧂āĻĒāϰ⧇āĻ–āĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāύ āϤāĻžāĻšāϞ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤
  • python-multipart - āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĢāĻ°ā§āĻŽ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰāϤ⧇ āϚāĻžāύ āϤāĻžāĻšāϞ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύ "parsing", request.form() āϏāĻšāĨ¤
  • itsdangerous - SessionMiddleware āϏāĻšāĻžāϝāĻŧāϤāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤
  • pyyaml - āĻ¸ā§āϟāĻžāϰāϞ⧇āĻŸā§‡āϰ SchemaGenerator āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻāϰ āϜāĻ¨ā§āϝ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ (āφāĻĒāύāĻžāϰ āϏāĻŽā§āĻ­āĻžāĻŦāϤ FastAPI āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ)āĨ¤
  • graphene - GraphQLApp āϏāĻšāĻžāϝāĻŧāϤāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āĻ°ā§Ÿā§‹āϜāύāĨ¤

FastAPI / Starlette āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšā§ƒāϤ:

  • uvicorn - āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āϝāĻž āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϞ⧋āĻĄ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻŦ⧇āĻļāύ āĻ•āϰ⧇āĨ¤
  • orjson - āφāĻĒāύāĻŋ ORJSONResponse āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāχāϞ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤
  • ujson - āφāĻĒāύāĻŋ UJSONResponse āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāχāϞ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤

āφāĻĒāύāĻŋ āĻāχ āϏāĻŦ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ pip install fastapi[all] āĻĻāĻŋā§Ÿā§‡.

āϞāĻžāχāϏ⧇āĻ¨ā§āϏ

āĻāχ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ MIT āϞāĻžāχāϏ⧇āĻ¨ā§āϏ āύ⧀āϤāĻŋāĻŽāĻžāϞāĻžāϰ āĻ…āϧ⧀āύ⧇ āĻļāĻ°ā§āϤāĻžā§ŸāĻŋāϤāĨ¤