Representational State Transfer · URI dizayni · HTTP metodlari · Status kodlari
11-sinfProfessional IT4-hafta · 11-darsRoy Fielding falsafasi, resurs tushunchasi va URI loyihalash qoidalari.
GET, POST, PUT, PATCH, DELETE semantikasi va idempotentlik.
2xx, 3xx, 4xx, 5xx toifalari va terminalda API bilan amaliy ishlash.
Mijoz va server o'rtasida ma'lumot almashishning universal me'moriyligi
Mijoz interfeysga, server ma'lumotlarga javobgar. Server har bir so'rovni alohida (stateless) ko'radi, sessiya holatini xotirada saqlamaydi.
Javoblar keshlash belgisi bilan keladi. Barcha resurslar yagona qoidalar (URI, HTTP metodlar, JSON) asosida boshqariladi.
Ichki resurslar ota resurs ostiga joylashtiriladi:
GET /authors/15/books — 15-muallifning kitoblariPOST /orders/ORD-1/items — buyurtmaga tovar qo'shishFiltr, sahifalash va tartib parametrlar orqali uzatiladi:
GET /books?genre=fiction&sort=year_descGET /books?page=2&limit=20Har bir HTTP harakatining semantikasi, xavfsizligi va takrorlanuvchanligi
| 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 |
Resursning barcha maydonlari yuborilishi shart. Yuborilmagan maydonlar null bo'lib qolishi mumkin.
{
"title": "Clean Code",
"author": "Robert Martin",
"price": 120000,
"in_stock": true
}
Faqat o'zgargan maydonlargina yuboriladi. Qolgan barcha ma'lumotlar saqlanib qoladi.
{
"price": 135000
}
Server javoblari bilan to'g'ri muloqot va sarlavhalar (Headers)
200 OK — So'rov bajarildi.201 Created — Yangi resurs yaratildi.204 No Content — Bajarildi, qaytadigan tana yo'q.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.Mijoz yoki server yuborayotgan jism (body) qaysi formatdaligini bildiradi:
Content-Type: application/json
Mijoz serverdan qaysi formatdagi javobni kutayotganini belgilaydi:
Accept: application/json
# 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
/getAllBooksGET /api/books
/api/book/createPOST /api/books
/api/deleteBook?id=5DELETE /api/books/5
/api/books/5/getAuthorGET /api/books/5/author
Qoida: «nima?» - URI (ko‘plikdagi ot), «qanday?» - HTTP metodi.
Foydalanuvchi qaysi serverga kirgan bo‘lsa, faqat o‘sha server uni taniydi. Ikkinchi nusxa qo‘shish qiyin.
Authorization: Bearer <jwt> har so‘rovda keladi. Load balancer ortida istalgan nusxa javob beradi: gorizontal masshtablash oson.
Kitobning faqat year maydonini o‘zgartirish kerak. Qaysi so‘rov eng to‘g‘ri?
Xatoni ham 200 bilan qaytarish: mijoz xatoni sezmaydi
401 - kimligi noma’lum, 403 - ma’lum, lekin ruxsat yo‘q
Token query’da loglarda qolib ketadi: sarlavhada yuboring
Qaysi vaziyatda qanday status kodi qaytarilishi kerak?
Foydalanuvchi mavjud bo'lmagan /books/999 ga murojaat qildi.
Javob: 404 Not Found
Yangi kitob muvaffaqiyatli bazaga qo'shildi.
Javob: 201 Created
O'chirish muvaffaqiyatli bo'ldi, qaytarishga ma'lumot yo'q.
Javob: 204 No Content
URL manzillarda faqat ot va ko'plik ishlatiladi, amallar HTTP metodlariga yuklanadi.
GET, PUT, DELETE metodlari xavfsiz va bir necha marta chaqirishga chidamli.
12-darsda JSON kontrakt dizayni, Error envelope va API xavfsizligini o'rganamiz.