From 181fe39b9ec5f1e510668e9c8d7db6b79a7c0aa4 Mon Sep 17 00:00:00 2001 From: Elvin Date: Sat, 3 Feb 2024 01:17:40 +0400 Subject: [PATCH] Add features.md --- docs/az/docs/features.md | 203 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 docs/az/docs/features.md diff --git a/docs/az/docs/features.md b/docs/az/docs/features.md new file mode 100644 index 0000000000..64df3a7a05 --- /dev/null +++ b/docs/az/docs/features.md @@ -0,0 +1,203 @@ +# Xüsusiyyətlər + +## FastAPI xüsusiyyətləri + +**FastAPI** sizə aşağıdakıları təmin edir: + +### Açıq standartlara əsaslanır + +* API yaratmaq işlərində ``OpenAPI `` buna ``path `` ``əməliyyatları, ``parametrləri, body tələbi, təhlükəsizlik kim şeylər daxildir. +* Avtomatik olaraq data modelinin ``JSON Schema `` ile birlikdə sənədləşməsi(OpenAPI özü onsuz JSON Schema əsasındadır). +* Diqqətli iş nəticəsində yuxarıda göstərilən standartlara uyğun bir framework yaratdıq. Standartları tortun üzərinə sonradan əlavə edilən çiyələk kimi görmədik. +* Bu həmçinin bir çox dildə istifadə oluna biləcək **client code generator** istifadəsinə də icazə verir. + +### Avtomatik sənədləşmə + +OpenAPI standartlarına əsaslanan bir framework olaraq, developerlərin birdən çox seçimi var, defolt olaraq gələn 2 fərqli interaktiv API sənədləşməsi və veb istifadəçi interfeysi var. + +* ``Swagger UI `` sizə interaktiv olaraq brauzerdən API-ya çağırış etməyə və sınaqdan keçirməyə imkan verir. + +![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) + +* ``ReDoc `` ilə alternativ API sənədləşməsi. + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) + +### Sadəcə müasir Python + +Tamamilə standartlar **Python 3.8**'nın type hintlərinə əsaslanır (Pydantic'in sayəsində). Yeni bir sintaksis öyrənməyə ehtiyyac yoxdur. Sadəcə müasir Python. + +Əgər Python type hintlərini bilmirsinizsə vəya bir xatırlatmaya ehtiyyacınız varsa (FastAPI istifadə etməsən belə) bu iki dəqiqəlik kiçik məlumatlandırıcı məzmuna göz ata bilərsiz: [Python Types](python-types.md){.internal-link target=_blank}. + +Standart Python'u typelarını istifadə edərək yazırsız: + +```Python +from typing import List, Dict +from datetime import date + +from pydantic import BaseModel + +# Dəyişəni str olarak tanıdın +# və o funksiya üçün super bir editor dəstəyi alın +def main(user_id: str): + return user_id + + +# Pydantic modeli +class User(BaseModel): + id: int + name: str + joined: date +``` + +Sonrasında bu formada istifadə edə bilərsiz. + +```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 + `**second_user_data` mənası: + + `second_user_data` içində olan key-value -ları birbaşa olaraq key-value arqumentləri kimi ötürür , etdiyin şey buna bərabər olacaq:`User(id=4, name="Mary", joined="2018-11-30")` + +### Editor dəstəyi + +Bütün framework istifadəsi asan və intuitiv olmaq üçün hazırlanmışdır, qəbul edilmiş bütün qərarlar developerlə ən yaxşı inkişaf təcrübəsini yaşatmaq üçün, bir çox editorlarda sınaqdan keçirilmişdir. + +Python developerləri arasında son sorğuda, açıq ara ``Ən çox istifadə edilən xüsusiyyət "avtomatik tamamlama" idi.``. + +Bütün **FastAPI** frameworkü avto-tamamlama baxımından developeri məmnun etmək üçün hazırlandı. Avtomatik tamamlama hər yerdə işləyir. + +Çox nadir hallarda sənədləşməyə qayıdıb baxacaqsınız. + +Editorun sizə necə kömək etdiyinə baxın: + +* ``Visual Studio Code `` ilə: + +![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) + +* ``PyCharm `` ilə: + +![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png) + +Daha əvvəl qeyri-mümkün hesab edə biləcəyiniz kodda belə avto tamamlama görəcəksiniz. Nümunə olaraq `price` JSON body içində (nested bir JSON body də ola bilərdi.) birbaşa olaraq request-dən gəlir, bu vəziyyətdə belə avto-tammalama iş görür. + +Artıq key adlarını səhv yazmayın, sənədləşməyə dönüb dəlilər kimi yuxarı aşağı səyfədə gəzmək ve ən sonunda `username` mi yoxsa `user_name` mi isitfadə etdim kimi suallar yoxdur. + +### Qısa + +Hər şey üçün məntiqli bird defolt var. Parametrlərini istəyə uyğun olarak dəyişib, API'nı istədiyin kimi dəyişə bilərsiz. + +Defolt olaraq hamısı **işləyir**. + +### Doğrulama + +* Deməy olar ki bütün (ya da hamısı?) Python **data typeları** için doğrulama, əhatə etdikləri: + + * JSON obyektləri(`dict`). + * JSON array (`list`) item type'ı tanıdarkən. + * String (`str`) parametri, minimum ve maksimum uzunluq kimi məhdudiyyətlər edərkən. + * Nömrələr (`int`, `float`) maksimum ve kimi məhdudiyyətlər edərkən. +* Bunlar kimi ən eqzotik typelarla belə doğrulama edə bilərsiniz.: + + * URL. + * Email. + * UUID. + * ...ve digərləri. + +Bütün yoxlama tədbirləri çox güclü kitabxana sayəsində həyata keçirilir, **Pydantic**. + +### Təhlükəsizlik ve autentifikasiya + +Təhlükəsizlik və autentifikasiya verilənlər bazası və məlumat modellərinə zərər vermədən inteqrasiya oluna bilər. + +Bütün təhlükəsizlik sxemləri OpenAPI-də müəyyən edilmişdir, bunlara daxildir: + +* HTTP Basic. +* **OAuth2** (ve **JWT tokenləri ilə** birlikdə). Bu dərslik məzmununu yoxlaya bilərsiniz [OAuth2 with JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}. +* API açarları: + * Headerlar. + * Query parametrləri. + * Cookies, vs. + +Bütün təhlükəsizlik xüsusiyyətləri Starlette-dən gəlir (**session cookies'de** daxil olmaqla). + +Bütün təkrar istifadə edilə bilən alətlər və komponentlər kimi, rahatlıqla sistemlərinizə, data storelarınıza, əlaqəli və NoSQL databaselərinizə inteqrasiya edə biləcəyiniz şəkildə hazırlandı. + +### Dependency injection + +FastAPI-nin istifadəsi inanılmaz dərəcədə asan, lakin inanılmaz dərəcədə güclü ``Dependency Injection `` sistemi var. + +* Dependencylərin belə dependencies-i olabilər, FastAPI bunun üçün **graph of "dependency"** yaradır. +* Bütün bunlar **avtomatik olaraq** FastAPI tərəfindən həlledilir. +* Daxil olan məlumatlardan asılı olaraq bütün öhdəliklərin fərqli tələbləri ola bilər, əlavə path əməliyyatlarının məhdudiyyətləri və avtomatik sənədləşməsi də ayrıca edilir. +* **Avtomatik doğrulama** hətta path əməliyyat parametrləri daxilində göstərilən tələblər üçün də edilə bilər. +* Mürəkkəb autentifikasiya sistemlərinə dəstək, **verilənlər bazası əlaqələri** və s. +* **Güzəşt yoxdur** heç bir şeydən güzəştə getmədən, databaselər, frontendlər vs. Bütün hamısının asanlıqla inteqrasiya edilə bilər. + +### Limitsiz "plug-inlər" + +Başqa sözlə, plug-inlərə ehtiyaccımız yoxdur, import edip birbaşa istifadə etməyə başlaya bilərik. + +Bütün inteqrasiyalar istifadəsi asan olmaq üzərə (çətinlikləri ilə birlikdə) hazırlandı, siz bir "plug-in" yaradıb 2 sətir kod ilə, *path əməliyyatlarında* istifadə etdiyiniz eyni sintaksis və struktur ilə kodunuza inteqrasiya edebilərsiz. + +### Sınaq edildi + +* 100% ``sınaq əhatəsi ``. +* 100% ``typeları tanıdılmış `` koda bazası. +* İstehsal mühitində olan proqramlarda istifadə olunur. + +## Starlette xüsusiyyətləri + +**FastAPI**, ``Starlette `` ilə tam uyğun gəlir(və ona əsaslanır). Yəni FastAPI üzərinə əlavə edəcəyiniz istenilən Starlette kodu da işliyəcəkdir. + +`FastAPI` əlsində `Starlette`-nin bir sub-class-ıdır. Yəni, siz Starlette-i bilirsinizsə və ya istifadə edirsinizsə, funksionallığın əksəriyyəti eyni şəkildə işləyir. + +**FastAPI** ilə siz həmçinin **Starlette**-in bütün xüsusiyyətlərinə sahib olacaqsınız. (FastAPI əslində Starlette-in steroid basmış halıdır): + +* Həqiqətən də cidd təsir edici performansa sahibdir. Python-un isə en sürətli frameworklərindən bir dənəsi, ``**NodeJS** ve **Go** ilə bərabər performansa sahibdir.``. +* **WebSocket** dəstəyi. +* **GraphQL** dəstəyi. +* İsditafədə halında olan arxa plan tapşırıqları. +* Başlatma ve söndrümə hadisələri(startup and shutdown). +* Sınaq serveri HTTPX üzərində quruldu. +* **CORS**, GZip, Statik fayllar, Streaming responseları. +* **Session and Cookie** dəstəyi. +* 100% test əhatəsi. +* 100% type annotated kod bazası. + +## Pydantic xüsusiyyətləri + +**FastAPI** ``Pydantic `` ilə tam uyğundur ve üzərinə qurulub. Yani FastAPI üzərinə nəsə əlavə etsəniz hansısa bir Pydantic kodu da işliyəcəkdir + +Bunlara həmçinin Pydantic əsasında qurulmuş əlavə kitabxanlar, databaselər üçün ``ORM `` , ``ODM `` daxildir. + +Bu həm də o deməkdir ki, bir çox hallarda siz obyekti requestdən database-ə hər şey avtomatik olaraq yoxlanılmış şəkildə köçürə bilərsiniz. + +Eynilə, siz obyekti verilənlər bazasından **birbaşa request-ə** tam doğrulanmış formada göndərə bilərsiniz. + +**FastAPI** ilə siz **Pydantic**-in bütün xüsusiyyətlərinə sahib olacaqsınız (çünki FastAPI data nəzarətini Pydantic-in üzərində qurduğu üçün): + +* **Baş ağrısı yoxdur**: + * Fərqli bir sintaksis öyrənməyə ehtiyac yoxdur, + * Python typelarını necə istifadə edəcəyinizi bilirsinizsə, Pydantic-dən necə istifadə edəcəyinizi də bilirsiniz. +* İstifadə etdiyiniz development əlatləri ilə yaxşı işləyir **``IDE ``/``linter ``/brain**: + * Pydantic'in məlumat strukturları(data structures) əslində sadəcə sizin müəyyən etdiyiniz classlardır; Buna görə də, təsdiqlənmiş məlumatlarınızla avtomatik tamamlama, linting və mypy istifadə edərək heç bir problem olmadan işləyə bilərsiniz. +* **Sürətli**: + * ``Benchmarklarda ``, Pydantic bütün digər sınaqdan keçmiş kitabxanalardan daha sürətlidir. +* **Ən kompleks** **strukturları** belə doğrula(validate): + * İerarxik Pydantic-in modellərinin istifadəsi ilə birlikdə, Python `typing`’s `List` və `Dict`, vs kimi şeyləri doğrula. + * Doğrulayıcılar hətta ən mürəkkəb məlumat sxemlərini təmiz və asanlıqla müəyyən etməyə imkan verir, hamısı JSON sxemləri kimi sənədləşdirilir. + * Pydantic JSON obyektinin nə qədər iç-içə olmasından asılı olmayaraq onu doğrulayır və göstərir. +* **Genişlədilə bilinir**: + * Pydantic sizə fərdiləşdirilmiş data typler-ı müəyyən etməyə imkan verir və doğrulamaları genişləndirməyə və validator dekoratoru ilə öz doğrulayıcılarınızı yazmağa imkan verir. +* 100% test əhatəsi.