November 19, 2021

API tushunchasi haqida

API o'zi nima? u o'zi nega kerak?

API (application programming interface)- boshqa biror bir ilova ikkinchisi bilan to'g'ridan-to'g'ri muloqot qilishi uchun yaratilgan protseduralar, funksiyalar va klasslardan tashkil topgan katta to'plam.

To'g'risi API nima ekanligini bir qoida bilan tushuntirish biroz mushkul. Tushunishingiz oson bo'lishi uchun ajoyib misol topib qo'yganman.

APIga misol qilib - rozetkani olsak.Uning vazifasi elektr tokini boshqa qurilmalarga yetkazish.Unga siz istalgan qurilmani ulab ishlatishingiz mumkin:Elektr Choynak ,muzlatgich,dazmol va hokazolar .Yuqoridagi misolda rozetka o'rnida - API , Dazmol o'rniga - Mobil ilova , Muzlatgich o'rniga - veb ilova , elektr choynak o'rniga esa - desktop ilovani bemalol misol qilishingiz mumkin va o'z o'zidan ular ishlashi uchun rozetkaga ya'ni APIga murojaat qilishi lozimligi ma'lum bo'ladi.Endi API nima ekanligi biroz bo'lsada ma'lum bo'ldi. Kattaroq loyihalarda APIning o'rni o'ta muhim.U xoh veb ilova , mobil ilova , desktop ilova bo'lsin - ular bir API bilan ma'lumotlar almashib ishlaydi.

API ilovaning boshqa platformalarda ishlab chiqish jarayonini sezilarli darajada tezlashtiradi.

Agar API mavjud bo'lmasa sizning ilovangiz funksionali cheklangan bo'ladi. Uni boshqa platformalarda ishlab chiqish jarayoni qiyinlashib ketadi.Umuman olganda API bu backend dasturlashning asosi. Zamonaviy dasturlashni APIsiz tasavvur qilish o'ta mushkul.

Har bir katta loyihaning o'z APIsi bo'ladi. Ajoyib funksionalga ega loyihalarda bir emas bir-nechta APIdan foydalanilganligiga guvoh bo'lamiz. Bu esa ilovaning samaradorligi hamda funksionalining oshishiga katta hissa qo'shadi. Biz bilgan APIlarning ko'pgina qismi publicAPIhisoblanadi ya'ni bu APIdan barcha foydalanishi mumkin. Katta kompaniyalar, ijtimoiy tarmoqlar taqdim etgan APIni ham public API deb atashimiz mumkin. Sizning loyihangiz spotify bilan ma'lumot almashib ishlasa yoki uning xizmatlaridan foydalansa siz unga o'xshash servisni qaytadan qurishingiz shart emas. Shunchaki uning APIsidan foydalanasiz. Saytingizga youtubening funksionalini qo'shmoqchi bo'lsangiz , shunchaki uning APIsidan foydalaning:

https://developers.google.com/youtube/v3

Covid19 bo'yicha statistik ma'lumot kerak bo'lsa buning uchun alohida kuch sarflash shart emas(statistik ma'lumotlarni yetkazib beruvchi loyihani ishga tushurish va hk.) Covid19 statistikasini yetkazib beruvchi maxsus APIlar mavjud. Ular yordamida ishingiz ancha yengil bitadi :-) , qolaversa python dasturlash tilida talaygina kutubxonalar ham mavjud.

Foydali havola: https://pypi.org/project/COVID19Py
Agarda telegram messengeri bizga o'z APIsini taqdim etmaganida , telegram botlarni yozish bunchalik qulay bo'lmas edi.Mutaxassislarning fikricha, loyihalarga funksional qo'shish davomida APIdan foydalanish eng ma'qul yechimdir.

Ma'lumotlar formati haqida qisqacha

Veb servis APIlarida ma'lumotlar formatining asosan ikki turidan foydalanishadi: Json & XML. Bular ma'lumotlarni qabul qilish hamda yuborish uchun umumiy format ya'ni ma'lumot formati deb yuritiladi. Qisqa qilib aytganda serverlar o'rtasida ma'lumot almashish uchun juda ham qo'l keladi.

JSON (JavaScript Object Notation) bu yuqorida aytib o'tganimdek ma'lumotlar almashinishi uchun ishlatiladigan ma'lumot formati bo'lib, javascript uchun yaratilgan va aynan shu tilda boshqalarga nisbatan kengroq foydalanadi. Ammo boshqa tillarda ham faol ravishda qo'llanilib kelinmoqda. Sintaksisini bir qarashdayoq tushunib olish mumkin.

XML - Extensible Markup Language (HTML bilan o'xshash tarzda yozilgan). Vazifasi xuddi json kabi ma'lumotlar tashish, tuzilishini saqlash va ta'riflashdan iborat. Sodda qilib aytganda ular oddiy ma'lumot formati.

Umuman olganda birning kamchiligi ikkinchisining yutug'idir!

Ma'lumotlar formati haqida yaxshiroq tushunishingiz uchun yuqoridagi sxemani taqdim etaman. Unda siz json hamda xmlni taqqoslashingiz ham mumkin.

Foydali havolalar:https://www.w3schools.com/xml/default.asp , https://www.w3schools.com/js/js_json_intro.asp

REST API tushunchasi.

REST to'liq holatda REpresentational State Transfer deb aytiladi. REST HTTP protokoli yordamida ilova yoki veb saytni server bilan muloqotga kirishishiga xizmat qiluvchi umumiy prinsipdir (SOAP kabi protokol emas). REST termining vujudga kelishida HTTP protokoli asoschilaridan biri Roy Fieldingning hissasi katta (bu termin 2000-yilda vujudga kelgan). REST RPCning alternativi hisoblanadi. Maqolada keltirgan HTTP metodlarni "Rest So'rovlar" deb ham atash mumkin. REST "stili" HTTP 1.1 bilan parallel ravishda o'sib kelmoqda. Chunki ikkalasining ham asosini HTTP 1.0 tashkil etadi.

REST yordamida veb servislar yaratish davomida boshqa termin ya'ni RESTful qo'llaniladi.

RESTning afzalliklari:

  • Har bir resurs URL bo'yicha aniqlanadi. Bu esa URL har bir resurs uchun kalit vazifasini o'tashini anglatadi.
  • Resurs ustidan boshqaruv yoki ularni nazorati to'liq ravishda ma'lumotlarni uzatish protokoli yordamida amalga oshiriladi. Eng keng tarqalgan protokollardan biri bu albatta - HTTP.
  • Komponentlarning portativligi.
  • Yangilanish yoki yangi zamon talablariga mos ravishda tez va oson o'zgarish xususiyatiga ega.
  • O'zgartirish kiritish o'ta yengil.
  • Interfeys soddaligi.

RESTda request & response Json formatda yetkaziladi.

GET: https://api.twitter.com/1.1/account/settings.json { "errors":[ { "code":215, "message":"Bad Authentication data." } ] } "https://api.twitter.com/1.1/account/settings.json" bo'yicha so'rov yuborganimizda server yuqoridagi responseni qaytardi. Ya'ni biz twitterga avtorizatsiya bo'lmaganmiz :) Shuning uchun server bizga settingsga oid ma'lumotni qaytara olmaydi.STATUS bu HTTP status kodi. (200-OK , 404-Not Found ...)MESSAGE esa bu response xabari.("Not Found" , "Bad Request")

Agar e'tibor bergan bo'lsangiz , iT sohasida bo'sh ish o'rinlarini taklif qiluvchi vakansiyalarda "restful API bilan ishlash ko'nikmasi" ko'plab vakansiyalarda takrorlangan* Bu degani siz xoh frontend , android , ios va hk. dasturchi bo'ling API bilan ishlashni bilishingiz muhim.

* Опыт проектирования и поддержки клиент-серверного API, Понимание RESTful API , Опыт работы с протоколами REST/JSON API, RESTful API и HTTP/S va shunga o'xshash talablar.

API endpoint hamda route haqida

  • Route (yoki marshrut ) - bu APIning qandaydur qismi nima ish bajarishiga ishora qilib turuvchi nom. Boshqacha qilib aytganda sizning so'rovingiz yuborilayotgan manzil marshrut deb ataladi. Unga HTTP metodlari bo'yicha so'rov yuboriladi. Bir route bir nechta endpointlarga ega bo'lishi mumkin.
  • Endpoint ( yakuniy nuqta - конечная точка ) - bu marshrutga (route)ga alohida HTTP metodlari yordamida murojaat qilishdir. Har bir endpoint aniq bir masalani hal etadi va ular har bir klientdan (klient haqida o'tgan safargi maqolamda aytib o'tgan edim) parametr(sozlamalar)ni oladi so'ngra unga shu bo'yicha ma'lumotlarni yetkazadi.

Yuqoridagilar haqida tasavvurga ega bo'lish uchun quyidagi misolni ko'rib chiqamiz:

http://example.com/api/v1/users/1

api/v1/users/1 - Bu marshrut (route) , api/ esa rest API ga olib boruvchi standart yo'l.Yuqoridagi marshrut 4 ta endpointga ega deb ayta olamiz:GET - bu metod bilan murojaat qilinganda idsi 1ga teng foydalanuvchi haqidagi ma'lumot server tomonidan bizga yuboriladi.PUT / PATCH - bu metod orqali biz so'rov yuboramiz. Ya'ni idsi 1ga teng foydalanuvchi haqidagi ma'lumotni yangilash uchun. So'rov json formatida yuborilishi mumkin.POST - bu metod orqali serverga yangi resurs qo'shiladi ./api/v1/users ga bu metod bilan murojaat qilinganda yangi foydalanuvchi qo'shish mumkin.DELETE - bu metod vazifasi nomidan ma'lum. Foydalanuvchi haqidagi ma'lumotni serverdan o'chiradi.

Boshqa dasturlash tillariga nisbatan pythonda ko'proq kod yozaman. Balkim shuning uchundur u menga ko'proq yoqadi hamda qulay. Maqolam davomida esa python dasturlash tilida API yaratish imkonini beruvchi freymvorklarni keltirib o'tmoqchiman.

API qo'llanmasi (API documentation)

Har bir API : qo'llanmaga (boshqacha qilib aytganda documentationga) ega bo'lishi shart. Buning nima ahamiyati bor? - qo'llanmada sizning APIingiz qanday va nima vaziyatda qo'llanilishi , barcha endpoinlar hamda routelarga yuboriladigan so'rovlar va ularning vazifasi to'liq yoritilgan bo'ladi(ko'p hollarda so'rovlar oldindan tayyorlab qo'yilgan bo'ladi). Bu esa siz o'z APIingizni public API ko'rinishida namoyish etishingizda katta rol o'ynaydi. Hozirda ko'plab freymvorklar xususan: Django-rest-framework hamda FastAPI sizning APIingiz uchun qo'llanmani o'zi avtomatik tarzda generatisya qilib beradi.

Tavsiya etilgan: Barchamizga tanish Click UZning API qo'llanmasi: https://docs.click.uz/click-api-request/ barchasi to'liq yoritilgan.

Pythonda API yaratish imkoniyatini beruvchi freymvorklar

FastAPI

Bu freymvork oxirgi vaqtlarda o'zimga ham juda ma'qul keldi. Chunki unda API yaratish boshqalariga nisbatan tezroq (nomi bilan FAST !!!). Bu freymvorkni yuqori tezlikga ega HTTP API serverlarni yaratishda qo'llashyapdi. Bu freymvork Starlette asosida qurilgan , validatsiyaga esa Pydantic javob beradi. Umuman olganda bu freymvorkni har bir python dasturchi ishlatib ko'rishi zarur. FastAPI Python dasturlash tilidagi eng tez backend freymvorklar qatoriga kiradi.(Djangodan tez)

P.S FastAPI mikrofreymvorklar sirasiga kiradi.

Men oxirgi kunlarda FastAPI ishlatib kelmoqdaman. Ayni damda jamoamiz bilan birgalikda Microsoftdagi ML servislarimizda FastAPIdan foydalanishni reja qilib kelmoqdamiz. Windows hamda Ofis mahsulotlarimizni ham u bilan integratsiya qilish rejamizda bor.Kabir Khan - Microsoft
Foydali havola: https://fastapi.tiangolo.com/

Flask

Mikrofreymvork

Flask - Python dasturchilar orasida juda ham ommabop bo'lgan freymvork. Githubda 50000dan ortiq "star"lari mavjud. Bu fremvorkdan python dasturlash tilida veb ilovalar qurishda keng qo'llaniladi.

So'ngi yillarda Flask ko'p yangilandi va juda qulay o'zgartirishlar kiritildi. Bu o'zgarishlar sabab biz uni full stack freymvork deb atashimiz ham mumkin. Uning minimalistikligi ya'ni veb ilovalar qurilishi soddaligi dasturchilar uchun aynan muddao. Maqolam davomida Python dasturlash tilidagi APIni aynan Flaskda yaratamiz!

Foydali havola: https://flask.palletsprojects.com/en/1.1.x/

Django

Full stack freymvork.

Django - Python dasturlash tilida yaratilgan Full Stack veb freymvork. Imkoniyatli juda ham ko'p , hamda boshqa freymvorklarga nisbatan qulayroq. Ushbu freymvorkni maqolamga bog'laydigan bo'lsak , bu borada Django ancha yetakchi! Django bazasida ishlab chiqilgan Django REST freymvorki mavjud. Unda asosan RESTful APIlar quriladi va bu borada ancha loyihalar amalga oshgan.

Bu borada qiziqishingiz yuqori bo'lsa izohlarda qoldiring , albatta inobatga olaman.

Foydali havolalar:Django Rest Framework - https://github.com/encode/django-rest-frameworkDjango - https://github.com/django/django

Maqola avtori: Abduaziz Ziyovuddinov
To'liq maqola: https://bit.ly/3CF8nri