Co-authored-by: pr-submit[bot] <pr-submit[bot]@users.noreply.github.com> Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com> Co-authored-by: pr-push[bot] <pr-push[bot]@users.noreply.github.com>
15 KiB
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
FastAPI рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
FastAPI рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрддрд╛ рд╣реИ:
рдЦреБрд▓реЗ рдорд╛рдирдХреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд
- API рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП OpenAPI, рдЬрд┐рд╕рдореЗрдВ path operations, parameters, request bodies, security, рдЖрджрд┐ рдХреА рдШреЛрд╖рдгрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
- JSON Schema рдХреЗ рд╕рд╛рде automatic data model documentation (рдХреНрдпреЛрдВрдХрд┐ OpenAPI рд╕реНрд╡рдпрдВ JSON Schema рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ)ред
- рдЗрди рдорд╛рдирдХреЛрдВ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛, рдПрдХ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рджред рдКрдкрд░ рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рдкрд░рдд рдХреА рддрд░рд╣ рдирд╣реАрдВред
- рдпрд╣ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ automatic client code generation рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
Automatic docs
Interactive API documentation рдФрд░ exploration web user interfacesред рдХреНрдпреЛрдВрдХрд┐ framework OpenAPI рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ 2 default рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
- Swagger UI, interactive exploration рдХреЗ рд╕рд╛рде, рдЕрдкрдиреЗ API рдХреЛ рд╕реАрдзреЗ browser рд╕реЗ call рдФрд░ test рдХрд░реЗрдВред
- ReDoc рдХреЗ рд╕рд╛рде рд╡реИрдХрд▓реНрдкрд┐рдХ API documentationред
рд╕рд┐рд░реНрдлрд╝ рдЖрдзреБрдирд┐рдХ Python
рдпрд╣ рд╕рдм standard Python type declarations рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ (Pydantic рдХреА рдмрджреМрд▓рдд)ред рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирдпрд╛ syntax рдирд╣реАрдВред рд╕рд┐рд░реНрдлрд╝ standard modern Pythonред
рдЕрдЧрд░ рдЖрдкрдХреЛ Python types рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕рдХрд╛ 2 рдорд┐рдирдЯ рдХрд╛ рдЫреЛрдЯрд╛ refresher рдЪрд╛рд╣рд┐рдП (рднрд▓реЗ рд╣реА рдЖрдк FastAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рддреЗ рд╣реЛрдВ), рддреЛ рдЫреЛрдЯрд╛ tutorial рджреЗрдЦреЗрдВ: Python Typesред
рдЖрдк types рдХреЗ рд╕рд╛рде standard Python рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
from datetime import date
from pydantic import BaseModel
# рдХрд┐рд╕реА variable рдХреЛ str рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ
# рдФрд░ function рдХреЗ рдЕрдВрджрд░ editor support рдкрд╛рдПрдБ
def main(user_id: str):
return user_id
# рдПрдХ Pydantic model
class User(BaseModel):
id: int
name: str
joined: date
рдлрд┐рд░ рдЙрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
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)
/// note | рдиреЛрдЯ
**second_user_data рдХрд╛ рдорддрд▓рдм рд╣реИ:
second_user_data dict рдХреА keys рдФрд░ values рдХреЛ рд╕реАрдзреЗ key-value arguments рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЬреЛ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ: User(id=4, name="Mary", joined="2018-11-30")
///
Editor support
рдкреВрд░реЗ framework рдХреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рд╕рд╣рдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, development рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╕рднреА рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рдХрдИ editors рдкрд░ test рдХрд┐рдпрд╛ рдЧрдпрд╛, рддрд╛рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ development experience рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
Python developer surveys рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ "autocompletion" рд╣реИред
рдкреВрд░рд╛ FastAPI framework рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Autocompletion рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЖрдкрдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА docs рдкрд░ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ editor рдЖрдкрдХреА рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
- Visual Studio Code рдореЗрдВ:
- PyCharm рдореЗрдВ:
рдЖрдкрдХреЛ рдРрд╕реЗ code рдореЗрдВ completion рдорд┐рд▓реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рдЕрд╕рдВрднрд╡ рднреА рдорд╛рди рд╕рдХрддреЗ рдереЗред рдЬреИрд╕реЗ, рдХрд┐рд╕реА request рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ JSON body (рдЬреЛ nested рднреА рд╣реЛ рд╕рдХрддрд╛ рдерд╛) рдХреЗ рдЕрдВрджрд░ price keyред
рдЕрдм рдЧрд▓рдд key names рдЯрд╛рдЗрдк рдХрд░рдиреЗ, docs рдХреЗ рдмреАрдЪ рдЖрдЧреЗ-рдкреАрдЫреЗ рдЬрд╛рдиреЗ, рдпрд╛ рдпрд╣ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░-рдиреАрдЪреЗ scroll рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рдХрд┐ рдЖрдкрдиреЗ рдЖрдЦрд┐рд░ username рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдпрд╛ user_nameред
рд╕рдВрдХреНрд╖рд┐рдкреНрдд
рд╣рд░ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рдордЭрджрд╛рд░ defaults рд╣реИрдВ, рдФрд░ рд╣рд░ рдЬрдЧрд╣ optional configurations рд╣реИрдВред рд╕рднреА parameters рдХреЛ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА API define рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП fine-tune рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди default рд░реВрдк рд╕реЗ, рд╕рдм рдХреБрдЫ "рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"ред
Validation
-
рдЕрдзрд┐рдХрд╛рдВрд╢ (рдпрд╛ рд╕рднреА?) Python data types рдХреЗ рд▓рд┐рдП validation, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- JSON objects (
dict)ред - JSON array (
list) рдЬреЛ item types define рдХрд░рддрд╛ рд╣реИред - String (
str) fields, рдЬрд┐рдирдореЗрдВ min рдФрд░ max lengths define рд╣реЛрддреА рд╣реИрдВред - Numbers (
int,float) рдЬрд┐рдирдореЗрдВ min рдФрд░ max values, рдЖрджрд┐ред
- JSON objects (
-
рдЕрдзрд┐рдХ рдЕрд╕рд╛рдорд╛рдиреНрдп types рдХреЗ рд▓рд┐рдП validation, рдЬреИрд╕реЗ:
- URLред
- Emailред
- UUIDред
- ...рдФрд░ рдЕрдиреНрдпред
рд╕рд╛рд░реА validation well-established рдФрд░ robust Pydantic рджреНрд╡рд╛рд░рд╛ handle рдХреА рдЬрд╛рддреА рд╣реИред
Security рдФрд░ authentication
Security рдФрд░ authentication integrated рд╣реИрдВред Databases рдпрд╛ data models рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА compromise рдХреЗ рдмрд┐рдирд╛ред
OpenAPI рдореЗрдВ define рдХреА рдЧрдИ рд╕рднреА security schemes, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- HTTP Basicред
- OAuth2 (JWT tokens рдХреЗ рд╕рд╛рде рднреА)ред OAuth2 with JWT рдкрд░ tutorial рджреЗрдЦреЗрдВред
- API keys:
- Headers рдореЗрдВред
- Query parameters рдореЗрдВред
- Cookies рдореЗрдВ, рдЖрджрд┐ред
рд╕рд╛рде рд╣реА Starlette рдХреА рд╕рднреА security features (рдЬрд┐рд╕рдореЗрдВ session cookies рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)ред
рд╕рдм reusable tools рдФрд░ components рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЗ systems, data stores, relational рдФрд░ NoSQL databases, рдЖрджрд┐ рдХреЗ рд╕рд╛рде integrate рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
Dependency Injection
FastAPI рдореЗрдВ рдПрдХ рдмреЗрд╣рдж рдЖрд╕рд╛рди, рд▓реЗрдХрд┐рди рдмреЗрд╣рдж рд╢рдХреНрддрд┐рд╢рд╛рд▓реА Dependency Injection system рд╢рд╛рдорд┐рд▓ рд╣реИред
- Dependencies рдХреА рднреА dependencies рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ dependencies рдХреА hierarchy рдпрд╛ "graph" рдмрдирддрд╛ рд╣реИред
- рд╕рдм рдХреБрдЫ framework рджреНрд╡рд╛рд░рд╛ automatically handled рд╣реЛрддрд╛ рд╣реИред
- рд╕рднреА dependencies requests рд╕реЗ data рдорд╛рдВрдЧ рд╕рдХрддреА рд╣реИрдВ рдФрд░ path operation constraints рддрдерд╛ automatic documentation рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреА рд╣реИрдВред
- Dependencies рдореЗрдВ define рдХрд┐рдП рдЧрдП path operation parameters рдХреЗ рд▓рд┐рдП рднреА automatic validationред
- рдЬрдЯрд┐рд▓ user authentication systems, database connections, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП supportред
- Databases, frontends, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХреЛрдИ compromise рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЙрди рд╕рднреА рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рди integrationред
рдЕрд╕реАрдорд┐рдд "plug-ins"
рдпрд╛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХрд╛ code import рдХрд░реЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдХрд┐рд╕реА рднреА integration рдХреЛ (dependencies рдХреЗ рд╕рд╛рде) рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЗрддрдирд╛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА application рдХреЗ рд▓рд┐рдП рдЙрд╕реА structure рдФрд░ syntax рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 2 lines of code рдореЗрдВ рдПрдХ "plug-in" рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ path operations рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
Tested
- 100% test coverageред
- 100% type annotated code baseред
- Production applications рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
Starlette рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
FastAPI Starlette рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ compatible рд╣реИ (рдФрд░ рдЙрд╕реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд Starlette code рд╣реИ, рд╡рд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
FastAPI рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Starlette рдХрд╛ рдПрдХ sub-class рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ Starlette рдЬрд╛рдирддреЗ рд╣реИрдВ рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ functionality рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧреАред
FastAPI рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ Starlette рдХреА рд╕рднреА features рдорд┐рд▓рддреА рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ FastAPI рдореВрд▓рддрдГ steroids рдкрд░ Starlette рд╣реИ):
- рд╕рдЪрдореБрдЪ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА performanceред рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рддреЗрдЬрд╝ Python frameworks рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, NodeJS рдФрд░ Go рдХреЗ рдмрд░рд╛рдмрд░ред
- WebSocket supportред
- In-process background tasksред
- Startup рдФрд░ shutdown eventsред
- HTTPX рдкрд░ рдмрдирд╛ test clientред
- CORS, GZip, Static Files, Streaming responsesред
- Session рдФрд░ Cookie supportред
- 100% test coverageред
- 100% type annotated codebaseред
Pydantic рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
FastAPI Pydantic рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ compatible рд╣реИ (рдФрд░ рдЙрд╕реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд Pydantic code рд╣реИ, рд╡рд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдореЗрдВ Pydantic рдкрд░ рдЖрдзрд╛рд░рд┐рдд external libraries рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕реЗ databases рдХреЗ рд▓рд┐рдП ORMs рдФрд░ ODMsред
рдЗрд╕рдХрд╛ рдпрд╣ рднреА рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк request рд╕реЗ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реЗ рдЙрд╕реА object рдХреЛ рд╕реАрдзреЗ database рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ automatically validated рд╣реЛрддрд╛ рд╣реИред
рдЙрд╕реА рддрд░рд╣ рдЙрд▓реНрдЯрд╛ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк database рд╕реЗ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реЗ object рдХреЛ рд╕реАрдзреЗ client рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
FastAPI рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ Pydantic рдХреА рд╕рднреА features рдорд┐рд▓рддреА рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ FastAPI рд╕рднреА data handling рдХреЗ рд▓рд┐рдП Pydantic рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ):
- рдХреЛрдИ brainfuck рдирд╣реАрдВ:
- рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирдИ schema definition micro-language рдирд╣реАрдВред
- рдЕрдЧрд░ рдЖрдк Python types рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ Pydantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
- рдЖрдкрдХреЗ IDE/linter/brain рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдХреНрдпреЛрдВрдХрд┐ pydantic data structures рдХреЗрд╡рд▓ рдЙрди classes рдХреЗ instances рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк define рдХрд░рддреЗ рд╣реИрдВ; auto-completion, linting, mypy рдФрд░ рдЖрдкрдХреА intuition, рд╕рднреА рдЖрдкрдХреЗ validated data рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдПред
- Complex structures validate рдХрд░реЗрдВ:
- Hierarchical Pydantic models, Python
typingрдХреЗListрдФрд░Dict, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧред - рдФрд░ validators complex data schemas рдХреЛ JSON Schema рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ define, check рдФрд░ document рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВред
- рдЖрдкрдХреЗ рдкрд╛рд╕ deeply nested JSON objects рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рднреА validated рдФрд░ annotated рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- Hierarchical Pydantic models, Python
- Extensible:
- Pydantic custom data types рдХреЛ define рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдЖрдк validator decorator рд╕реЗ decorated model рдкрд░ methods рдХреЗ рд╕рд╛рде validation extend рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- 100% test coverageред



