AXV

REST API va HTTP asoslari

Representational State Transfer · URI dizayni · HTTP metodlari · Status kodlari

11-sinfProfessional IT4-hafta · 11-dars

Bugungi dars rejasi

01. REST nima?

Roy Fielding falsafasi, resurs tushunchasi va URI loyihalash qoidalari.

02. HTTP Metodlari

GET, POST, PUT, PATCH, DELETE semantikasi va idempotentlik.

03. Status kodlari va curl

2xx, 3xx, 4xx, 5xx toifalari va terminalda API bilan amaliy ishlash.

01

REST tamoyillari va Resurs tushunchasi

Mijoz va server o'rtasida ma'lumot almashishning universal me'moriyligi

REST'ning 5 asosiy ustuni

1. Client-Server & Stateless

Mijoz interfeysga, server ma'lumotlarga javobgar. Server har bir so'rovni alohida (stateless) ko'radi, sessiya holatini xotirada saqlamaydi.

2. Cacheable & Uniform Interface

Javoblar keshlash belgisi bilan keladi. Barcha resurslar yagona qoidalar (URI, HTTP metodlar, JSON) asosida boshqariladi.

URI Dizayni: Resursga yo'naltirilgan URL

RPC / Noto'g'ri URL (Fe'l aralashgan) POST /api/getAllBooks GET /api/deleteBook?id=42 POST /api/saveNewUser RESTful URL (Ot + HTTP Metod) GET /api/v1/books DELETE /api/v1/books/42 POST /api/v1/users

Ierarxik va Filtrli URL loyihalash

Resurslar bog'liqligi

Ichki resurslar ota resurs ostiga joylashtiriladi:

  • GET /authors/15/books — 15-muallifning kitoblari
  • POST /orders/ORD-1/items — buyurtmaga tovar qo'shish

Filtrlash va Saralash (Query)

Filtr, sahifalash va tartib parametrlar orqali uzatiladi:

  • GET /books?genre=fiction&sort=year_desc
  • GET /books?page=2&limit=20
02

HTTP Metodlari va Idempotentlik

Har bir HTTP harakatining semantikasi, xavfsizligi va takrorlanuvchanligi

HTTP Metodlari xarakteristikasi

Metod CRUD ma'nosi Xavfsiz (Safe)? Idempotent? Tipik status
GET Read (O'qish) Ha (ma'lumot o'zgarmaydi) Ha 200 OK
POST Create (Yaratish) Yo'q (yangi resurs) Yo'q (takrorlansa 2 marta yaratadi) 201 Created
PUT Replace (To'liq yangilash) Yo'q Ha (10 marta yuborsa ham bir xil holat) 200 OK / 204
PATCH Update (Qisman yangilash) Yo'q Odatda yo'q / Shartli 200 OK
DELETE Delete (O'chirish) Yo'q Ha (1 marta o'chgach, yana o'chirish holatni o'zgartirmaydi) 200 / 204 No Content

PUT va PATCH farqi

PUT — To'liq almashtirish

Resursning barcha maydonlari yuborilishi shart. Yuborilmagan maydonlar null bo'lib qolishi mumkin.

{
  "title": "Clean Code",
  "author": "Robert Martin",
  "price": 120000,
  "in_stock": true
}

PATCH — Qisman tahrirlash

Faqat o'zgargan maydonlargina yuboriladi. Qolgan barcha ma'lumotlar saqlanib qoladi.

{
  "price": 135000
}
03

Status kodlari va curl amaliyoti

Server javoblari bilan to'g'ri muloqot va sarlavhalar (Headers)

Status kodlari guruhlari

2xx — Muvaffaqiyatli

  • 200 OK — So'rov bajarildi.
  • 201 Created — Yangi resurs yaratildi.
  • 204 No Content — Bajarildi, qaytadigan tana yo'q.

4xx — Mijoz xatosi

  • 400 Bad Request — Noto'g'ri format.
  • 401 Unauthorized — Autentifikatsiya yo'q.
  • 403 Forbidden — Ruxsat yetarli emas.
  • 404 Not Found — Resurs topilmadi.
  • 409 Conflict — Holat to'qnashuvi.

HTTP Sarlavhalari (Headers)

Content-Type

Mijoz yoki server yuborayotgan jism (body) qaysi formatdaligini bildiradi:

Content-Type: application/json

Accept

Mijoz serverdan qaysi formatdagi javobni kutayotganini belgilaydi:

Accept: application/json

Keshlash: ETag va 304 Not Modified

1-so'rov: Dastlabki yuklash GET /books/1 200 OK (ETag: "v1_hash" + JSON data) 2-so'rov: O'zgarmagan holat GET /books/1 (If-None-Match: "v1_hash") 304 Not Modified (Ma'lumot uzatilmaydi!)

Terminalda curl bilan API sinash

# 1. Barcha kitoblarni olish
curl -X GET http://localhost:8000/api/v1/books \
  -H "Accept: application/json"

# 2. Yangi kitob qo'shish
curl -X POST http://localhost:8000/api/v1/books \
  -H "Content-Type: application/json" \
  -d '{"title": "Clean Code", "price": 150000}'

# 3. Kitobni o'chirish
curl -X DELETE http://localhost:8000/api/v1/books/42 -v

So‘rov va javob: bitta aylana

Mijozcurl, brauzer Server/api/books GET /api/books/5 Accept: application/json · Authorization: Bearer ... 200 OK Content-Type: application/json {"id": 5, "title": "Sarob"}

URL’ni tuzating. Bosing

/getAllBooks

bosing

GET /api/books

/api/book/create

bosing

POST /api/books

/api/deleteBook?id=5

bosing

DELETE /api/books/5

/api/books/5/getAuthor

bosing

GET /api/books/5/author

Qoida: «nima?» - URI (ko‘plikdagi ot), «qanday?» - HTTP metodi.

Idempotentlik: 3 marta yuborsak?

DELETE /api/books/5 204 404 404 holat: kitob yo‘q idempotent POST /api/books 201 201 201 3 ta bir xil kitob idempotent emas: Idempotency-Key

Holatsizlik (stateless)

Server eslab qoladi

Foydalanuvchi qaysi serverga kirgan bo‘lsa, faqat o‘sha server uni taniydi. Ikkinchi nusxa qo‘shish qiyin.

Har so‘rov o‘zi to‘liq

Authorization: Bearer <jwt> har so‘rovda keladi. Load balancer ortida istalgan nusxa javob beradi: gorizontal masshtablash oson.

Mini-test

Kitobning faqat year maydonini o‘zgartirish kerak. Qaysi so‘rov eng to‘g‘ri?

PATCH - qisman yangilash. GET bilan holatni o‘zgartirish xato, URI’da fe’l bo‘lmaydi.

Odatiy xatolar

Hammasiga 200

Xatoni ham 200 bilan qaytarish: mijoz xatoni sezmaydi

401 va 403

401 - kimligi noma’lum, 403 - ma’lum, lekin ruxsat yo‘q

Sir URL’da

Token query’da loglarda qolib ketadi: sarlavhada yuboring

0
HTTP metodi
0
asosiy status kodi

Tezkor sinov: Status kodini toping

Qaysi vaziyatda qanday status kodi qaytarilishi kerak?

Vaziyat 1

Foydalanuvchi mavjud bo'lmagan /books/999 ga murojaat qildi.

Javob: 404 Not Found

Vaziyat 2

Yangi kitob muvaffaqiyatli bazaga qo'shildi.

Javob: 201 Created

Vaziyat 3

O'chirish muvaffaqiyatli bo'ldi, qaytarishga ma'lumot yo'q.

Javob: 204 No Content

Bugungi dars xulosasi

URI = Resurs

URL manzillarda faqat ot va ko'plik ishlatiladi, amallar HTTP metodlariga yuklanadi.

Idempotentlik

GET, PUT, DELETE metodlari xavfsiz va bir necha marta chaqirishga chidamli.

Keyingi dars

12-darsda JSON kontrakt dizayni, Error envelope va API xavfsizligini o'rganamiz.