committed by
GitHub
2 changed files with 465 additions and 0 deletions
@ -0,0 +1,464 @@ |
|||||
|
<p align="center"> |
||||
|
<a href="https://fastapi.tiangolo.com"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" alt="FastAPI"></a> |
||||
|
</p> |
||||
|
<p align="center"> |
||||
|
<em>FastAPI āĻāĻā§āĻāĻā§āώāĻŽāϤāĻž āϏāĻŽā§āĻĒāύā§āύ, āϏāĻšāĻā§ āĻļā§āĻāĻžāϰ āĻāĻŦāĻ āĻĻā§āϰā§āϤ āĻā§āĻĄ āĻāϰ⧠āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύā§āϰ āĻāύā§āϝ āĻĢā§āϰāĻžāĻŽāĻā§āĻžāϰā§āĻāĨ¤</em> |
||||
|
</p> |
||||
|
<p align="center"> |
||||
|
<a href="https://github.com/tiangolo/fastapi/actions?query=workflow%3ATest" target="_blank"> |
||||
|
<img src="https://github.com/tiangolo/fastapi/workflows/Test/badge.svg" alt="Test"> |
||||
|
</a> |
||||
|
<a href="https://codecov.io/gh/tiangolo/fastapi" target="_blank"> |
||||
|
<img src="https://img.shields.io/codecov/c/github/tiangolo/fastapi?color=%2334D058" alt="Coverage"> |
||||
|
</a> |
||||
|
<a href="https://pypi.org/project/fastapi" target="_blank"> |
||||
|
<img src="https://img.shields.io/pypi/v/fastapi?color=%2334D058&label=pypi%20package" alt="Package version"> |
||||
|
</a> |
||||
|
</p> |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
**āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋ**: <a href="https://fastapi.tiangolo.com" target="_blank">https://fastapi.tiangolo.com</a> |
||||
|
|
||||
|
**āϏā§āϰā§āϏ āĻā§āĻĄ**: <a href="https://github.com/tiangolo/fastapi" target="_blank">https://github.com/tiangolo/fastapi</a> |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
FastAPI āĻāĻāĻāĻŋ āĻāϧā§āύāĻŋāĻ, āĻĻā§āϰā§āϤ ( āĻŦā§āĻļāĻŋ āĻā§āώāĻŽāϤāĻž ) āϏāĻŽā§āĻĒāύā§āύ, Python 3.6+ āĻĻāĻŋā§ā§ API āϤā§āϰāĻŋāϰ āĻāύā§āϝ āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ āĻĒāĻžāĻāĻĨāύ āĻāĻžāĻāĻĒ āĻāĻā§āĻāĻŋāϤ āĻāĻŋāϤā§āϤāĻŋāĻ āĻāϝāĻŧā§āĻŦ āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻāĨ¤ |
||||
|
|
||||
|
āĻāϰ āĻŽā§āϞ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻā§āϞ⧠āĻšāϞāĻ |
||||
|
|
||||
|
- **āĻāϤāĻŋ**: āĻāĻāĻŋ **NodeJS** āĻāĻŦāĻ **Go** āĻāϰ āĻŽāϤ āĻāĻžāϰā§āϝāĻā§āώāĻŽāϤāĻž āϏāĻŽā§āĻĒāύā§āύ (Starlette āĻāĻŦāĻ Pydantic āĻāϰ āϏāĻžāĻšāĻžāϝā§āϝā§)āĨ¤ [āĻĒāĻžāĻāĻĨāύ āĻāϰ āĻĻā§āϰā§āϤāϤāĻŽ āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻ āĻā§āϞā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻŋ āĻāĻāĻāĻŋ](#_11)āĨ¤ |
||||
|
- **āĻĻā§āϰā§āϤ āĻā§āĻĄ āĻāϰāĻž**:āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āϤā§āϰāĻŋāϰ āĻāϤāĻŋ ⧍ā§Ļā§Ļ% āĻĨā§āĻā§ ā§Šā§Ļā§Ļ% āĻŦā§āĻĻā§āϧāĻŋ āĻāϰā§ā§ˇ \* |
||||
|
- **āϏā§āĻŦāϞā§āĻĒ bugs**: āĻŽāĻžāύā§āĻŦ (āĻĄā§āĻā§āϞāĻĒāĻžāϰ) āϏā§āώā§āĻ āϤā§āϰā§āĻāĻŋāϰ āĻĒā§āϰāĻžāϝāĻŧ ā§Ēā§Ļ% āĻšā§āϰāĻžāϏ āĻāϰā§āĨ¤ \* |
||||
|
- **āϏā§āĻŦāĻā§āĻāĻžāϤ**: āĻĻā§āϰā§āĻĻāĻžāύā§āϤ āĻāĻĄāĻŋāĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> āύāĻžāĻŽā§āĻ āĻĒāϰāĻŋāĻāĻŋāϤāĨ¤ āĻĻā§āϰā§āϤ āĻĄāĻŋāĻŦāĻžāĻ āĻāϰāĻž āϝāĻžā§āĨ¤ |
||||
|
|
||||
|
- **āϏāĻšāĻ**: āĻāĻāĻŋ āĻāĻŽāύ āĻāĻžāĻŦā§ āϏāĻāĻžāύ⧠āĻšā§ā§āĻā§ āϝā§āύ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋ āĻĒā§ā§ āϏāĻšāĻā§ āĻļā§āĻāĻž āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤ |
||||
|
- **āϏāĻāĻā§āώāĻŋāĻĒā§āϤ**: āĻā§āĻĄ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻāĻŽāĻžāύā§āϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ, bug āĻāĻŽāĻžā§ āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻā§āώāĻŖāĻž āĻĨā§āĻā§ āĻāĻāĻžāϧāĻŋāĻ āĻĢāĻŋāĻāĻžāϰ āĻĒāĻžāĻā§āĻž āϝāĻžā§ āĨ¤ |
||||
|
- **āĻā§āϰāĻžāϞā§**: āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻāĻžāĻŦā§ āϤā§āϰāĻŋ āĻā§āϰāĻŋā§āĻžāĻļā§āϞ āύāĻŋāϰā§āĻĻā§āĻļāύāĻž āύāĻĨāĻŋ (documentation) āϏāĻš āĻā§āĻĒāĻžāĻĻāύ āĻāĻĒāϝā§āĻāĻŋ (Production-ready) āĻā§āĻĄ āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤ |
||||
|
- **āĻŽāĻžāύ-āĻāĻŋāϤā§āϤāĻŋāĻ**: āĻāϰ āĻāĻŋāϤā§āϤāĻŋ <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> (āϝāĻž āĻĒā§āϰā§āĻŦā§ Swagger āύāĻžāĻŽā§ āĻĒāϰāĻŋāĻāĻŋāϤ āĻāĻŋāϞ) āĻāĻŦāĻ <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a> āĻāϰ āĻāĻĻāϰā§āĻļā§āϰ āĻŽāĻžāύā§āϰ āĻāĻĒāϰ |
||||
|
|
||||
|
<small>\* āĻā§āĻĒāĻžāĻĻāύāĻŽā§āĻāĻŋ āĻāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻŦāĻžāύāĻžāύā§āϰ āĻāĻ āĻĻāϞ āĻĄā§āĻā§āϞāĻĒāĻžāϰ āĻāϰ āĻŽāϤāĻžāĻŽāϤ āĻāĻŋāϤā§āϤāĻŋāĻ āĻĢāϞāĻžāĻĢāϞāĨ¤</small> |
||||
|
|
||||
|
## āϏā§āĻĒāύāϏāϰ āĻāĻŖ |
||||
|
|
||||
|
<!-- sponsors --> |
||||
|
|
||||
|
{% if sponsors %} |
||||
|
{% for sponsor in sponsors.gold -%} |
||||
|
<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a> |
||||
|
{% endfor -%} |
||||
|
{%- for sponsor in sponsors.silver -%} |
||||
|
<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a> |
||||
|
{% endfor %} |
||||
|
{% endif %} |
||||
|
|
||||
|
<!-- /sponsors --> |
||||
|
|
||||
|
<a href="https://fastapi.tiangolo.com/fastapi-people/#sponsors" class="external-link" target="_blank">āĻ
āύā§āϝāĻžāύā§āϝ āϏā§āĻĒāύāϏāϰ āĻāĻŖ</a> |
||||
|
|
||||
|
## āĻŽāϤāĻžāĻŽāϤ āϏāĻŽā§āĻš |
||||
|
|
||||
|
"_āĻāĻŽāĻŋ āĻāĻāĻāĻžāϞ **FastAPI** āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻāĻŋāĨ¤ [...] āĻāĻŽāϰāĻž āĻāĻžāĻŦāĻāĻŋ āĻŽāĻžāĻāĻā§āϰā§āϏāĻĢā§āĻā§ **ML āϏāĻžāϰā§āĻāĻŋāϏ** āĻ āϏāĻāϞ āĻĻāϞā§āϰ āĻāύā§āϝ āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦāĨ¤ āϝāĻžāϰ āĻŽāϧā§āϝ⧠āĻāĻŋāĻā§ āĻĒāĻŖā§āϝ **Windows** āĻ āϏāĻāϝā§āϝāύ āĻšā§ āĻāĻŦāĻ āĻāĻŋāĻā§ **Office** āĻāϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āϝāύ āĻšāĻā§āĻā§āĨ¤_" |
||||
|
|
||||
|
<div style="text-align: right; margin-right: 10%;">āĻāĻŦāĻŋāϰ āĻāĻžāύ - <strong>āĻŽāĻžāĻāĻā§āϰā§āϏāĻĢā§āĻā§</strong> <a href="https://github.com/tiangolo/fastapi/pull/26" target="_blank"><small>(ref)</small></a></div> |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
"_āĻāĻŽāϰāĻž **FastAPI** āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻā§āϰāĻšāĻŖ āĻāϰā§āĻāĻŋ āĻāĻāĻāĻŋ **REST** āϏāĻžāϰā§āĻāĻžāϰ āϤā§āϰāĻŋ āĻāϰāϤā§, āϝāĻž **āĻāĻŦāĻŋāώā§āϝāĻĻā§āĻŦāĻžāĻŖā§** āĻĒāĻžāĻāϝāĻŧāĻžāϰ āĻāύā§āϝ āĻā§ā§ā§āϰāĻŋ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ [āϞā§āĻĄāĻāĻāĻā§āϰ āĻāύā§āϝ]_" |
||||
|
|
||||
|
<div style="text-align: right; margin-right: 10%;">āĻĒāĻŋāϝāĻŧā§āϰ⧠āĻŽā§āϞāĻŋāύā§, āĻāϝāĻŧāĻžāϰā§āϏā§āϞāĻžāĻ āĻĻā§āĻĻāĻŋāύ, āĻāĻŦāĻ āϏāĻžāĻ āϏā§āĻŽāύā§āĻĨ āĻŽāĻŋāϰāĻŋāϝāĻŧāĻžāϞāĻž - <strong>āĻāĻŦāĻžāϰ</strong> <a href="https://eng.uber.com/ludwig-v0-2/" target="_blank"><small>(ref)</small></a></div> |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
"_**Netflix** āĻāĻŽāĻžāĻĻā§āϰ **āĻā§āϰāĻžāĻāϏāĻŋāϏ āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻ** āĻ
āϰā§āĻā§āϏā§āĻā§āϰā§āĻļāύ āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻ: **āĻĄāĻŋāϏāĻĒā§āϝāĻžāĻ** āĻāϰ āĻāĻĒā§āύ āϏā§āϰā§āϏ āϰāĻŋāϞāĻŋāĻ āĻā§āώāĻŖāĻž āĻāϰāϤ⧠āĻĒā§āϰ⧠āĻāύāύā§āĻĻāĻŋāϤ! [āϝāĻžāĻāĻŋāύāĻž **FastAPI** āĻĻāĻŋāϝāĻŧā§ āύāĻŋāϰā§āĻŽāĻŋāϤ]_" |
||||
|
|
||||
|
<div style="text-align: right; margin-right: 10%;">āĻā§āĻāĻŋāύ āĻā§āϞāĻŋāϏāύ, āĻŽāĻžāϰā§āĻ āĻāĻŋāϞāĻžāύā§āĻāĻž, āĻĢāϰā§āϏā§āĻ āĻŽāύāϏā§āύ - <strong>āύā§āĻāĻĢā§āϞāĻŋāĻā§āϏ</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank"><small>(ref)</small></a></div> |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
"_āĻāĻŽāĻŋ **FastAPI** āύāĻŋāϝāĻŧā§ āĻāĻžāĻāĻĻā§āϰ āϏāĻŽāĻžāύ āĻā§āϏāĻžāĻšāĻŋāϤāĨ¤ āĻāĻāĻŋ āĻā§āĻŦāĻ āĻŽāĻāĻžāϰ!_" |
||||
|
|
||||
|
<div style="text-align: right; margin-right: 10%;">āĻŦā§āϰāĻžāϝāĻŧāĻžāύ āĻāĻā§āύ - <strong><a href="https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855" target="_blank">āĻĒāĻžāĻāĻĨāύ āĻŦāĻžāĻāĻāϏ</a> āĻĒāĻĄāĻāĻžāϏā§āĻ āĻšā§āϏā§āĻ</strong> <a href="https://twitter.com/brianokken/status/1112220079972728832" target="_blank"><small>(ref)</small></a></div> |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
"\_āϏāϤā§āϝāĻŋāĻ, āĻāĻĒāύāĻŋ āϝāĻž āϤā§āϰāĻŋ āĻāϰā§āĻā§āύ āϤāĻž āĻā§āĻŦ āĻŽāĻāĻŦā§āϤ āĻāĻŦāĻ āĻĒāϰāĻŋāĻĒā§āϰā§āύ⧎ āĻ
āύā§āĻ āĻāĻĒāĻžāϝāĻŧā§, āĻāĻŽāĻŋ āϝāĻž **Hug** āĻ āĻāϰāϤ⧠āĻā§ā§ā§āĻāĻŋāϞāĻžāĻŽ - āϤāĻž āĻāĻžāĻāĻā§ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĻā§āĻā§ āĻāĻŽāĻŋ āϏāϤā§āϝāĻŋāĻ āĻ
āύā§āĻĒā§āϰāĻžāύāĻŋāϤ⧎\_" |
||||
|
|
||||
|
<div style="text-align: right; margin-right: 10%;">āĻāĻŋāĻŽā§āĻĨāĻŋ āĻā§āϰāϏāϞ⧠- <strong><a href="https://www.hug.rest/" target="_blank">Hug</a> āϏā§āϰāώā§āĻāĻž</strong> <a href="https://news.ycombinator.com/item?id=19455465" target="_blank"><small>(ref)</small></a></div> |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
"āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ REST API āϤā§āϰāĻŋāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ **āĻāϧā§āύāĻŋāĻ āĻĢā§āϰā§āĻŽāĻā§āĻžāϰā§āĻ** āĻļāĻŋāĻāϤ⧠āĻāĻžāύ, āϤāĻžāĻšāϞ⧠**FastAPI** āĻĻā§āĻā§āύ [...] āĻāĻāĻŋ āĻĻā§āϰā§āϤ, āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϏāĻšāĻ āĻāĻŦāĻ āĻļāĻŋāĻāϤā§āĻ āϏāĻšāĻ [...]\_" |
||||
|
|
||||
|
"_āĻāĻŽāϰāĻž āĻāĻŽāĻžāĻĻā§āϰ **APIs** [...] āĻāϰ āĻāύā§āϝ **FastAPI**- āϤ⧠āĻāϏā§āĻāĻŋ [...] āĻāĻŽāĻŋ āĻŽāύ⧠āĻāϰāĻŋ āĻāĻĒāύāĻŋāĻ āĻāĻāĻŋ āĻĒāĻāύā§āĻĻ āĻāϰāĻŦā§āύ [...]_" |
||||
|
|
||||
|
<div style="text-align: right; margin-right: 10%;">āĻāύā§āϏ āĻŽāύā§āĻāĻžāύāĻŋ - āĻŽā§āϝāĻžāĻĨāĻŋāĻ āĻšā§āύāĻŋāĻŦāĻžāϞ - <strong><a href="https://explosion.ai" target="_blank">Explosion AI</a> āĻĒā§āϰāϤāĻŋāώā§āĻ āĻžāϤāĻž - <a href="https://spacy.io" target="_blank">spaCy</a> āϏā§āϰāώā§āĻāĻž</strong> <a href="https://twitter.com/_inesmontani/status/1144173225322143744" target="_blank"><small>(ref)</small></a> - <a href="https://twitter.com/honnibal/status/1144031421859655680" target="_blank"><small>(ref)</small></a></div> |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## **Typer**, CLI āĻāϰ āĻāύā§āϝ FastAPI |
||||
|
|
||||
|
<a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a> |
||||
|
|
||||
|
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ <abbr title="Command Line Interface">CLI</abbr> āĻ
ā§āϝāĻžāĻĒ āĻŦāĻžāύāĻžāϤ⧠āĻāĻžāύ, āϝāĻž āĻāĻŋāύāĻž āĻā§ā§āĻŦ API āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻŦā§, āϤāĻžāĻšāϞ⧠āĻĻā§āĻā§āύ<a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>. |
||||
|
|
||||
|
**āĻāĻžāĻāĻĒāĻžāϰ** āĻšāϞ FastAPI āĻāϰ āĻā§āĻ āĻāĻžāĻā§ā§āϰ āĻŽāϤāĨ¤ āĻāĻŦāĻ āĻāĻāĻŋāϰ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻāĻŋāϞ **CLIs āĻāϰ FastAPI** āĻšāĻā§āĻžāĨ¤ â¨ī¸ đ |
||||
|
|
||||
|
## āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāϤāĻž āĻā§āϞ⧠|
||||
|
|
||||
|
Python 3.7+ |
||||
|
|
||||
|
FastAPI āĻāĻŋāĻā§ āĻĻāĻžāύāĻŦā§āĻĻā§āϰ āĻāĻžāĻāϧ⧠āĻĻāĻžāĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻāĻā§: |
||||
|
|
||||
|
- <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a> āĻāϝāĻŧā§āĻŦ āĻ
āĻāĻļā§āϰ āĻāύā§āϝ. |
||||
|
- <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> āĻĄā§āĻāĻž āĻ
āĻāĻļāĻā§āϞāĻŋāϰ āĻāύā§āϝ. |
||||
|
|
||||
|
## āĻāύāϏā§āĻāϞā§āĻļāύ āĻĒā§āϰāĻā§āϰāĻŋā§āĻž |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
$ pip install fastapi |
||||
|
|
||||
|
---> 100% |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
āĻāĻĒāύāĻžāϰ āĻāĻāĻāĻŋ ASGI āϏāĻžāϰā§āĻāĻžāϰā§āϰāĻ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāĻŦā§, āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύā§āϰ āĻāύā§āϝ <a href="https://www.uvicorn.org" class="external-link" target="_blank">Uvicorn</a> āĻ
āĻĨāĻŦāĻž <a href="https://gitlab.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>. |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
$ pip install "uvicorn[standard]" |
||||
|
|
||||
|
---> 100% |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
## āĻāĻĻāĻžāĻšāϰāĻŖ |
||||
|
|
||||
|
### āϤā§āϰāĻŋ |
||||
|
|
||||
|
- `main.py` āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰā§āύ: |
||||
|
|
||||
|
```Python |
||||
|
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} |
||||
|
``` |
||||
|
|
||||
|
<details markdown="1"> |
||||
|
<summary>āĻ
āĻĨāĻŦāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ <code>async def</code>...</summary> |
||||
|
|
||||
|
āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻā§āĻĄ `async` / `await`, āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϤāĻžāĻšāϞ⧠`async def` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ: |
||||
|
|
||||
|
```Python hl_lines="9 14" |
||||
|
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} |
||||
|
``` |
||||
|
|
||||
|
**āĻā§āĻāĻž**: |
||||
|
|
||||
|
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āύāĻž āĻāĻžāύā§āύ, _"āϤāĻžāĻĄāĻŧāĻžāĻšā§āĻĄāĻŧā§?"_ āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻĻā§āĻā§āύ <a href="https://fastapi.tiangolo.com/async/#in-a-hurry" target="_blank">`async` āĻāĻŦāĻ `await` āύāĻĨāĻŋāϰ āĻŽāϧā§āϝ⧠āĻĻā§āĻā§āύ </a>. |
||||
|
|
||||
|
</details> |
||||
|
|
||||
|
### āĻāĻāĻŋ āĻāĻžāϞāĻžāύ |
||||
|
|
||||
|
āϏāĻžāϰā§āĻāĻžāϰ āĻāĻžāϞ⧠āĻāϰā§āύ: |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
$ 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. |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
<details markdown="1"> |
||||
|
<summary>āύāĻŋāϰā§āĻĻā§āĻļāύāĻž āϏāĻŽā§āĻĒāϰā§āĻā§ <code>uvicorn main:app --reload</code>...</summary> |
||||
|
|
||||
|
`uvicorn main:app` āύāĻŋāϰā§āĻĻā§āĻļāύāĻžāĻāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āĻāĻžāϝāĻŧ: |
||||
|
|
||||
|
- `main`: āĻĢāĻžāĻāϞ `main.py` (āĻĒāĻžāĻāĻĨāύ "āĻŽāĻĄāĻŋāĻāϞ")āĨ¤ |
||||
|
- `app`: `app = FastAPI()` āϞāĻžāĻāύ āĻĻāĻŋāϝāĻŧā§ `main.py` āĻāϰ āĻāĻŋāϤāϰ⧠āϤā§āϰāĻŋ āĻāϰāĻž āĻ
āĻŦāĻā§āĻā§āĻāĨ¤ |
||||
|
- `--reload`: āĻā§āĻĄ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻĒāϰ⧠āϏāĻžāϰā§āĻāĻžāϰ āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻžāϞ⧠āĻāϰā§āύāĨ¤ āĻāĻāĻŋ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĄā§āĻā§āϞāĻĒāĻŽā§āύā§āĻ āĻāϰ āϏāĻŽā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ |
||||
|
|
||||
|
</details> |
||||
|
|
||||
|
### āĻāĻāĻž āĻā§āĻ āĻāϰā§āύ |
||||
|
|
||||
|
āĻāĻĒāύāĻžāϰ āĻŦā§āϰāĻžāĻāĻāĻžāϰ āĻā§āϞā§āύ <a href="http://127.0.0.1:8000/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a> āĻāĨ¤ |
||||
|
|
||||
|
āĻāĻĒāύāĻŋ JSON āϰā§āϏāĻĒāύā§āϏ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ: |
||||
|
|
||||
|
```JSON |
||||
|
{"item_id": 5, "q": "somequery"} |
||||
|
``` |
||||
|
|
||||
|
āĻāĻĒāύāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ API āϤā§āϰāĻŋ āĻāϰā§āĻā§āύ āϝāĻž: |
||||
|
|
||||
|
- `/` āĻāĻŦāĻ `/items/{item_id}` _paths_ āĻ HTTP āĻ
āύā§āϰā§āϧ āĻā§āϰāĻšāĻŖ āĻāϰā§āĨ¤ |
||||
|
- āĻāĻāϝāĻŧ *path*āĻ `GET` <em>āĻ
āĻĒāĻžāϰā§āĻļāύ</em> āύā§āϝāĻŧ ( āϝāĻž HTTP _methods_ āύāĻžāĻŽā§āĻ āĻĒāϰāĻŋāĻāĻŋāϤ)āĨ¤ |
||||
|
- _path_ `/items/{item_id}`-āĻ āĻāĻāĻāĻŋ _path āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ_ `item_id` āĻāĻā§ āϝāĻž āĻāĻŋāύāĻž `int` āĻšāϤ⧠āĻšāĻŦā§āĨ¤ |
||||
|
- _path_ `/items/{item_id}`-āĻāϰ āĻāĻāĻāĻŋ āĻāĻā§āĻāĻŋāĻ `str` _query āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ_ `q` āĻāĻā§āĨ¤ |
||||
|
|
||||
|
### āĻā§āϰāĻŋā§āĻžāĻļā§āϞ API āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋ |
||||
|
|
||||
|
āĻāĻāύ āϝāĻžāύ <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>. |
||||
|
|
||||
|
āĻāĻĒāύāĻŋ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻāĻžāĻŦā§ āĻĒā§āϰāϏā§āϤā§āϤ āĻā§āϰāĻŋā§āĻžāĻļā§āϞ API āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ (<a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a> āĻĒā§āϰāĻĻāϤā§āϤ): |
||||
|
|
||||
|
 |
||||
|
|
||||
|
### āĻŦāĻŋāĻāϞā§āĻĒ API āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋ |
||||
|
|
||||
|
āĻāĻŦāĻ āĻāĻāύ <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> āĻ āϝāĻžāύ. |
||||
|
|
||||
|
āĻāĻĒāύāĻŋ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻāĻžāĻŦā§ āĻĒā§āϰāϏā§āϤā§āϤ āĻŦāĻŋāĻāϞā§āĻĒ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ (<a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a> āĻĒā§āϰāĻĻāϤā§āϤ): |
||||
|
|
||||
|
 |
||||
|
|
||||
|
## āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ āĻāĻĒāĻā§āϰā§āĻĄ |
||||
|
|
||||
|
āĻāĻāύ `main.py` āĻĢāĻžāĻāϞāĻāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āύ āϝā§āύ āĻāĻāĻŋ `PUT` āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻĨā§āĻā§ āĻŦāĻĄāĻŋ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ |
||||
|
|
||||
|
Python āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ, Pydantic āĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻŦāĻĄāĻŋ āĻā§āώāĻŖāĻž āĻāϰā§āύāĨ¤ |
||||
|
|
||||
|
```Python hl_lines="4 9-12 25-27" |
||||
|
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 āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋ āĻāύā§āύā§āϤāĻāϰāĻŖ |
||||
|
|
||||
|
āĻāĻāύ <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> āĻāĻĄāĻĄā§āϰā§āϏ⧠āϝāĻžāύ. |
||||
|
|
||||
|
- āĻā§āϰāĻŋā§āĻžāĻļā§āϞ API āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋāĻāĻŋ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āĻāύā§āύā§āϤ āĻšāϝ⧠āϝāĻžāĻŦā§, āύāϤā§āύ āĻŦāĻĄāĻŋ āϏāĻš: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
- "Try it out" āĻŦāĻžāĻāύ⧠āĻāĻžāĻĒā§āύ, āĻāĻāĻŋ āĻāĻĒāύāĻžāĻā§ āĻĒā§āϰāĻžāĻŽāĻŋāĻāĻžāϰāĻā§āϞ⧠āĻĒā§āϰāĻŖ āĻāϰāϤ⧠āĻāĻŦāĻ API āĻāϰ āϏāĻžāĻĨā§ āϏāϰāĻžāϏāϰāĻŋ āĻā§āϰāĻŋā§āĻž-āĻāϞāĻžāĻĒ āĻāϰāϤ⧠āĻĻāĻŋāĻŦā§: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
- āϤāĻžāϰāĻĒāϰ⧠"Execute" āĻŦāĻžāĻāύ⧠āĻāĻžāĻĒā§āύ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻāĻĒāύāĻžāϰ API āĻāϰ āϏāĻžāĻĨā§ āϝā§āĻāĻžāϝā§āĻ āĻāϰāĻŦā§, āĻĒā§āϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻĒāĻžāĻ āĻžāĻŦā§, āĻĢāϞāĻžāĻĢāϞāĻā§āϞāĻŋ āĻĒāĻžāĻŦā§ āĻāĻŦāĻ āϏā§āĻā§āϞāĻŋ āĻĒāϰā§āϰāĻĻāĻžā§ āĻĻā§āĻāĻžāĻŦā§: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
### āĻŦāĻŋāĻāϞā§āĻĒ API āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋ āĻāĻĒāĻā§āϰā§āĻĄ |
||||
|
|
||||
|
āĻāĻŦāĻ āĻāĻāύ <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> āĻ āϝāĻžāύāĨ¤ |
||||
|
|
||||
|
- āĻŦāĻŋāĻāϞā§āĻĒ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋāϤā§āĻ āύāϤā§āύ āĻā§ā§ā§āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻāĻŦāĻ āĻŦāĻĄāĻŋ āĻĒā§āϰāϤāĻŋāĻĢāϞāĻŋāϤ āĻšāĻŦā§: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
### āϏāĻāĻā§āώāĻŋāĻĒā§āϤāĻāϰāĻŖ |
||||
|
|
||||
|
āϏāĻāĻā§āώā§āĻĒā§, āĻāĻĒāύāĻŋ **āĻļā§āϧ⧠āĻāĻāĻŦāĻžāϰ** āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰā§āϰ āϧāϰāύ, āĻŦāĻĄāĻŋ āĻāϤā§āϝāĻžāĻĻāĻŋ āĻĢāĻžāĻāĻļāύ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻā§āώāĻŖāĻž āĻāϰā§āύāĨ¤ |
||||
|
|
||||
|
āĻāĻĒāύāĻŋ āϏā§āĻāĻŋ āĻāϧā§āύāĻŋāĻ āĻĒāĻžāĻāĻĨāύā§āϰ āϏāĻžāĻĨā§ āĻāϰā§āύāĨ¤ |
||||
|
|
||||
|
āĻāĻĒāύāĻžāĻā§ āύāϤā§āύ āĻāϰ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻā§āύ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāϰ āĻŦāĻžāĻā§āϝ āĻāĻ āύ, āĻĢāĻžāĻāĻļāύ āĻŦāĻž āĻā§āϞāĻžāϏ āĻāĻŋāĻā§āĻ āĻļāĻŋāĻāϤ⧠āĻšāĻā§āĻā§ āύāĻžāĨ¤ |
||||
|
|
||||
|
āĻļā§āϧā§āĻ āĻāϧā§āύāĻŋāĻ **Python 3.6+** |
||||
|
|
||||
|
āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, `int` āĻāϰ āĻāύā§āϝ: |
||||
|
|
||||
|
```Python |
||||
|
item_id: int |
||||
|
``` |
||||
|
|
||||
|
āĻ
āĻĨāĻŦāĻž āĻāϰāĻ āĻāĻāĻŋāϞ `Item` āĻŽāĻĄā§āϞā§āϰ āĻāύā§āϝ: |
||||
|
|
||||
|
```Python |
||||
|
item: Item |
||||
|
``` |
||||
|
|
||||
|
...āĻāĻŦāĻ āϏā§āĻ āĻāĻāĻ āĻā§āώāĻŖāĻžāϰ āϏāĻžāĻĨā§ āĻāĻĒāύāĻŋ āĻĒāĻžāĻŦā§āύ: |
||||
|
|
||||
|
- āĻāĻĄāĻŋāĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ, āϝā§āĻŽāύ |
||||
|
- āϏāĻŽāĻžāĻĒā§āϤāĻŋāĨ¤ |
||||
|
- āϧāϰāĻŖ āϝāĻžāĻāĻžāĻ |
||||
|
- āϤāĻĨā§āϝ āϝāĻžāĻāĻžāĻāĻāϰāĻŖ: |
||||
|
- āĻĄā§āĻāĻž āĻ
āĻŦā§āϧ āĻšāϞ⧠āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻāĻŦāĻ āĻĒāϰāĻŋāώā§āĻāĻžāϰ āϤā§āϰā§āĻāĻŋāϰ āύāĻŋāϰā§āĻĻā§āĻļāύāĻžāĨ¤ |
||||
|
- āĻāĻŽāύāĻāĻŋ āĻāĻā§āϰāĻāĻžāĻŦā§ āύā§āϏā§āĻ āĻāϰāĻž JSON āĻ
āĻŦāĻā§āĻā§āĻā§āϰ āĻāύā§āϝ āĻŦā§āϧāϤāĻžāĨ¤ |
||||
|
- āĻĒā§āϰā§āϰāĻŋāϤ āϤāĻĨā§āϝ <abbr title="āϝāĻž āĻĒāϰāĻŋāĻāĻŋāϤ: serialization, parsing, marshalling">āϰā§āĻĒāĻžāύā§āϤāϰ</abbr>: āϝāĻž āύā§āĻāĻā§āĻžāϰā§āĻ āĻĨā§āĻā§ āĻĒāĻžāĻāĻĨāύā§āϰ āϤāĻĨā§āϝ āĻāĻŦāĻ āϧāϰāύ⧠āĻāϏā§, āĻāĻŦāĻ āϏā§āĻāĻžāύ āĻĨā§āĻā§ āĻĒā§āĻž: |
||||
|
|
||||
|
- JSONāĨ¤ |
||||
|
- āĻĒāĻžāĻĨ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĨ¤ |
||||
|
- āĻā§ā§ā§āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĨ¤ |
||||
|
- āĻā§āĻāĻŋāĻ |
||||
|
- āĻšā§āĻĄāĻžāϰ |
||||
|
- āĻĢāϰā§āĻŽ |
||||
|
- āĻĢāĻžāĻāϞ |
||||
|
|
||||
|
- āĻāĻāĻāĻĒā§āĻ āĻĄā§āĻāĻžāϰ <abbr title="āϝāĻž āĻĒāϰāĻŋāĻāĻŋāϤ: serialization, parsing, marshalling">āϰā§āĻĒāĻžāύā§āϤāϰ</abbr>: āĻĒāĻžāĻāĻĨāύ āĻĄā§āĻāĻž āĻāĻŦāĻ āĻāĻžāĻāĻĒ āĻĨā§āĻā§ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻĄā§āĻāĻžāϤ⧠āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰāĻž (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āĻāĻŋ āĻā§āϰāĻŋā§āĻžāĻļā§āϞ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āύāĻĨāĻŋ āĻāϝāĻŧā§āĻŦ āĻĒā§āώā§āĻ āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤ |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
āĻāĻŽāϰāĻž āĻāϤāĻā§āώāύ āĻļā§āϧ⧠āĻāϰ āĻĒā§āώā§āĻ āϤā§āϰāĻŋ āĻāϰā§āĻāĻŋ, āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻŋ āĻāϤāĻŽāϧā§āϝā§āĻ āĻāĻāĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰ⧠āϤāĻžāϰ āϧāĻžāϰāĻŖāĻžāĻ āĻĒā§ā§ā§ āĻāĻŋā§ā§āĻā§āύāĨ¤ |
||||
|
|
||||
|
āύāĻŋāĻŽā§āύā§āĻā§āϤ āϞāĻžāĻāύ āĻā§āϞ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύ: |
||||
|
|
||||
|
```Python |
||||
|
return {"item_name": item.name, "item_id": item_id} |
||||
|
``` |
||||
|
|
||||
|
...āĻĒā§āϰā§āĻŦā§: |
||||
|
|
||||
|
```Python |
||||
|
... "item_name": item.name ... |
||||
|
``` |
||||
|
|
||||
|
...āĻĒāϰāĻŦāϰā§āϤā§āϤā§: |
||||
|
|
||||
|
```Python |
||||
|
... "item_price": item.price ... |
||||
|
``` |
||||
|
|
||||
|
...āĻāĻŦāĻ āĻĻā§āĻā§āύ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻĒāύāĻžāϰ āĻāĻĄāĻŋāĻāϰ āĻāĻĒāĻžāĻĻāĻžāύāĻā§āϞā§āĻā§ āϏā§āĻāĻā§āϰāĻŋā§āĻāĻžāĻŦā§-āϏāĻŽā§āĻĒāύā§āύ āĻāϰāĻŦā§ āĻāĻŦāĻ āϤāĻžāĻĻā§āϰ āϧāϰāύ āĻāĻžāύāϤ⧠āĻĒāĻžāϰāĻŦā§: |
||||
|
|
||||
|
 |
||||
|
|
||||
|
āĻāϰāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āϏāĻŽā§āĻĒāύā§āύ āĻāĻĻāĻžāĻšāϰāĻŖā§āϰ āĻāύā§āϝ, āĻĻā§āĻā§āύ <a href="https://fastapi.tiangolo.com/tutorial/">āĻāĻŋāĻāĻā§āϰāĻŋā§āĻžāϞ - āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāĻžāĻāĻĄ</a>. |
||||
|
|
||||
|
**āϏā§āĻĒā§āϞāĻžāϰ āϏāϤāϰā§āĻāϤāĻž**: āĻāĻŋāĻāĻā§āϰāĻŋā§āĻžāϞ - āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāĻžāĻāĻĄ āύāĻŋāĻŽā§āύā§āĻā§āϤ āĻŦāĻŋāώā§āĻā§āϞāĻŋ āĻ
āύā§āϤāϰā§āĻā§āĻā§āϤ āĻāϰā§: |
||||
|
|
||||
|
- **āĻšā§āĻĄāĻžāϰ**, **āĻā§āĻāĻŋāĻ**, **āĻĢāϰā§āĻŽ āĻĢāĻŋāϞā§āĻĄ** āĻāĻŦāĻ **āĻĢāĻžāĻāϞāĻā§āϞāĻŋ** āĻāĻŽāύ āĻ
āύā§āϝāĻžāύā§āϝ āĻāĻžā§āĻāĻž āĻĨā§āĻā§ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻā§āώāĻŖāĻž āĻāϰāĻžāĨ¤ |
||||
|
- `maximum_length` āĻŦāĻž `regex` āĻāϰ āĻŽāϤ⧠**āϝāĻžāĻāĻžāĻāĻāϰāĻŖ āĻŦāĻžāϧāĻžāĻŽā§āĻā§āϤāĻŋ** āϏā§āĻ āĻāϰāĻž āĻšāϝāĻŧ āĻāĻŋāĻāĻžāĻŦā§, āϤāĻž āύāĻŋā§ā§ āĻāϞā§āĻāύāĻž āĻāϰāĻž āĻšāĻŦā§āĨ¤ |
||||
|
- āĻāĻāĻāĻŋ āĻā§āĻŦ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϏāĻšāĻ <abbr title="also known as components, resources, providers, services, injectables">āĻĄāĻŋāĻĒā§āύā§āĻĄā§āύā§āϏāĻŋ āĻāύāĻā§āĻāĻļāύ</abbr> āĻĒāĻĻā§āϧāϤāĻŋ |
||||
|
- **OAuth2** āĻāĻŦāĻ **JWT āĻā§āĻā§āύ** āĻāĻŦāĻ **HTTP Basic** auth āϏāĻš āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻāĻŦāĻ āĻ
āύā§āĻŽā§āĻĻāύāĻĒā§āϰāĻžāĻĒā§āϤāĻŋ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻŦāĻŋāώā§āϏāĻŽā§āĻšā§āϰ āĻāĻĒāϰāĨ¤ |
||||
|
- **āĻāĻā§āϰāĻāĻžāĻŦā§ āĻ
āĻŦāϏā§āĻĨāĻžāύāϰāϤ JSON āĻŽāĻĄā§āϞ** āĻā§āώāĻŖāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻāϰāĻ āĻāύā§āύāϤ (āĻāĻŋāύā§āϤ⧠āϏāĻŽāĻžāύ āϏāĻšāĻ) āĻā§āĻļāϞ (Pydantic āĻā§ āϧāύā§āϝāĻŦāĻžāĻĻ)āĨ¤ |
||||
|
- āĻāϰ⧠āĻ
āϤāĻŋāϰāĻŋāĻā§āϤ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ (āϏā§āĻāĻžāϰāϞā§āĻāĻā§ āϧāύā§āϝāĻŦāĻžāĻĻ) āĻšāĻŋāϏāĻžāĻŦā§: |
||||
|
- **WebSockets** |
||||
|
- **GraphQL** |
||||
|
- HTTPX āĻāĻŦāĻ `pytest` āĻāĻŋāϤā§āϤāĻŋāĻ āĻ
āϤā§āϝāύā§āϤ āϏāĻšāĻ āĻĒāϰā§āĻā§āώāĻž |
||||
|
- **CORS** |
||||
|
- **Cookie Sessions** |
||||
|
- ...āĻāĻŦāĻ āĻāϰā§āĨ¤ |
||||
|
|
||||
|
## āĻāϰā§āĻŽāĻā§āώāĻŽāϤāĻž |
||||
|
|
||||
|
āϏā§āĻŦāĻžāϧā§āύ TechEmpower Benchmarks āĻĻā§āĻāĻžāϝāĻŧ āϝ⧠**FastAPI** āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋ Uvicorn-āĻāϰ āĻ
āϧā§āύ⧠āĻāϞāĻŽāĻžāύ āĻĻā§āϰā§āϤāϤāĻŽ<a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">āĻĒāĻžāĻāĻĨāύ āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ,</a> āĻļā§āϧā§āĻŽāĻžāϤā§āϰ Starlette āĻāĻŦāĻ Uvicorn-āĻāϰ āĻĒāϰ (FastAPI āĻĻā§āĻŦāĻžāϰāĻž āĻ
āĻā§āϝāύā§āϤāϰā§āĻŖāĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšā§āϤ)āĨ¤ (\*) |
||||
|
|
||||
|
āĻāĻāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āĻŦā§āĻāϤā§, āĻĻā§āĻā§āύ <a href="https://fastapi.tiangolo.com/benchmarks/" class="internal-link" target="_blank">Benchmarks</a>. |
||||
|
|
||||
|
## āĻāĻā§āĻāĻŋāĻ āύāĻŋāϰā§āĻāϰāĻļā§āϞāϤāĻž |
||||
|
|
||||
|
Pydantic āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšā§āϤ: |
||||
|
|
||||
|
- <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - āĻĻā§āϰā§āϤ JSON āĻāϰ āĻāύā§āϝ <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>. |
||||
|
- <a href="https://github.com/JoshData/python-email-validator" target="_blank"><code>email_validator</code></a> - āĻāĻŽā§āϞ āϝāĻžāĻāĻžāĻāĻāϰāĻŖā§āϰ āĻāύā§āϝāĨ¤ |
||||
|
|
||||
|
āϏā§āĻāĻžāϰāϞā§āĻ āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšā§āϤ: |
||||
|
|
||||
|
- <a href="https://www.python-httpx.org" target="_blank"><code>httpx</code></a> - āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ `TestClient` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻāĻžāύ āϤāĻžāĻšāϞ⧠āĻāĻŦāĻļā§āϝāĻāĨ¤ |
||||
|
- <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĒā§āϰāĻĻāϤā§āϤ āĻā§āĻŽāĻĒā§āϞā§āĻ āϰā§āĻĒāϰā§āĻāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻāĻžāύ āϤāĻžāĻšāϞ⧠āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤ |
||||
|
- <a href="https://andrew-d.github.io/python-multipart/" target="_blank"><code>python-multipart</code></a> - āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĢāϰā§āĻŽ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻāϰāϤ⧠āĻāĻžāύ āϤāĻžāĻšāϞ⧠āĻĒā§āϰāϝāĻŧā§āĻāύ <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>, `request.form()` āϏāĻšāĨ¤ |
||||
|
- <a href="https://pythonhosted.org/itsdangerous/" target="_blank"><code>itsdangerous</code></a> - `SessionMiddleware` āϏāĻšāĻžāϝāĻŧāϤāĻžāϰ āĻāύā§āϝ āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤ |
||||
|
- <a href="https://pyyaml.org/wiki/PyYAMLDocumentation" target="_blank"><code>pyyaml</code></a> - āϏā§āĻāĻžāϰāϞā§āĻā§āϰ SchemaGenerator āϏāĻžāĻĒā§āϰā§āĻ āĻāϰ āĻāύā§āϝ āĻĒā§āϰā§ā§āĻāύ (āĻāĻĒāύāĻžāϰ āϏāĻŽā§āĻāĻžāĻŦāϤ FastAPI āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻ)āĨ¤ |
||||
|
- <a href="https://graphene-python.org/" target="_blank"><code>graphene</code></a> - `GraphQLApp` āϏāĻšāĻžāϝāĻŧāϤāĻžāϰ āĻāύā§āϝ āĻĒā§āϰā§ā§āĻāύāĨ¤ |
||||
|
- <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - āĻāĻĒāύāĻŋ `UJSONResponse` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻāĻžāĻāϞ⧠āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤ |
||||
|
|
||||
|
FastAPI / Starlette āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšā§āϤ: |
||||
|
|
||||
|
- <a href="https://www.uvicorn.org" target="_blank"><code>uvicorn</code></a> - āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻāύā§āϝ āϝāĻž āĻāĻĒāύāĻžāϰ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϞā§āĻĄ āĻāϰ⧠āĻāĻŦāĻ āĻĒāϰāĻŋāĻŦā§āĻļāύ āĻāϰā§āĨ¤ |
||||
|
- <a href="https://github.com/ijl/orjson" target="_blank"><code>orjson</code></a> - āĻāĻĒāύāĻŋ `ORJSONResponse` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻāĻžāĻāϞ⧠āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤ |
||||
|
|
||||
|
āĻāĻĒāύāĻŋ āĻāĻ āϏāĻŦ āĻāύāϏā§āĻāϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ `pip install fastapi[all]` āĻĻāĻŋā§ā§. |
||||
|
|
||||
|
## āϞāĻžāĻāϏā§āύā§āϏ |
||||
|
|
||||
|
āĻāĻ āĻĒā§āϰāĻā§āĻā§āĻ MIT āϞāĻžāĻāϏā§āύā§āϏ āύā§āϤāĻŋāĻŽāĻžāϞāĻžāϰ āĻ
āϧā§āύ⧠āĻļāϰā§āϤāĻžā§āĻŋāϤāĨ¤ |
@ -0,0 +1 @@ |
|||||
|
INHERIT: ../en/mkdocs.yml |
LoadingâĻ
Reference in new issue