Եվ ինչու պետք է հաշվի առնել 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-ներում:

Շնորհակալություն կարդալու համար: