Deleting other translated files

This commit is contained in:
Temesvári Csanád 2023-08-14 15:56:37 +02:00
parent 6a43526270
commit 9e2dbc3bf9
3 changed files with 0 additions and 1207 deletions

View File

@ -1,198 +0,0 @@
# Funkciók
## FastAPI funkciók
A **FastAPI** a következőket nyújtja:
### Nyílt szabványokon alapul
* <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank"><strong>OpenAPI</strong></a> API létrehozásához, beleértve <abbr title="más néven: endpoints, routes">útvonal</abbr> <abbr title="más néven HTTP metódusok, mint POST, GET, PUT, DELETE">műveletek</abbr>, paraméterek, törzs kérések, biztonság stb.
* Automatikus adatmodell-dokumentáció a <a href="https://json-schema.org/" class="external-link" target="_blank"><strong>JSON-sémával</strong></a> (mivel maga az OpenAPI is a JSON-sémán alapul).
* Ezen szabványok köré tervezve, alapos tanulmányozás után. Nem csak egy utólagos rétegként a tetején.
* Ez számos nyelven lehetővé teszi az automatikus **klienskód-generálás** használatát is.
### Automatikus dokumentációk
Interaktív API dokumentációs és felfedező webes felhasználói felületek. Mivel a keretrendszer OpenAPI-n alapul, több lehetőség is létezik, amelyek közül 2 alapértelmezés szerint benne van.
* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank"><strong>Swagger UI</strong></a>, interaktív felfedezés, hívja és tesztelje API-ját közvetlenül a böngészőből.
![Swagger UI interakció](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
* Alternatív API dokumentáció a <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank"><strong>ReDoc</strong></a> segítségével.
![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)
### Csak Modern Python
Mindez szabványos **Python 3.6 típusú** deklarációkon alapul (hála a Pydantic-nek). Nincs új megtanulandó szintaxis. Csak szabványos modern Python.
Ha 2 perces felfrissítésre van szüksége a Python-típusok használatáról (még ha nem is használja a FastAPI-t), tekintse meg a rövid oktatóanyagot: [Python Típusok](python-types.md){.internal-link target=_blank}.
A szabványos Python típusokat írod:
``` Python
from datetime import date
from pydantic import BaseModel
# Declare a variable as a str
# and get editor support inside the function
def main(user_id: str):
return user_id
# A Pydantic model
class User(BaseModel):
id: int
name: str
joined: date
```
Ezt így lehet használni:
``` Python
my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
second_user_data = {
"id": 4,
"name": "Mary",
"joined": "2018-11-30",
}
my_second_user: User = User(**second_user_data)
```
!!! info
A "**my_second_user" jelentése:
Közvetlenül adja át a `second_user_data` szótár kulcsait és értékeit kulcs-érték argumentumként, ami egyenértékű a következővel: `User(id=4, name="Mary", joined="2018-11-30")`
### Szerkesztő támogatás
Az összes keretrendszert úgy tervezték meg, hogy könnyen és intuitívan lehessen használni, minden döntést több szerkesztőn is teszteltek még a fejlesztés megkezdése előtt, hogy a legjobb fejlesztési élményt biztosítsák.
A legutóbbi Python fejlesztői felmérésben egyértelmű volt, <a href="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features" class="external-link" target= "_blank">hogy a leggyakrabban használt funkció az "automatikus kiegészítés"</a>.
A teljes **FastAPI** keretrendszer ennek kielégítésére épül. Az automatikus kiegészítés mindenhol működik.
Alig kell visszamennie a dokumentációhoz.
A szerkesztője a következőképpen segíthet Önnek:
* <a href="https://code.visualstudio.com/" class="external-link" target="_blank">Visual Studio Code-ban</a>:
![szerkesztő támogatása](https://fastapi.tiangolo.com/img/vscode-completion.png)
* <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharmban</a>:
![szerkesztő támogatása](https://fastapi.tiangolo.com/img/pycharm-completion.png)
Olyan kódkiegészítést kap, amelyet korábban lehetetlennek tartott. Például a „price” kulcs egy JSON-törzsben (amely lehet beágyazott), amely egy kérelemből származik.
Nem kell többé rossz kulcsneveket begépelni, oda-vissza lépkedni a dokumentumok között, vagy fel-le görgetni, hogy megtudja, hogy végre használta-e a `username` vagy a `user_name` értéket.
### Rövid
Mindenhez ésszerű **alapbeállítások** vannak, mindenhol választható konfigurációkkal. Az összes paraméter finomhangolható, hogy azt tegye, amire szüksége van, és amire az API-nak szüksége van.
De alapértelmezés szerint minden **"csak működik"**.
### Érvényesítés
* Érvényesítés a legtöbb (vagy az összes?) Python **adattípushoz**, beleértve:
* JSON objektumok (`dict`).
* JSON-tömb (`lista`), amely elemtípusokat határoz meg.
* String (`str`) mezők, amelyek meghatározzák a minimális és maximális hosszúságot.
* Számok (`int`, `float`) min és max értékekkel stb.
* Érvényesítés az egzotikusabb típusokhoz, mint például:
* URL.
* E-mail.
* UUID.
* ...és mások.
Az összes érvényesítést a jól bevált és robusztus **Pydantic** kezeli.
### Biztonság és hitelesítés
Biztonság és azonosítás integrálva. Kompromisszumok nélkül az adatbázisokkal vagy adatmodellekkel.
Az OpenAPI-ban meghatározott összes biztonsági séma, beleértve:
* HTTP Basic.
* **OAuth2** (**JWT tokenekkel** is). Tekintse meg az [OAuth2 with JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank} oktatóanyagát.
* API kulcsok:
* Fejlécek.
* Paraméterek lekérdezése.
* Cookie-k stb.
Plusz a Starlette összes biztonsági funkciója (beleértve a **session cookie-kat**).
Mindegyik újrafelhasználható eszközként és komponensként készült, amelyek könnyen integrálhatók a rendszerekkel, adattárolókkal, relációs és NoSQL adatbázisokkal stb.
### Függőség Injekció
A FastAPI egy rendkívül könnyen használható, de rendkívül hatékony <abbr title='más néven "összetevők", "erőforrások", "szolgáltatások", "szolgáltatók"'><strong>függőség-injekció</strong></abbr> rendszert tartalmaz.
* Még a függőségeknek is lehetnek függőségei, létrehozva a függőségek hierarchiáját vagy **"grafikonját"**.
* Mindent **automatikusan kezel** a keretrendszer.
* Minden függőség igényelhet adatokat a kérésekből, és **kibővítheti az útvonalművelet** megszorítását és az automatikus dokumentációt.
* **Automatikus érvényesítés** még a függőségekben meghatározott *elérési út* paramétereknél is.
* Komplex felhasználói hitelesítési rendszerek támogatása, **adatbázis-kapcsolatok** stb.
* **Nincs kompromisszum** adatbázisokkal, frontendekkel stb. De mindegyikkel könnyen integrálható.
### Korlátlan "bővítmények"
Vagy más módon, nincs szükség rájuk, importálja és használja a szükséges kódot.
Minden integrációt úgy terveztek meg, hogy olyan egyszerűen használható legyen (függőségekkel), hogy létrehozhat egy „beépülő modult” az alkalmazásához 2 kódsorból, ugyanazzal a struktúrával és szintaxissal, mint az *elérési út műveleteinél*.
### Tesztelve
* 100% <abbr title="Az automatikusan tesztelt kód mennyisége">tesztlefedettség</abbr>.
* 100%-ban <abbr title="Python típusú megjegyzések, ezzel a szerkesztője és a külső eszközei jobb támogatást nyújtanak a">jegyzett</abbr> kódbázishoz.
* Gyártási alkalmazásokban használják.
## Starlette funkciók
A **FastAPI** teljes mértékben kompatibilis a <a href="https://www.starlette.io/" class="external-link" target="_blank"><strong>Starlette</strong>-tel </a>, mivelhogy azon alapul. Tehát minden további Starlette kód is működni fog.
A `FastAPI` valójában a `Starlette` alosztálya. Tehát, ha már ismeri vagy használja a Starlette-et, a legtöbb funkció ugyanúgy fog működni.
A **FastAPI** segítségével megkapja a **Starlette** összes funkcióját (mivel a FastAPI csak Starlette szteroidokon):
* Komolyan lenyűgöző teljesítmény. Ez <a href="https://github.com/encode/starlette#performance" class="external-link" target="_blank">az egyik leggyorsabb Python-keretrendszer, amely egyenrangú a **NodeJS-sel** és **Go-val**</a>.
* **WebSocket** támogatás.
* Folyamat közbeni háttérfeladatok.
* Indítási és leállítási események.
* HTTPX-re épülő tesztkliens.
* **CORS**, GZip, statikus fájlok, streaming válaszok.
* **Session és Cookie** támogatás.
* 100%-os tesztlefedettség.
* 100%-os típusú megjegyzésekkel ellátott kódbázis.
## Pydantic funkciók
A **FastAPI** teljes mértékben kompatibilis <a href="https://pydantic-docs.helpmanual.io" class="external-link" target="_blank"><strong>Pydantic-kal</strong></a>, sőt, azon alapul. Tehát minden további Pydantic kód is működni fog.
Beleértve a Pydantic alapú külső könyvtárakat is, mint <abbr title="Object-Relational Mapper">ORM</abbr>, <abbr title="Object-Document Mapper">ODM</abbr> adatbázisokhoz.
Ez azt is jelenti, hogy sok esetben ugyanazt az objektumot, amit egy kérésből kapunk, **közvetlenül az adatbázisnak** továbbíthatjuk, mivel minden automatikusan érvényesítésre kerül.
Ugyanez fordítva is érvényes, sok esetben az adatbázisból kapott objektumot **közvetlenül a kliensnek** adhatod át.
A **FastAPI** segítségével megkapja a **Pydantic** összes funkcióját (mivel a FastAPI a Pydanticon alapul az összes adatkezeléshez):
* **Nincs agyafúrás**:
* Nincs új megtanulni való sémadefiníciós mikronyelv.
* Ha ismeri a Python típusokat, tudja, hogyan kell használni a Pydantic-ot.
* Szépen kapcsolódik az **<abbr title="Integrated Development Environment, hasonló a kódszerkesztőhöz">IDE</abbr>/<abbr title="A program, amely ellenőrzi a kódhibákat">linter</abbr>/agy**-hez:
* Mivel a pydantikus adatstruktúrák csak az Ön által meghatározott osztályok példányai; Az automatikus kiegészítésnek, a lintingnek, a mypy-nek és az intuíciónak mind megfelelően működnie kell az ellenőrzött adatokkal.
* Érvényesítsen **összetett struktúrákat**:
* Hierarchikus Pydantic modellek, Python típusú listák és szótárak stb. használata.
* Az érvényesítők pedig lehetővé teszik az összetett adatsémák egyértelműen és egyszerűen definiálását, ellenőrzését és JSON-sémaként dokumentálását.
* Mélyen **beágyazott JSON** objektumokkal rendelkezhet, és mindegyiket ellenőrizheti és megjegyzésekkel látja el.
* **Bővíthető**:
* A Pydantic lehetővé teszi egyéni adattípusok meghatározását, vagy kiterjesztheti az érvényesítést módszerekkel a validátor dekorátorral díszített modelleken.
* 100%-os tesztlefedettség.

View File

@ -1,472 +0,0 @@
{!../../../docs/missing-translation.md!}
<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 framework, high performance, easy to learn, fast to code, ready for production</em>
</p>
<p align="center">
<a href="https://github.com/tiangolo/fastapi/actions?query=workflow%3ATest+event%3Apush+branch%3Amaster" target="_blank">
<img src="https://github.com/tiangolo/fastapi/workflows/Test/badge.svg?event=push&branch=master" alt="Test">
</a>
<a href="https://coverage-badge.samuelcolvin.workers.dev/redirect/tiangolo/fastapi" target="_blank">
<img src="https://coverage-badge.samuelcolvin.workers.dev/tiangolo/fastapi.svg" 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>
<a href="https://pypi.org/project/fastapi" target="_blank">
<img src="https://img.shields.io/pypi/pyversions/fastapi.svg?color=%2334D058" alt="Supported Python versions">
</a>
</p>
---
**Documentation**: <a href="https://fastapi.tiangolo.com" target="_blank">https://fastapi.tiangolo.com</a>
**Source Code**: <a href="https://github.com/tiangolo/fastapi" target="_blank">https://github.com/tiangolo/fastapi</a>
---
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.7+ based on standard Python type hints.
The key features are:
* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).
* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *
* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *
* **Intuitive**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging.
* **Easy**: Designed to be easy to use and learn. Less time reading docs.
* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.
* **Robust**: Get production-ready code. With automatic interactive documentation.
* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> (previously known as Swagger) and <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>.
<small>* estimation based on tests on an internal development team, building production applications.</small>
## Sponsors
<!-- 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">Other sponsors</a>
## Opinions
"_[...] 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._"
<div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/tiangolo/fastapi/pull/26" target="_blank"><small>(ref)</small></a></div>
---
"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_"
<div style="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/" target="_blank"><small>(ref)</small></a></div>
---
"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_"
<div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank"><small>(ref)</small></a></div>
---
"_Im over the moon excited about **FastAPI**. Its so fun!_"
<div style="text-align: right; margin-right: 10%;">Brian Okken - <strong><a href="https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855" target="_blank">Python Bytes</a> podcast host</strong> <a href="https://twitter.com/brianokken/status/1112220079972728832" target="_blank"><small>(ref)</small></a></div>
---
"_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._"
<div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong><a href="https://www.hug.rest/" target="_blank">Hug</a> creator</strong> <a href="https://news.ycombinator.com/item?id=19455465" target="_blank"><small>(ref)</small></a></div>
---
"_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 [...]_"
<div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong><a href="https://explosion.ai" target="_blank">Explosion AI</a> founders - <a href="https://spacy.io" target="_blank">spaCy</a> creators</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>
---
"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._"
<div style="text-align: right; margin-right: 10%;">Deon Pillsbury - <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/" target="_blank"><small>(ref)</small></a></div>
---
## **Typer**, the FastAPI of CLIs
<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>
If you are building a <abbr title="Command Line Interface">CLI</abbr> app to be used in the terminal instead of a web API, check out <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>.
**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀
## Requirements
Python 3.7+
FastAPI stands on the shoulders of giants:
* <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a> for the web parts.
* <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> for the data parts.
## Installation
<div class="termy">
```console
$ pip install fastapi
---> 100%
```
</div>
You will also need an ASGI server, for production such as <a href="https://www.uvicorn.org" class="external-link" target="_blank">Uvicorn</a> or <a href="https://github.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>.
<div class="termy">
```console
$ pip install "uvicorn[standard]"
---> 100%
```
</div>
## Example
### Create it
* Create a file `main.py` with:
```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>Or use <code>async def</code>...</summary>
If your code uses `async` / `await`, use `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}
```
**Note**:
If you don't know, check the _"In a hurry?"_ section about <a href="https://fastapi.tiangolo.com/async/#in-a-hurry" target="_blank">`async` and `await` in the docs</a>.
</details>
### Run it
Run the server with:
<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>About the command <code>uvicorn main:app --reload</code>...</summary>
The command `uvicorn main:app` refers to:
* `main`: the file `main.py` (the Python "module").
* `app`: the object created inside of `main.py` with the line `app = FastAPI()`.
* `--reload`: make the server restart after code changes. Only do this for development.
</details>
### Check it
Open your browser at <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>.
You will see the JSON response as:
```JSON
{"item_id": 5, "q": "somequery"}
```
You already created an API that:
* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.
* Both _paths_ take `GET` <em>operations</em> (also known as HTTP _methods_).
* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.
* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.
### Interactive API docs
Now go to <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
You will see the automatic interactive API documentation (provided by <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>):
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
### Alternative API docs
And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
You will see the alternative automatic documentation (provided by <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>):
![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
## Example upgrade
Now modify the file `main.py` to receive a body from a `PUT` request.
Declare the body using standard Python types, thanks to 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}
```
The server should reload automatically (because you added `--reload` to the `uvicorn` command above).
### Interactive API docs upgrade
Now go to <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
* The interactive API documentation will be automatically updated, including the new body:
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
* Click on the button "Try it out", it allows you to fill the parameters and directly interact with the API:
![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)
* Then click on the "Execute" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:
![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)
### Alternative API docs upgrade
And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
* The alternative documentation will also reflect the new query parameter and body:
![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)
### Recap
In summary, you declare **once** the types of parameters, body, etc. as function parameters.
You do that with standard modern Python types.
You don't have to learn a new syntax, the methods or classes of a specific library, etc.
Just standard **Python 3.7+**.
For example, for an `int`:
```Python
item_id: int
```
or for a more complex `Item` model:
```Python
item: Item
```
...and with that single declaration you get:
* Editor support, including:
* Completion.
* Type checks.
* Validation of data:
* Automatic and clear errors when the data is invalid.
* Validation even for deeply nested JSON objects.
* <abbr title="also known as: serialization, parsing, marshalling">Conversion</abbr> of input data: coming from the network to Python data and types. Reading from:
* JSON.
* Path parameters.
* Query parameters.
* Cookies.
* Headers.
* Forms.
* Files.
* <abbr title="also known as: serialization, parsing, marshalling">Conversion</abbr> of output data: converting from Python data and types to network data (as JSON):
* Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).
* `datetime` objects.
* `UUID` objects.
* Database models.
* ...and many more.
* Automatic interactive API documentation, including 2 alternative user interfaces:
* Swagger UI.
* ReDoc.
---
Coming back to the previous code example, **FastAPI** will:
* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.
* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.
* If it is not, the client will see a useful, clear error.
* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.
* As the `q` parameter is declared with `= None`, it is optional.
* Without the `None` it would be required (as is the body in the case with `PUT`).
* For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
* Check that it has a required attribute `name` that should be a `str`.
* Check that it has a required attribute `price` that has to be a `float`.
* Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
* All this would also work for deeply nested JSON objects.
* Convert from and to JSON automatically.
* Document everything with OpenAPI, that can be used by:
* Interactive documentation systems.
* Automatic client code generation systems, for many languages.
* Provide 2 interactive documentation web interfaces directly.
---
We just scratched the surface, but you already get the idea of how it all works.
Try changing the line with:
```Python
return {"item_name": item.name, "item_id": item_id}
```
...from:
```Python
... "item_name": item.name ...
```
...to:
```Python
... "item_price": item.price ...
```
...and see how your editor will auto-complete the attributes and know their types:
![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)
For a more complete example including more features, see the <a href="https://fastapi.tiangolo.com/tutorial/">Tutorial - User Guide</a>.
**Spoiler alert**: the tutorial - user guide includes:
* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**.
* How to set **validation constraints** as `maximum_length` or `regex`.
* A very powerful and easy to use **<abbr title="also known as components, resources, providers, services, injectables">Dependency Injection</abbr>** system.
* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.
* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).
* **GraphQL** integration with <a href="https://strawberry.rocks" class="external-link" target="_blank">Strawberry</a> and other libraries.
* Many extra features (thanks to Starlette) as:
* **WebSockets**
* extremely easy tests based on HTTPX and `pytest`
* **CORS**
* **Cookie Sessions**
* ...and more.
## Performance
Independent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as <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">one of the fastest Python frameworks available</a>, only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)
To understand more about it, see the section <a href="https://fastapi.tiangolo.com/benchmarks/" class="internal-link" target="_blank">Benchmarks</a>.
## Optional Dependencies
Used by Pydantic:
* <a href="https://github.com/JoshData/python-email-validator" target="_blank"><code>email_validator</code></a> - for email validation.
Used by Starlette:
* <a href="https://www.python-httpx.org" target="_blank"><code>httpx</code></a> - Required if you want to use the `TestClient`.
* <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - Required if you want to use the default template configuration.
* <a href="https://andrew-d.github.io/python-multipart/" target="_blank"><code>python-multipart</code></a> - Required if you want to support form <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>, with `request.form()`.
* <a href="https://pythonhosted.org/itsdangerous/" target="_blank"><code>itsdangerous</code></a> - Required for `SessionMiddleware` support.
* <a href="https://pyyaml.org/wiki/PyYAMLDocumentation" target="_blank"><code>pyyaml</code></a> - Required for Starlette's `SchemaGenerator` support (you probably don't need it with FastAPI).
* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - Required if you want to use `UJSONResponse`.
Used by FastAPI / Starlette:
* <a href="https://www.uvicorn.org" target="_blank"><code>uvicorn</code></a> - for the server that loads and serves your application.
* <a href="https://github.com/ijl/orjson" target="_blank"><code>orjson</code></a> - Required if you want to use `ORJSONResponse`.
You can install all of these with `pip install "fastapi[all]"`.
## License
This project is licensed under the terms of the MIT license.

View File

@ -1,537 +0,0 @@
# Python Típusok Bevezető
A Python támogatja az opcionális "típustippeket" (más néven "típusjegyzeteket").
Ezek a **"típustippek"** vagy annotációk egy speciális szintaxis, amely lehetővé teszi egy változó <abbr title="például: str, int, float, bool">típusának</abbr> deklarálását.
A változók típusainak deklarálásával a szerkesztők és eszközök jobb támogatást nyújthatnak.
Ez csak egy **gyors útmutató/frissítő** a Python típustippekről. Csak a **FastAPI** használatához szükséges minimumot fedi le... ami valójában nagyon kevés.
A **FastAPI** mind ezeken a típustippeken alapul, amelyek számos előnnyel járnak.
De még ha soha nem is használja a **FastAPI-t**, akkor is előnyös lenne, ha tanulna róluk egy kicsit.
!!! jegyzet
Ha Ön már mindent tud a típustippekről, ugorjon a következő fejezetre.
## Motiváció
Kezdjük egy egyszerű példával:
``` Python
{!../../../docs_src/python_types/tutorial001.py!}
```
A program meghívásának kimenete:
```
John Doe
```
A függvény a következőket teszi:
* Veszi a `first_name`-et és a `last_name`-et.
* Mindegyik első betűjét nagybetűvé alakítja a `title()`-lel.
* <abbr title="Egybe rakja őket. Egymás után a tartalommal.">Összefűzi</abbr> őket egy szóközzel a közepén.
``` Python hl_lines="2"
{!../../../docs_src/python_types/tutorial001.py!}
```
### Szerkesse
Ez egy nagyon egyszerű program.
De most képzelje el, hogy a semmiből írja.
Egy ponton elkezdte volna a függvény definícióját, készen voltak a paraméterek...
De akkor meg kell hívnia "azt a módszert, amely az első betűt nagybetűvé alakítja".
`upper` volt? Vagy `uppercase`? `first_uppercase`? `capitalize`?
Ezután próbálkozik egy idős programozó barátjával, a szerkesztő automatikus kiegészítésével.
Be kell írnia a függvény első paraméterét, a `first_name`-et, majd egy pontot (`.`), majd megnyomja a `Ctrl+Szóköz` billentyűt a befejezés elindításához.
De sajnos semmi hasznosat nem kap:
<img src="/img/python-types/image01.png">
### Típusok hozzáadása
Módosítsunk egyetlen sort az előző verzióhoz képest.
Pontosan ezt a töredéket, a függvény paramétereit változtatjuk meg ebből:
``` Python
first_name, last_name
```
arra, hogy:
``` Python
first_name: str, first_name: str
```
Ez az.
Ezek a "típustippek":
``` Python hl_lines="1"
{!../../../docs_src/python_types/tutorial002.py!}
```
Ez nem ugyanaz, mint az alapértelmezett értékek deklarálása, mint például:
``` Python
first_name="john", last_name="doe"
```
Ez két különböző dolog.
Kettőspontokat (`:`) használunk, nem egyenlőségjelet (`=`).
A típustippek hozzáadása általában nem változtatja meg azt, ami történik, mint ami nélkülük történne.
De most képzelje el, hogy ismét a függvény létrehozásának kellős közepén van, de típusjelekkel.
Ugyanazon a ponton megpróbálja elindítani az automatikus kiegészítést a `Ctrl+Szóköz` billentyűkombinációval, és ezt látja:
<img src="/img/python-types/image02.png">
Ezzel a lehetőségeket látva görgethet, amíg meg nem találja azt, amelyik már ismerős:
<img src="/img/python-types/image03.png">
## Több motiváció
Nézze meg ezt a függvény, ennek már vannak típus tippjei:
``` Python hl_lines="1"
{!../../../docs_src/python_types/tutorial003.py!}
```
Mivel a szerkesztő ismeri a változók típusát, nem csak kódkiegészítést kap, hanem hibaellenőrzést is:
<img src="/img/python-types/image04.png">
Most már tudja, hogy ki kell javítana, alakítsa át az `age` változót `str(age)` karakterláncra:
``` Python hl_lines="2"
{!../../../docs_src/python_types/tutorial004.py!}
```
## Típusok deklarálása
Épp most látta a fő helyet a típustippek deklarálásához. Függvényparaméterként.
Ez egyben a fő hely, ahol ezeket a **FastAPI**-val használja.
### Egyszerű típusok
Az összes szabványos Python típust deklarálhatja, nem csak az str.
Használhat például:
* `int`
* `float`
* `bool`
* `byte`
``` Python hl_lines="1"
{!../../../docs_src/python_types/tutorial005.py!}
```
### Általános típusok típusparaméterekkel
Vannak olyan adatstruktúrák, amelyek más értékeket is tartalmazhatnak, mint például a `dict`, `list`, `set` és `tuple`. És a belső értékeknek is lehet saját típusuk.
Ezeket a belső típusokkal rendelkező típusokat "**általános**" típusoknak nevezzük. És lehet deklarálni őket, akár belső típusaikkal együtt is.
A típusok és a belső típusok deklarálásához használhatja a szabványos Python `typing` modult. Kifejezetten az ilyen típustippek támogatására létezik.
#### A Python újabb verziói
A `typing`-et használó szintaxis **kompatibilis** az összes verzióval, a Python 3.6-tól a legújabb verziókig, beleértve a Python 3.9-et, Python 3.10-et stb.
Ahogy a Python fejlődik, az **újabb verziók** továbbfejlesztett támogatást nyújtanak ezekhez a típusjegyzetekhez, és sok esetben nem is kell importálnia és használnia a `typing` modult a típusjegyzetek deklarálásához.
Ha használhat a Python egy újabb verzióját a projekthez, akkor ezt az extra egyszerűséget kihasználhatja.
Az összes dokumentumban találhatók a Python egyes verzióival kompatibilis példák (ha van különbség).
Például a „**Python 3.6+**” azt jelenti, hogy kompatibilis a Python 3.6 vagy újabb verzióival (beleértve a 3.7, 3.8, 3.9, 3.10, stb.) A „**Python 3.9+**” pedig azt jelenti, hogy kompatibilis a Python 3.9 vagy újabb verziójával (beleértve a 3.10-et stb.).
Ha használhatja a **a Python legújabb verzióit**, használja a példákat a legújabb verzióhoz, ezeknek lesz a **legjobb és legegyszerűbb szintaxisa**, például „**Python 3.10+**”.
#### Lista
Például definiáljunk egy változót úgy, hogy az az `str` "listája" legyen.
=== "Python 3.9+"
Deklarálja a változót ugyanazzal a kettőspont (`:`) szintaxissal.
Típusként írja be a `list` szót.
Mivel a lista néhány belső típust tartalmaz, ezeket szögletes zárójelbe kell tenni:
``` Python hl_lines="1"
{!> ../../../docs_src/python_types/tutorial006_py39.py!}
```
=== "Python 3.6+"
From `typing` import `List` (nagy `L` betűvel):
``` Python hl_lines="1"
{!> ../../../docs_src/python_types/tutorial006.py!}
```
Deklarálja a változót ugyanazzal a kettőspont (`:`) szintaxissal.
Típusként adja meg azt a `List`-át, amelyet a `typing`-ból importált.
Mivel a lista néhány belső típust tartalmaz, ezeket szögletes zárójelbe kell tenni:
``` Python hl_lines="4"
{!> ../../../docs_src/python_types/tutorial006.py!}
```
!!! info
A szögletes zárójelben lévő belső típusokat "típusparamétereknek" nevezzük.
Ebben az esetben az `str` a `List`-nek (vagy a Python 3.9-es és újabb verzióiban a `list`-nek) átadott típusparaméter.
Ez azt jelenti, hogy az `items` változó egy `list`, és ebben a listában minden elem egy `str`.
!!! tipp
Ha Python 3.9-et vagy újabb verziót használ, akkor nem kell importálnia a `List`-et a `typing`-ból, helyette használhatja ugyanazt a szokásos `list` típust.
Ezzel a szerkesztője még a lista elemeinek feldolgozása közben is támogatást nyújthat:
<img src="/img/python-types/image05.png">
Típusok nélkül ezt szinte lehetetlen elérni.
Figyelje meg, hogy az `item` változó az `items` lista egyik eleme.
És mégis, a szerkesztő tudja, hogy ez egy `str`, és ehhez támogatást nyújt.
#### Tuple és halmaz
Ugyanezt tennéd, ha `tuple`-t és halmazt (`set`-et) deklarálnál:
=== "Python 3.9+"
``` Python hl_lines="1"
{!> ../../../docs_src/python_types/tutorial007_py39.py!}
```
=== "Python 3.6+"
``` Python hl_lines="1 4"
{!> ../../../docs_src/python_types/tutorial007.py!}
```
Ez azt jelenti, hogy:
* Az `items_t` változó egy `tuple`, amely 3 elemből áll, egy `int`, egy másik `int` és egy `str`.
* Az `items_s` változó egy `set`, és minden eleme `bytes` típusú.
#### Szótár
A `dict` (szótár) meghatározásához 2 típusú paramétert kell átadni, vesszővel elválasztva.
Az első típusú paraméter a `dict` kulcsaira vonatkozik.
A második típusú paraméter a `dict` értékeire vonatkozik:
=== "Python 3.9+"
``` Python hl_lines="1"
{!> ../../../docs_src/python_types/tutorial008_py39.py!}
```
=== "Python 3.6+"
``` Python hl_lines="1 4"
{!> ../../../docs_src/python_types/tutorial008.py!}
```
Ez azt jelenti, hogy:
* A `prices` változó egy `dict`:
* A `dict` kulcsai `str` típusúak (mondjuk az egyes elemek neve).
* A `dict` értékei `float` típusúak (tegyük fel, hogy az egyes cikkek ára).
#### Unió
Deklarálhatja, hogy egy változó **többféle** lehet, például egy `int` vagy egy `str`.
A Python 3.6 és újabb verzióiban (beleértve a Python 3.10-et is) használhatja az `Union` típust a `typing` modulból, és szögletes zárójelbe teheti az elfogadandó típusokat.
A Python 3.10-ben van egy **új szintaxis** is, ahol a lehetséges típusokat elválaszthatja egy <abbr title='más néven "bitenkénti vagy operátor"-ral, de ez a jelentés nem releváns'>függőleges sáv (`|` )</abbr>.
=== "Python 3.10+"
``` Python hl_lines="1"
{!> ../../../docs_src/python_types/tutorial008b_py310.py!}
```
=== "Python 3.6+"
``` Python hl_lines="1 4"
{!> ../../../docs_src/python_types/tutorial008b.py!}
```
Ez mindkét esetben azt jelenti, hogy az `item` lehet `int` vagy `str`.
#### Esetleg `None`.
Deklarálhatja, hogy egy értéknek lehet egy típusa, például az `str`, de lehet `None` is.
A Python 3.6-os és újabb verzióiban (beleértve a Python 3.10-et is) deklarálhatja és használhatja az `Optional` importálásával a `typing` modulból.
``` Python hl_lines="1 4"
{!../../../docs_src/python_types/tutorial009.py!}
```
Az `Optional[str]` használata az `str` helyett lehetővé teszi, hogy a szerkesztő segít felismerni azokat a hibákat, ahol feltételezhető, hogy egy érték mindig `str`, holott valójában az is lehet, hogy `None`.
Az `Optional[Something]` valójában az `Union[Something, None]` lerövidítése, ezek egyenértékűek.
Ez azt is jelenti, hogy a Python 3.10-ben használhatja a `Something | None` kifejezést:
=== "Python 3.10+"
``` Python hl_lines="1"
{!> ../../../docs_src/python_types/tutorial009_py310.py!}
```
=== "Python 3.6+"
``` Python hl_lines="1 4"
{!> ../../../docs_src/python_types/tutorial009.py!}
```
=== "Python 3.6+ alternatíva"
``` Python hl_lines="1 4"
{!> ../../../docs_src/python_types/tutorial009b.py!}
```
#### Az `Union` vagy az `Optional` használata
Ha 3.10-nél régebbi Python-verziót használ, itt van a tipp az én nagyon **szubjektív** nézőpontomból:
* 🚨 Kerülje az `Optional[SomeType]` használatát
* Ehelyett ✨ **használja az `Union[SomeType, None]`** ✨ lehetőséget.
Mindkettő ekvivalens, és ugyanazt éri el, de én az `Union` szót javaslom az `Optional` helyett, mert a "**opcionális**" szó azt sugallja, hogy az érték nem kötelező, viszont valójában azt jelenti, hogy "lehet `None` is", akkor is ha a típus megadása kötelező.
Úgy gondolom, hogy az `Union[SomeType, None]` egyértelműbb a jelentéséről.
Ez csak a szavakról és a nevekről szól. De ezek a szavak befolyásolhatják, hogy Ön és csapattársai hogyan gondolkodnak a kódról.
Példaként vegyük ezt a függvényt:
``` Python hl_lines="1 4"
{!../../../docs_src/python_types/tutorial009c.py!}
```
A `name` paraméter `Optional[str]`-ként van definiálva, de **nem opcionális**, a függvény nem hívható meg a paraméter nélkül:
``` Python
say_hi() # Ó, nem, ez hibát okoz! 😱
```
A `name` paraméter **továbbra is kötelező** (nem *opcionális*), mert nincs alapértelmezett értéke. Ennek ellenére a `name` elfogadja a `None` értéket:
``` Python
say_hi(name=None) # Ez működik, None egy érvényes típus🎉
```
A jó hír az, hogy ha már a Python 3.10-et használja, nem kell aggódnia emiatt, mivel egyszerűen használhatja a `|`-t a típusok unióinak meghatározásához:
``` Python hl_lines="1 4"
{!../../../docs_src/python_types/tutorial009c_py310.py!}
```
És akkor nem kell aggódnia az olyan nevek miatt, mint az `Optional` és az `Union`. 😎
#### Általános típusok
Az ilyen típusú paramétereket szögletes zárójelben **Általános típusoknak** vagy **Általánosoknak** nevezzük, például:
=== "Python 3.10+"
Ugyanazokat a beépített típusokat használhatja általános típusként (szögletes zárójelekkel és típusokkal):
* `list`
* `tuple`.
* `set`
* `dict`
És ugyanaz, mint a Python 3.6-nál, a `typing` modulból:
* `Union`.
* `Optional` (ugyanaz, mint a Python 3.6-nál)
* ...és mások.
A Python 3.10-ben az `Union` és az `Optional` általános kifejezések alternatívájaként használhatja a <abbr title='más néven "bitenkénti vagy operátor"-t, de ez a jelentés itt nem releváns'>függőleges sáv (`|`)</abbr> típusok uniójának deklarálásához, az sokkal jobb és egyszerűbb.
=== "Python 3.9+"
Ugyanazokat a beépített típusokat használhatja általános típusként (szögletes zárójelekkel és típusokkal):
* `lista`
* `tuple`.
* `set`
* `dict`
És ugyanaz, mint a Python 3.6-nál, a `typing` modulból:
* `Union`.
* `Optional`.
* ...és mások.
=== "Python 3.6+"
* `List`.
* `Tuple`.
* `Set`.
* `Dict`.
* `Union`.
* `Optional`.
* ...és mások.
### Osztályok mint típus
Egy osztályt is deklarálhat a változó típusaként.
Tegyük fel, hogy van egy `Person` osztálya, akinek egy neve van:
``` Python hl_lines="1-3"
{!../../../docs_src/python_types/tutorial010.py!}
```
Ezután deklarálhat egy változót `Person` típusúnak:
``` Python hl_lines="6"
{!../../../docs_src/python_types/tutorial010.py!}
```
És akkor ismét megkapja az összes szerkesztő támogatást:
<img src="/img/python-types/image06.png">
Figyeld meg, hogy ez azt jelenti, hogy "a `one_person` a `Person` osztály **példánya**".
Ez nem azt jelenti, hogy "a `one_person` a `Person` nevű **osztály**".
## Pydantikus modellek
A <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> egy Python-könyvtár adatok ellenőrzésére.
Az adatok "alakját" attribútumokkal rendelkező osztályokként deklarálod.
És minden attribútumnak van típusa.
Ezután létrehoz egy példányt az adott osztályból néhány értékkel, és az érvényesíti az értékeket, átalakítja őket a megfelelő típusra (ha ez a helyzet), és ad egy objektumot az összes adattal.
És megkapja az összes szerkesztő támogatást az eredményül kapott objektummal.
Példa a hivatalos Pydantic dokumentációból:
=== "Python 3.10+"
``` Python
{!> ../../../docs_src/python_types/tutorial011_py310.py!}
```
=== "Python 3.9+"
``` Python
{!> ../../../docs_src/python_types/tutorial011_py39.py!}
```
=== "Python 3.6+"
``` Python
{!> ../../../docs_src/python_types/tutorial011.py!}
```
!!! info
Ha többet szeretne megtudni a Pydanticról, tekintse meg a <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">dokumentumációját</a>.
Az egész **FastAPI** Pydantic-on alapul.
Mindezekből a gyakorlatban sokkal többet fog látni a [Oktatói anyag - Felhasználói Útmutató](tutorial/index.md){.internal-link target=_blank} részben.
!!! tipp
A Pydantic különleges viselkedést mutat, ha az `Optional` vagy a `Union[Something, None]`-t alapértelmezett érték nélkül használja. Erről bővebben a Pydantic dokumentumentációban a <a href="https://pydantic-docs.helpmanual .io/usage/models/#required-optional-fields" class="external-link" target="_blank">Kötelező opcionális mezők</a> fejezetben olvashat.
## Típustippek metaadat-jegyzetekkel
A Python rendelkezik egy olyan funkcióval is, amely lehetővé teszi **további metaadatok** elhelyezését az ilyen típusú tippekben az `Annotated` használatával.
=== "Python 3.9+"
A Python 3.9-ben az `Annotated` a standard könyvtár része, így importálhatja a `typing` modulból.
``` Python hl_lines="1 4"
{!> ../../../docs_src/python_types/tutorial013_py39.py!}
```
=== "Python 3.6+"
A Python 3.9 alatti verziókban az "Annotation" importálható a "typing_extensions" modulból.
Alapból telepítve lesz a **FastAPI**-val.
``` Python hl_lines="1 4"
{!> ../../../docs_src/python_types/tutorial013.py!}
```
Maga a Python nem csinál semmit ezzel az `Annotated`-del. A szerkesztők és egyéb eszközök esetében a típus továbbra is `str`.
De használhatja ezt a helyet a `Annotated` mezőben, hogy a **FastAPI-t** további metaadatokkal lássa el arról, hogyan szeretné, hogy az alkalmazás működjön.
Fontos megjegyezni, hogy **az első *típusparaméter***, amelyet az `Annotated`-nek továbbít, a **tényleges típus**. A maradék csak metaadat más eszközöknek.
Egyelőre csak azt kell tudnia, hogy az `Annotated` létezik, és hogy ez standard Python. 😎
Később meglátja, milyen **hasznos** lehet.
!!! tipp
Az a tény, hogy ez egy **standard Python**, azt jelenti, hogy továbbra is a **lehető legjobb fejlesztői élményt** kapja meg a szerkesztőjében, a kód elemzéséhez és újrafeldolgozásához használt eszközökkel, stb. ✨
És azt is, hogy a kódja kompatibilis lesz sok más Python-eszközzel és -könyvtárral. 🚀
## Típustippek a **FastAPI-ba**
A **FastAPI** kihasználja az ilyen típusú tippeket számos dolog elvégzésére.
A **FastAPI**-val a paramétereket típustippekkel deklarálja, és a következőket kapja:
* **A szerkesztő támogatása**.
* **Típusellenőrzés**.
...és a **FastAPI** ugyanazokat a deklarációkat használja:
* **Követelmények meghatározása**: kérési útvonal paramétereiből, lekérdezési paramétereiből, fejlécekből, törzsekből, függőségekből stb.
* **Adatok konvertálása**: a kérésből a kívánt típusba.
* **Adatok érvényesítése**: minden kérésből származik:
* **Automatikus hibák** generálása visszaküldésre kerül az ügyfélnek, ha az adatok érvénytelenek.
* **Dokumentálja** az API-t OpenAPI használatával:
* amelyet azután az automatikus interaktív dokumentációs felhasználói felületek használnak.
Lehet, hogy mindez elvontnak hangzik. Ne aggódjon. Mindezt működés közben a [Oktatói anyag - Felhasználói Útmutató](tutorial/index.md){.internal-link target=_blank} részben láthatja.
A fontos dolog az, hogy a standard Python típusok használatával egyetlen helyen (ahelyett, hogy több osztályt, dekorátort stb. adna hozzá), a **FastAPI** elvégzi Ön helyett a sok munkát.
!!! info
Ha már végignézte az összes oktatóanyagot, és visszatért, hogy többet megtudjon a típusokról, jó forrás ez <a href="https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html" class="external-link " target="_blank">a "puska" a `mypy`-től</a>.