Mavzu
Dars xulosasi
- REST (Representational State Transfer) — veb-xizmatlarni resurslar atrofida quruvchi yondashuv.
- Resurs (kitob, buyurtma, foydalanuvchi) o'z manzili — URI — orqali ifodalanadi.
- «Nima?» — URI, «qanday?» — HTTP metodi.
- URI qoidasi: ko'plikdagi otlar (
/books), ierarxiya (/orders/ORD-001/items), filtr va saralash query'da (?status=paid&sort=-created_at). - Metodlar: GET (o'qish), POST (yaratish), PUT (to'liq yangilash), PATCH (qisman), DELETE (o'chirish).
- Idempotentlik: bir necha marta yuborganda holat o'zgarmasligi (GET, PUT, DELETE shunday; POST odatda yo'q).
- Stateless: server seans holatini saqlamaydi, har so'rov o'zi hammasini olib keladi.
- Status kodlari: 200, 201, 204, 400, 401, 403, 404, 409, 500.
- Sarlavhalar:
Content-Type,Accept; keshlash uchunETag/304.
Qo'shimcha ma'lumot
1. Kutubxona o'xshatishi
Har bir kitobning javon raqami bor: bu URI. Kutubxonachiga aytadigan amallar: «ko'rsat» (GET), «yangi kitob qo'sh» (POST), «butunlay almashtir» (PUT), «faqat muqovasini yangila» (PATCH), «chiqarib tashla» (DELETE). Javon raqami o'zgarmaydi, amal o'zgaradi.
2. Nega URL'da fe'l bo'lmasligi kerak?
/getBooks, /createBook, /deleteBook ko'rinishida har amal uchun yangi manzil o'ylab topasiz. REST'da esa manzil bitta (/api/books), amalni HTTP metodi bildiradi. Natijada API bashoratli: bitta qoidani bilsangiz, hamma resursni tushunasiz.
3. Idempotentlik misoli
DELETE /api/books/5ni besh marta yuborsangiz: kitob yo'q bo'lib qoladi. Ikkinchi marta 404 kelishi mumkin, lekin tizim holati o'zgarmaydi.POST /api/booksni besh marta yuborsangiz: besh dona kitob yaratiladi.
To'lov kabi xavfli POST uchun Idempotency-Key sarlavhasi ishlatiladi: bir xil kalit bilan takror so'rov bir xil natija beradi (pul ikki marta yechilmaydi).
4. 401 va 403 ni qanday eslab qolish mumkin?
401 — «Siz kimsiz? Tanishtiring» (token yo'q). 403 — «Sizni taniyman, lekin kirish mumkin emas». Binoga kirishda: karta ko'rsatmadingiz (401) va karta bor, lekin bu xonaga ruxsat yo'q (403).
5. Odatiy xatolar
- Xatoni ham
200bilan qaytarish: mijoz hammasi joyida deb o'ylaydi. GETbilan ma'lumotni o'zgartirish.- Birlik va ko'plikni aralashtirish:
/bookva/books. - Maxfiy ma'lumotni URL'ga yozish: loglarda qoladi.
Atamalar lug'ati
| Atama | Ma'nosi |
|---|---|
| REST | Resursga yo'naltirilgan, HTTP ustida ishlovchi API yondashuvi |
| Resurs | API orqali boshqariladigan narsa: kitob, buyurtma, foydalanuvchi |
| URI | Resursning tarmoqdagi manzili, masalan /api/books/5 |
| Endpoint | Metod + URI birikmasi, masalan GET /api/books |
| Idempotentlik | Takror so'rov holatni o'zgartirmasligi |
| Stateless | Serverda seans holati saqlanmasligi |
| Status kod | Javobning natijasini bildiruvchi raqam (200, 404...) |
| Content-Type | Yuborilayotgan ma'lumot formati sarlavhasi |
| Accept | Mijoz kutayotgan javob formati sarlavhasi |
| ETag | Javob versiyasini bildiruvchi hash; keshlashda ishlatiladi |
| CRUD | Create, Read, Update, Delete: to'rt asosiy amal |
Bilasizmi?
- Barcha brauzer so'rovlari HTTP metodlari bilan ishlaydi: sayt ochish odatda
GET, formani yuborish ko'pinchaPOST. 404kodi shu darajada mashhur bo'lib ketganki, internetda «404» deyilganda hamma «topilmadi» ni tushunadi.- REST atamasi 2000-yilda Roy Fielding doktorlik dissertatsiyasida taklif etilgan (ochiq manbalardagi umumiy ma'lumot).
- Postman va
curl— API'larni sinash uchun eng ko'p ishlatiladigan vositalar qatoriga kiradi.
Topshiriqlar
1. Metod tanlash oson
Har bir amal uchun metod tanlang: (a) kitoblar ro'yxatini olish; (b) yangi kitob qo'shish; (c) kitobni butunlay yangilash; (d) faqat available ni o'zgartirish; (e) kitobni o'chirish.
Kutiladigan natija: 5 ta metod nomi.
2. URL'ni tuzating oson
Qayta yozing: /getUsers, /api/order/delete?id=3, /api/createBook, /api/books/7/getReviews.
Kutiladigan natija: 4 ta metod + URI juftligi.
3. Status kodlarini moslang oson
Moslang: 200, 201, 204, 404 — (a) yangi kitob yaratildi; (b) javob tanasi bo'sh, o'chirish bajarildi; (c) kitob topilmadi; (d) kitob muvaffaqiyatli olindi.
Kutiladigan natija: to'g'ri juftliklar.
4. Idempotent yoki yo'q? oson
GET, POST, PUT, PATCH, DELETE: har birining idempotentligini yozing. PATCH nega «ba'zan» deyiladi?
Kutiladigan natija: jadval va 1–2 jumlali izoh.
5. API'ni ishga tushiring o'rta
Darsdagi library-api/app.py ni yozing, ishga tushiring va curl -i bilan GET /api/books, GET /api/books/1, GET /api/books/99 ni chaqiring.
Kutiladigan natija: 3 ta status kodi (200, 200, 404) va skrinshot yoki terminal matni.
6. POST va PUT'ni solishtiring o'rta
Bir xil tana bilan PUT ni 2 marta, POST ni 2 marta yuboring. GET /api/books natijasini ko'rib, farqni yozing.
Kutiladigan natija: qaysi metod yangi yozuv yaratgani va qaysi biri bermagani haqida xulosa.
7. Bashorat qiling o'rta
curl -i -X POST http://127.0.0.1:8000/api/books -H "Content-Type: application/json" -d '{}' qanday status qaytaradi? Javob tanasida nima bo'ladi? Avval taxmin qiling, keyin sinang.
Kutiladigan natija: taxmin va haqiqiy natija taqqoslanadi.
8. Xatoni toping o'rta
Quyidagi API dizaynida nechta xato bor? GET /api/deleteBook/5 kitobni o'chiradi va 200 qaytaradi, kitob topilmasa ham 200 {"ok": false} qaytaradi.
Kutiladigan natija: kamida 3 ta xato va ularning to'g'ri varianti.
9. PATCH qo'shing qiyin
app.py ga PATCH /api/books/<id> qo'shing: faqat yuborilgan maydonlarni yangilasin. Yo'q kitobga 404, noto'g'ri JSON'ga 400 qaytarsin.
Kutiladigan natija: {"available": false} yuborilganda faqat shu maydon o'zgaradi.
10. Yangi resurs: mualliflar qiyin
/api/authors va /api/authors/<id> uchun GET va POST endpointlarini qo'shing. Ierarxik URL ham o'ylab toping: muallifning kitoblari.
Kutiladigan natija: ishlaydigan endpointlar va ierarxik URL taklifi (masalan, GET /api/authors/1/books).
11. Dizayn hujjati qiyin
Kutubxona API'ning to'liq endpointlar jadvalini yozing (metod, URI, status kodlar, qisqa izoh). Kamida 8 endpoint.
Kutiladigan natija: library-api/README.md da jadval.
12. ETag tadqiqoti bonus
GET /api/books/1 javobiga ETag qo'shing; If-None-Match mos kelsa 304 qaytaring. curl -i bilan ko'rsating.
Kutiladigan natija: ikkinchi so'rov 304 qaytaradi, tana bo'sh.
O'zingizni tekshiring
- REST'da «resurs» va «URI» nima?
- PUT va PATCH farqi nima?
- Qaysi metodlar idempotent va nega bu retry uchun muhim?
- 401 va 403 qanday farq qiladi?
- Stateless nima beradi?
Content-TypevaAcceptnima uchun kerak?- 304 kodi qachon qaytariladi?
Uyga vazifa
library-api/ ga kamida 3 ta endpoint qo'shing (masalan, PATCH, mualliflar), har biri to'g'ri status kod qaytarsin, README.md da endpointlar jadvalini yozing. Natijani Pull Request qiling (20–30 daqiqa). Shartlar uyga-vazifa.md da.
