8.1 Remote API yondashuvi
Barcha dasturchilar klient-server arxitekturasi qurishda bir xil xatoni qiladilar. Ular serverga yuboriladigan so'rovlarni, metodlarni chaqirishdek qabul qilishadi.
Agar serverda hisobot yaratish jarayonini boshlamoqchi bo'lsang, serverga quyidagi so'rovni yuborish uchun nima sabab bo'lmasin:
http://server.com/startDocumentGeneration?params
Va hisobotni yaratib bo'lgandan so'ng uni qanday yuklab olasiz? Buning uchun yana bir metod yozamiz:
http://server.com/getDocument
Server HttpSessionda bizning hujjatimiz haqida ma'lumot saqlaydi va hujjat yaratilgan zahotiyoq uni beradi.
Ajoyib yondashuv. Yoki yo'qmi?
Bu yondashuv aslida dahshatli. Gap shundaki, server hujjat raqamini esda saqlashi kerak. Boshqacha qilib aytganda, yangi metod chaqiruvlarini to'g'ri qayta ishlash uchun, server avvalgi metod chaqiruvlarining natijalarini esda saqlashi kerak.
Vebda bu katta muammo. Internet yo'qolishi, brauzer yopilishi mumkin. Sahifani qayta yuklash yoki biror havolaga tasodifan bosish mumkin va hokazo. Server esa foydalanuvchining avvalgi so'rovlaridan megabaytlar ma'lumot saqlashda davom etadi...
Server bilan qulay ishlash uchun siz avvalgi so'rovlardan ma'lumotlar doimo yoningizda bo'lishiga ishonishingiz mumkin emas.
Xo'sh, unda server metodlarini qanday chaqirish kerak? Yaxshi javob shundayki: hech qanday!
8.2 REST yondashuvi
Dasturchilar asl manbaga qaytib, dastlabki ish serverda fayl yo'li sifatida amalga oshirilgani eslariga tushdi:
http://server.com/path?params
Va bu yondashuvdan maksimal darajada foydalanishga qaror qilishdi.
Endi server ma'lumotlar ombori sifatida qaraladi, ular ba'zi daraxt shaklida tashqariga ko'rinadi.
Barcha foydalanuvchilar ro'yxatini olishni xohlaysizmi, so'rovni chaqiring:
http://server.com/users
113 foydalanuvchi ma'lumotlarini olishni xohlaysizmi, so'rovni bajarishingiz kerak:
http://server.com/users/113
Va hokazo, hammasi shu tarzda davom etadi.
Yana bir bor, server ma'lumotlar ombori sifatida qaraladi, ular ba'zi daraxt shaklida tashqariga ko'rinadi.
Ma'lumotlarni olish mumkin – GET so'rovlari, o'zgartirish – POST so'rovi va o'chirish – DELETE so'rovi orqali amalga oshiriladi.
8.3 Holatni saqlamaslik
REST protokoli klient va server o'rtasidagi o'zaro aloqani quyidagi shartni bajarishni talab qiladi: klientdan kelgan so'rovlar orasidagi davrda serverda klientning holati haqida hech qanday ma'lumot saqlanmaydi.
Klientdan kelgan barcha so'rovlar serverga so'rovni bajarish uchun zarur bo'lgan barcha ma'lumotlarni olishi uchun tuzilgan bo'lishi kerak. Sessiyning holati esa klient tarafida saqlanadi.
Klient so'rovlarini qayta ishlash davomida klient o'tish holatida bo'lganligi taxmin qilinadi. Dastur har bir alohida holati, keyingi klient so'rovida foydalanilishi mumkin bo'lgan aloqalar orqali ifodalanadi.
8.4 Interfeysning yagona shakli
Serverdan obyektlar qaytariladigan barcha yo'llar standartlashtiriladi. Bu juda qulay, ayniqsa, begonalarning REST-serverlaridan ma'lumot olishingiz kerak bo'lsa.
Obyektlar interfeysining uchta shartni bajarishi kerak:
Resurslarni identifikatsiya qilish
Barcha resurslar URI yordamida so'rovlarda identifikatsiya qilinadi. Server ichidagi resurslar, klientlarga qaytariladigan ko'rinishlardan ajratilgan. Masalan, server ma'lumotlarni HTML, XML yoki JSON formatida yuborishi mumkin, ulardan hech biri server ichidagi saqlash turi emas.
Resurslarni ko'rinish orqali boshqarish
Agar klient resursning ko'rinishini, metama'lumotlarini o'z ichiga olgan holda saqlasa, u serverdagi resursni o'zgartirish yoki o'chirish uchun yetarli ma'lumotga ega bo'ladi.
"O'z-o'zini tushuntiradigan" xabarlar
Har bir xabar uni qanday qayta ishlashni tushunish uchun yetarli ma'lumotni o'z ichiga oladi. Masalan, agar sizga foydalanuvchi haqida ma'lumot kerak bo'lsa, server sizga JSON obyekti qaytaradi, unda ism, manzil maydonlari bo'ladi.
Klient birinchi javobda birinchi raqam – bu yosh, ikkinchi esa – tug'ilgan sana ekanligini bilishi kerak bo'lgan holat bo'lmasligi kerak.
8.5 Cache qilish
REST yondashuvi, ma'lumotlar so'rovi HTTP protokoli orqali amalga oshirilishini taxmin qiladi. Shuning uchun obyektlar GET so'rovini chaqirish orqali olinadi. Demak, ularga, GET so'rovi orqali olingan barcha resurslarga, HTTP resurslarini cache qilishning barcha qoidalari tegishli.
Ya'ni, REST API orqali olingan ma'lumotlar veb-serverlarda har qanday statik resurslar kabi cache qilinadi. Go'zallik :)
GO TO FULL VERSION