# API nima va nega kerak

> API nima va u qanday ishlaydi? Dasturlar bir-biri bilan qanday gaplashadi, REST va JSON nima — ob-havo, to'lov va bot misollarida sodda tilda.

Manba: https://learncode.uz/web-dasturlash/api-nima/
Sana: 2026-05-08

![API dastur bilan boshqa xizmat o'rtasida ma'lumot almashish ko'prigi bo'lishini ko'rsatuvchi rasm](https://learncode.uz/images/web-dasturlash/api-nima-hero.webp)

*API bir dasturga boshqa dastur yoki xizmat imkoniyatlaridan kelishilgan usulda foydalanish imkonini beradi.*

O'tgan darslarda [server](https://learncode.uz/web-dasturlash/server-nima) brauzerga sahifa
qaytarishini va u ma'lumotni
[ma'lumotlar bazasida](https://learncode.uz/web-dasturlash/malumotlar-bazasi) saqlashini ko'rdik.
Endi boshqa savol tug'iladi: dastur **boshqa dasturdan** ma'lumot olishi kerak
bo'lsa-chi? Aynan shu joyda **API** ishga tushadi.

## Muammo: har narsani o'zi yozib bo'lmaydi

Tasavvur qiling, siz sayt yasayapsiz va unda bugungi ob-havo ko'rinishi kerak.
Ob-havoni bilish uchun nima qilish kerak? Butun mamlakat bo'ylab meteostansiya
qurib, harorat o'lchab chiqasizmi? Bunday yo'l amalda imkonsiz.

Ob-havo bilan shug'ullanadigan tashkilotlar bor va ularda bu ma'lumot allaqachon
mavjud. Sizga kerak bo'lgani — o'sha ma'lumotni **so'rab olish** usuli. Shu usul
API deb ataladi.

> **Atama**
>
> **API** (Application Programming Interface — "dasturlar o'rtasidagi muloqot
> interfeysi") — bir dastur boshqa dasturga o'z imkoniyatlarini taqdim etadigan
> kelishilgan usul. Odam sayt bilan tugma orqali ishlaydi, dastur esa boshqa
> dastur bilan API orqali ishlaydi.

## Restoran qiyosi

API ni tushunishning eng qulay yo'li — restoran. Siz oshxonaga kirib, o'zingiz
ovqat pishirmaysiz. Ofitsiantga buyurtma berasiz, u oshxonaga aytadi va tayyor
taomni olib keladi.

Bu yerda:

- **Siz** — ma'lumot so'rayotgan dastur
- **Oshxona** — ma'lumot saqlanadigan server
- **Ofitsiant** — API
- **Menyu** — API hujjati: nima so'rash mumkinligi ro'yxati

Muhim jihat: siz oshxona ichida nima bo'layotganini bilmaysiz va bilishingiz
ham shart emas. Qaysi pechda pishirilgani, oshpaz kimligi — sizga qorong'u.
Sizga faqat **natija** kerak. API ham xuddi shunday ishlaydi: ichki tuzilishni
yashiradi, faqat natijani beradi.

> **Yodda tuting**
>
> Menyuda bo'lmagan taomni buyurtma qila olmaysiz. API da ham shunday: faqat
> hujjatda ko'rsatilgan so'rovlarni yuborish mumkin. Bu cheklov emas, balki
> kelishuv — ikkala tomon nimani kutishini aniq biladi.

## API amalda qanday ishlaydi

Web API'lar ko'pincha [HTTP so'rov-javob](https://learncode.uz/web-dasturlash/http-sorov-javob)
mexanizmiga tayanadi — darsda ko'rganimiz bilan bir xil. API tushunchasi
HTTPdan kengroq, lekin web dasturlashda eng ko'p HTTP orqali ishlaydigan
API'larni uchratasiz. Bunday API ko'pincha HTML sahifa emas, dastur oson
o'qiydigan **tuzilgan ma'lumot** qaytaradi.

Odatiy sahifa so'ralganda server HTML qaytaradi:

```html
<h1>Toshkent</h1>
<p>Harorat: 32 daraja</p>
```

Bu brauzerda ko'rsatish uchun qulay, lekin dastur uchun noqulay: kerakli sonni
teglar orasidan ajratib olish kerak bo'ladi. Shuning uchun API boshqacha javob
beradi:

```json
{
  "city": "Toshkent",
  "temperature": 32,
  "condition": "ochiq"
}
```

Bu **JSON** formati. Dastur undan `temperature` qiymatini bir qadamda oladi.

![Dastur API ga HTTP so'rov yuborishi, server ishlashi va JSON javob qaytishini ko'rsatuvchi oqim](https://learncode.uz/images/web-dasturlash/api-http-json.webp)

*Dastur API orqali HTTP so'rov yuboradi, server esa HTML sahifa o'rniga JSON ko'rinishidagi toza ma'lumotni qaytaradi.*

> **Atama**
>
> **JSON** (JavaScript Object Notation) — ma'lumot almashish formati. U
> "kalit: qiymat" juftliklaridan iborat va deyarli barcha dasturlash tillari uni
> o'qiy oladi. Bugungi kunda API lar ma'lumotni asosan shu formatda qaytaradi.

## REST — web API loyihalash uslubi

Web API'ni loyihalashning turli usullari bor. Keng tarqalganlaridan biri —
**REST**. REST tayyor protokol yoki qat'iy kod shabloni emas; u resurslar va
HTTP imkoniyatlaridan izchil foydalanishga yordam beradigan arxitektura
uslubidir.

REST ning asosiy g'oyasi sodda: har bir **manzil** bitta narsani anglatadi,
har bir **HTTP metodi** esa u bilan nima qilishni bildiradi.

| So'rov | Ma'nosi |
|--------|---------|
| `GET /mahsulotlar` | Barcha mahsulotlar ro'yxatini ber |
| `GET /mahsulotlar/5` | 5-raqamli mahsulotni ber |
| `POST /mahsulotlar` | Yangi mahsulot qo'sh |
| `PUT /mahsulotlar/5` | 5-raqamli mahsulotni to'liq almashtir |
| `PATCH /mahsulotlar/5` | 5-raqamli mahsulotning bir qismini o'zgartir |
| `DELETE /mahsulotlar/5` | 5-raqamli mahsulotni o'chir |

E'tibor bering: manzil resursni, metod esa niyatni ifodalaydi. `GET`, `POST`,
`PUT`, `PATCH` va `DELETE` metodlarini
[HTTP darsida](https://learncode.uz/web-dasturlash/http-sorov-javob) ko'rgan edik. Yaxshi API
faqat chiroyli URL emas: to'g'ri holat kodi, tushunarli xato javobi,
autentifikatsiya, versiyalash va hujjat ham muhim.

![REST API dagi GET ma'lumot olish, POST qo'shish, PUT o'zgartirish va DELETE o'chirish amallari](https://learncode.uz/images/web-dasturlash/rest-amallari.webp)

*REST uslubida manzil resursni, GET, POST, PUT va DELETE metodlari esa bajariladigan amalni bildiradi.*

> **Misol**
>
> Telegram bot yozganingizda ham API bilan ishlaysiz. Botingiz xabar yuborish
> uchun Telegram serveriga so'rov jo'natadi:
>
> `POST https://api.telegram.org/bot<TOKEN>/sendMessage`
>
> Telegram ichida xabar qanday saqlanishi va yetkazilishi sizga qorong'u —
> sizga faqat "yuborildi" degan javob kerak.

## API qayerda ishlatiladi

API bir necha ishni ko'rinmas holda bajaradi:

- **To'lov** — saytdagi "karta bilan to'lash" tugmasi bank API siga murojaat
  qiladi. Sayt karta ma'lumotini o'zi tekshirmaydi.
- **Xarita** — saytga joylashtirilgan xarita xizmati API sidan keladi.
- **Kirish** — "Google orqali kirish" tugmasi Google API si orqali ishlaydi.
- **O'z ilovangiz** — mobil ilova va sayt bitta backend API sidan foydalanadi.

Oxirgi nuqta ayniqsa muhim. Bir xizmatning ham sayti, ham mobil ilovasi bo'lsa,
ular uchun alohida backend yozilmaydi: bitta API yoziladi va ikkalasi ham
undan foydalanadi.

> **Diqqat**
>
> Ba'zi API'lardan foydalanish **kalit** (API key) talab qiladi. Maxfiy huquq
> beradigan kalitni saytning ochiq frontend kodiga yozmang: uni har kim ko'rib,
> sizning nomingizdan so'rov yuborishi mumkin. Bunday sir serverda yoki maxfiy
> muhit o'zgaruvchisida saqlanadi. Ayrim xizmatlarda brauzerda ko'rinishi mumkin
> bo'lgan cheklangan kalitlar ham bor, ammo ular domen, kvota va ruxsatlar bilan
> qat'iy cheklanishi kerak.

## API javobidagi xatolar

Tarmoqdagi har bir so'rov muvaffaqiyatli tugamaydi. API `400` bilan noto'g'ri
ma'lumot, `401` bilan autentifikatsiya kerakligini, `403` bilan ruxsat yo'qligini
yoki `500` bilan server xatosini bildirishi mumkin. Frontend faqat JSON ichidagi
qiymatni emas, HTTP holat kodini ham tekshirishi kerak.

> **Javobni loyihalang**
>
> `POST /mahsulotlar` so'roviga nom yuborilmasa, API shunchaki "xato" demasligi
> kerak. `400` holat kodi bilan `{"error": "nom majburiy"}` kabi aniq javob
> frontendga qaysi maydonni foydalanuvchiga ko'rsatishni tushuntiradi.

## Qisqacha xulosa

- **API** — bir dastur boshqa dasturga imkoniyatlarini taqdim etish usuli.
- U ichki tuzilishni yashiradi, faqat natijani beradi — restorandagi ofitsiant kabi.
- Web API odatda HTTP orqali ishlaydi va ko'pincha **JSON** qaytaradi.
- **REST** — resurs, metod va HTTP semantikasiga tayanuvchi arxitektura uslubi.
- PUT resursni to'liq, PATCH esa qisman o'zgartirish niyatini bildiradi.
- To'lov, xarita, kirish va mobil ilovalar API ustida qurilgan.
- Maxfiy API kaliti frontend kodiga yozilmaydi; API xatolari va holat kodlari
  alohida qayta ishlanadi.

Keyingi darsda [REST, GraphQL va WebSocket](https://learncode.uz/web-dasturlash/rest-graphql-websocket)
— dasturlar o'rtasidagi aloqa uchun turli yondashuvlarni solishtiramiz.
