Եվ ինչու պետք է հաշվի առնել FastAPI-ն ձեր հաջորդ API նախագծի համար
Եթե կարդացել եք Python-ի իմ նախորդ հոդվածներից մի քանիսը, գիտեք, որ ես Flask-ի երկրպագու եմ: Դա իմ նպատակն է Python-ում API-ներ ստեղծելու համար: Այնուամենայնիվ, վերջերս ես սկսեցի շատ լսել Python-ի նոր API շրջանակի մասին, որը կոչվում է FastAPI: Դրանով որոշ API-ներ կառուցելուց հետո կարող եմ ասել, որ դա զարմանալի է:
Այս նախագիծը ստեղծվել է Սեբաստիան Ռամիրեսի կողմից և գրելու պահին այն հավաքել է գրեթե 20 հազար աստղ: Խոշոր անունները, ինչպիսիք են Microsoft-ը, Uber-ը, Netflix-ը և այլք, դրա հետ API-ներ են ստեղծել:
Բայց ինչո՞ւ է այս նոր գրադարանն այդքան հայտնի և ինչպե՞ս է այն համեմատվում Flask-ի կամ Django-ի հետ:
Հատկություններ
FastAPI-ն բավականին մինիմալիստական շրջանակ է: Այնուամենայնիվ, դա չի դարձնում այն պակաս հզոր: FastAPI-ն կառուցված է ժամանակակից Python կոնցեպտների միջոցով և հիմնված է Python 3.6 տիպի հայտարարագրերի վրա: Եկեք տեսնենք այս գրադարանի որոշ առանձնահատկություններ:
Ավտոմատ փաստաթղթեր
Ցանկացած API-ի համար պարտադիր է վերջնական կետերի և տեսակների վերաբերյալ փաստաթղթերը: Այս խնդրի լուծման ընդհանուր մոտեցումը OpenAPI և Swagger UI կամ ReDoc գործիքների օգտագործումն է՝ տեղեկատվություն ներկայացնելու համար: Սրանք ավտոմատ կերպով փաթեթավորվում են FastAPI-ով, ինչը թույլ է տալիս ավելի շատ կենտրոնանալ ձեր կոդի վրա, քան գործիքներ կարգավորել:
Մուտքագրված Python
Սա մեծ է. FastAPI-ն օգտագործում է Python 3.6 տիպի հայտարարություններ (շնորհիվ Pydantic-ի): Սա նշանակում է, որ այն օգտագործում է Python ֆունկցիան, որը թույլ է տալիս նշել փոփոխականի տեսակը։ Եվ այս շրջանակը լայնորեն օգտագործում է այն՝ տրամադրելով ձեզ մեծ խմբագիրների աջակցություն: Ավտոլրացումը զարմանալիորեն լավ է աշխատում:
Ահա մի քանի օրինակ կոդ՝ օգտագործելով մուտքագրված հայտարարությունները.
Մենք հենց նոր գնացինք.
name
to:
name: str
Ահա և վերջ: Եվ արդյունքում.
Գեղեցիկ!
Վավերացում
Վավերացումն արդեն ինտեգրված է այս շրջանակում՝ Pydantic-ի շնորհիվ։ Դուք կարող եք վավերացնել ստանդարտ Python տեսակները, ինչպես նաև որոշ հատուկ դաշտերի վավերացումներ: Ահա մի քանի օրինակներ.
- JSON օբյեկտներ (
dict
) - JSON զանգված (
list
) - Տող (
str
) նվազագույն և առավելագույն երկարությամբ - Թվեր (
int
,float
) նվազագույն և առավելագույն արժեքներով - URL
- Էլ
- UUID
- Եւ շատ ավելի…
Անվտանգություն և նույնականացում
Սա ցանկացած API-ի կարևոր մասն է, և դա կոդ է, որը մենք սովորաբար պարզապես կրկնում ենք, ուստի ինչու՞ դրա մեծ մասը չինտեգրել շրջանակում: FastAPI-ն անում է հենց դա:
Գրադարանը տրամադրում է աջակցություն հետևյալի համար.
- HTTP Հիմնական
- OAuth2 (JWT նշաններ)
- API ստեղներ վերնագրերում, հարցումների պարամետրերում կամ թխուկներում:
Փաստաթղթեր
Սա, թերեւս, հենց շրջանակի առանձնահատկությունը չէ, բայց հարկ է նշել: Նախագծի փաստաթղթերը պարզապես զարմանալի են. Այն շատ պարզ է և ընդգրկում է թեմաներ օրինակներով և բացատրություններով:
Կատարում
FastAPI-ն արագ է: Այն ոչ միայն արագ է կոդավորվում, այլև հարցումները գերարագ է մշակում: Դուք կարող եք ստուգել հենանիշերը մի քանի շրջանակներում՝ օգտագործելով TechEmpower հենանիշային գործիքը: Ահա այն արդյունքները, որոնք ես ստացել եմ Python շրջանակների համար: Flask-ը և Django-ն շատ զիջում են ցուցակին, որտեղ FastAPI-ն առաջինն է և, հետևաբար, ամենաարդյունավետը.
Բնության կողմից ասինխրոն
Եկեք նայենք հետևյալ կոդը.
@app.post("/item/", response_model=Item)
async def create_item(item: Item):
result = await some_code_running_in_background(item)
return result
Դա JavaScript-ն է: Խոստանում եմ, որ այդպես չէ: Այնուամենայնիվ, ծանոթ է թվում, չէ՞: Այդ հատվածն իրականում Python է, որն օգտագործում է համաժամեցման մեթոդներ:
FastAPI-ն լռելյայն աջակցում է ասինխրոն վերջնակետերին, որոնք կարող են պարզեցնել և ավելի արդյունավետ դարձնել ձեր կոդը: Սա հսկայական առավելություն է Flask-ի նկատմամբ: Django-ն արդեն կատարել է որոշակի async աջակցության աշխատանք, բայց այն այնքան էլ ինտեգրված չէ, որքան FastAPI-ում:
Եզրակացություն
FastAPI-ն համեմատաբար նոր շրջանակ է, որը հետևում է Flask-ի մինիմալիստական մոտեցմանը, բայց ավելացնում է կարևոր առանձնահատկություններ, որոնք հեշտացնում են աշխատելը և հիանալի կատարում: Դա հիանալի ընտրություն է ձեր հաջորդ API նախագծի համար, և ես ավելի շատ կգրեմ դրա մասին, քանի որ այն ավելի ու ավելի եմ օգտագործում իմ API-ներում:
Շնորհակալություն կարդալու համար: