REST API bilan tanishish.

topshirish / Corisna haqida ma'lumot
Golovna

Internetning rus qismida SOAP va XML-RPC-ga asoslangan veb-xizmatlarga bag'ishlangan ko'plab maqolalar mavjud, ammo butun dunyo (yoki kamroq) REST arxitekturasi haqida hech narsa yo'q.

Ushbu maqolada ushbu arxitektura asoslari, uning imkoniyatlari va ilovalari tasvirlangan.

REST nima?

REST (Vakillik holatini o'tkazish) - bu veb-xizmatlarni taqdim etish uchun ishlatiladigan World Wide Web kabi taqsimlangan tizimlar uchun dasturiy ta'minot arxitekturasining uslubi.

REST atamasi HTTP protokoli mualliflaridan biri Roy Filding tomonidan 2000 dan ortiq marta kiritilgan.

RESTni qo'llab-quvvatlaydigan tizimlar RESTful tizimlar deb ataladi.

REST opsiyasi qo'shimcha ichki ishlovsiz ma'lumotlarni boshqarish uchun juda oddiy interfeysga ega.

Har bir ma'lumot bo'lagi URL kabi global identifikator bilan noyob tarzda aniqlanadi.

Har bir URL o'ziga xos tarzda, qat'iy vazifa formatiga ega.

Va endi, eng aniq:
Qo'shimcha ichki qidiruvlarning mavjudligi ma'lumotlarning o'zi kabi ma'lumotlarni uzatishni anglatadi.
Tobto.

Biz SOAP va XML-RPC kabi ma'lumotlarni XML-ga yozmaymiz, Flash kabi AMF-dan foydalanmaymiz va hokazo.

Biz faqat ma'lumotlarning o'zini beramiz. Ular REST-Patterns deb ataladi, ular HTTP usullari bilan bog'liq bo'lib, ularni buzish kerak. Uyga yaqinroq, turli modellar POST va PUT ga turli yo'llar bilan qarashadi. Biroq, PUT yaratish, takrorlash va yangilash uchun tayinlanmagan, biroq POST uchun hech qanday topshiriq yo'q

(POST operatsiyasi juda umumiy va unga hech qanday aniq ma'no qo'shilmaydi)
.
Shuning uchun, mening misolim ushbu shaklda to'g'ri bo'ladi va siz POST va PUTni bir-birining o'rnida nazarda tutganingizdek.
Yana bir bor, POST barcha o'zgarishlar uchun bir vaqtning o'zida o'zgartirilishi mumkin:

POST /book/ – kitob qo‘shing (ma’lumotlar so‘raladi)

POST /book/3 - kitobni o'zgartirish (ma'lumotlar so'raladi)

POST /book/3 - kitobni o'chirish (tana bo'sh bo'ladi)

Bu ba'zan PUT va DELETE muammolari bilan bog'liq noxush daqiqalarni e'tiborsiz qoldirish imkonini beradi.

Kundalik veb-xizmatlar uchun REST wiki. Ma'lumki, veb-xizmat - bu World Wide Web tarmog'ida ishlaydigan va unga kirish HTTP protokoli orqali ta'minlanadigan qo'shimcha dastur bo'lib, ma'lumotlar almashinuvi qo'shimcha XML formatida amalga oshiriladi. Shunday qilib, tanaga uzatiladigan ma'lumotlar formati har doim XML bo'ladi.

Teri haqida ma'lumot birligi uchun 5 ta harakat ko'rsatilgan. Va o'zingizga: OLISH /info/

(indeks)- Barcha ob'ektlar ro'yxatini ko'rsatadi. Kechirimga chaqiring, tamom. Boshqa ma'lumotlarsiz faqat identifikator va ob'ekt nomi maydonlarini joylashtiring. OLISH /info/(id)

(Ko'rish)
- Ob'ekt haqida ko'proq ma'lumot oladi.
PUT /info/
yoki boshqa
}

POST /ma'lumot/- Barcha ob'ektlar ro'yxatini ko'rsatadi. (Yaratish) - Men yangi ob'ekt yaratyapman. Ma'lumotlar tanada hech qanday kodlashsiz, urlencode yordamida uzatiladi.

PHP da tanani shunday yozish mumkin: getBody() funktsiyasi ( agar (!isset($HTTP_RAW_POST_DATA))

$HTTP_RAW_POST_DATA = file_get_contents("php://input");

$HTTP_RAW_POST_DATA qaytaring;

POST /info/(id)

Ko'rinishidan, REST arxitekturasi rivojlanish nuqtai nazaridan juda oddiy.

Ko'rsatmalarga qarab, siz formatlarni tushunmasdan nima ishlayotganini ayta olasiz (SOAP, XML-RPC uchun).

Ma'lumotlar qo'shimcha ma'lumotlarni saqlamasdan uzatiladi, shuning uchun REST kamroq resurs talab qiladi, chunki u nima qilish kerakligini tushunish uchun tahlil qilishni talab qilmaydi va ma'lumotlarni bir formatdan boshqasiga o'tkazishni talab qilmaydi.

Turg'unlikdan ko'ra ko'proq amaliy.

Xizmatlarning asosiy afzalligi shundaki, ular tizim tomonidan qayta ishlanishi mumkin, xoh u veb-sayt, flesh, dastur va boshqalar. HTTP uchun XML va vykonannya so'rovlarini tahlil qilish usullarining parchalari yaqin kelajakda mavjud.

REST arxitekturasi vazifani jiddiy ravishda soddalashtirishga imkon beradi.

Bu, ayniqsa, funksionallik nuqtai nazaridan to'g'ri keladi, lekin juda kam ta'riflangan va hatto kimgadir ma'lumotni o'zgartirish imkoniyatini berishning iloji bo'lmasa ham, avtorizatsiya va autentifikatsiya ham talab qilinadi.

Tartibga solinmagan g'alaba protokollari standart operatsiyalarga aylanadi, REST tizimlari yangilanishi mumkin bo'lgan va tizimda qolib ketmaydigan re-vikor komponentlari sonini ko'paytirish uchun yuqori mahsuldorlikka, ishonchlilikka va mavjudligiga qaratilgan

REST tarmoqlari ko'pincha SOAP (Simple Object Access Protocol) uslubida soddaroq va ahamiyatsizroq bo'ladi, REST esa o'tkazish qobiliyatining yuqori narxiga ega emas, bu ularni Internet qidiruv tizimlari uchun ko'proq moslashtiradi.

SOAP yondashuvi uchun siz server dasturini (ma'lumotlarga xizmat ko'rsatish uchun) va mijoz dasturini (ma'lumotlarni saqlash uchun) yozishingiz yoki yaratishingiz kerak.

Texnologiya tarixi

"Mamlakatga vakillik o'tkazish" atamasi 2000 yilda Roy Filding tomonidan "Arxitektura uslublari va chekka dasturiy ta'minot arxitekturalarining dizayni" dissertatsiyasida kiritilgan va kiritilgan.

Biz REST arxitektura uslubini HTTP 1.1 1996-1999 bilan parallel ravishda, HTTP 1.0 1996 asosiy loyihasi asosida ishlab chiqdik.

  • Texnologiyaning rivojlanishiga retrospektiv nuqtai nazardan qarashda, Filding HTTP standartlashtirish jarayonida bosishlar Internetdagi dizayn tanlovini o'g'irlashini aytdi.
  • Bu Shvetsiya qanday qilib bu galusaning markaziga aylanishi haqidagi har qanday kishidan takliflarni qabul qiladigan jarayon doirasidagi juda murakkab jarayon.
  • 500 dan ortiq ishtirokchilarning sharhlari, ularning aksariyati keng bilimga ega bo'lgan sodiq muhandislar.
  • Veb-o'zaro munosabatlarni mavhum tushunishdan HTTP sintaksisining aniq tafsilotlarigacha hamma narsani tushuntirish sizga bog'liq.
  • Ushbu jarayon ushbu modelni REST deb ataladigan asosiy printsiplar, vakolatlar va ramkalar to'plamiga aylantirdi.
  • Afzalliklar
  • REST uslubining o'ziga xos xususiyatlari quyidagi me'morchilik tamoyillaridan kelib chiqadi:

Mijozlar o'rtasidagi muammolar doirasi REST API komponentlarning amalga oshirilishini his qilish imkonini berishi, ulagichning semantikasining murakkabligini o'zgartirishi, unumdorlikni sozlash samaradorligini oshirishi va sof server komponentlarining miqyoslanishiga yordam berishi bilan izohlanadi.

Yilni tizimli o'zaro ulanishlar proksi-vositachilarga, shlyuzlarga va xavfsizlik devorlariga komponentlar orasidagi interfeyslarni o'zgartirmasdan turli nuqtalarda muloqot qilish imkonini beradi, bu ularga REST uzatishni amalga oshirish yoki keng ko'lamli keshlash yordamida samaradorlikni his qilish imkonini beradi.

REST API-ni qo'llash, agar o'zaro ta'sir so'rovlar shaklida bo'lmasa, semantika va ma'lumotlar almashinuvini aniqlash uchun standart usullar va ommaviy axborot vositalari turlari qo'llaniladi va natijalar keshlashni aniq ko'rsatadi.

Rasmiy va me'moriy chegaralar

Oltita asosiy chegara RESTful tizimini tavsiflaydi.

Ular serverning mijozlar so'rovlarini qayta ishlash va qabul qilish usullarini belgilaydi.

Ushbu o'zaro ta'sirlar doirasida harakat qiladigan xizmat unumdorlik, masshtab, soddalik, ko'plik, ko'rinish, harakatchanlik va ishonchlilik kabi funktsional bo'lmagan kuch elementlarini yo'q qiladi.

Agar xizmat kerakli ulanishlarni buzsa, u RESTful bo'la olmaydi.

Resurs - bu Internetda mavjud bo'lgan ob'ekt (mantiqiy yoki jismoniy).

Bu server fayl tizimida saqlanadigan hujjat yoki ma'lumotlar bazasi jadvalidagi qator bo'lishi mumkin.

Terminal koristuvach qo'shiq belgisiga erishish uchun resurs bilan o'zaro ta'sir qiladi.

REST-ga asoslangan tizimni loyihalash uchun dizayner biznes ob'ektlarini resurslar va hal qilinishi mumkin bo'lgan narsalar haqida o'ylashi kerak.

URI - resursni noyob tarzda aniqlaydi.

Ushbu parametr manzil manbasini o'zgartiradi va o'zgarishi mumkin.

Resurslar HTTP kabi protokol tomonidan qo'llab-quvvatlanadigan dasturlarga almashtiriladi.

Podannya - Men hozirda resursga aylanaman.

Mijoz so'rovni resursga, so'ngra URIga qaytaradi.

Resursni XML, HTML, JSON, RSS, REST API java kabi uzatiladigan bir yoki bir nechta formatlarda ko'rish mumkin.

Ushbu formatlar tarkibni yaxshilash uchun qo'shimcha mexanizm bilan moslashtirilishi mumkin.

Huquq - dasturga bir holatdan ikkinchi holatga o'tishni bekor qilish imkonini beradi.

Har bir resurs boshqa manbalarga ulanishi mumkin.

Hozirgi bo'lajak o'tish uchun qonunni tasdiqlashi mumkin.

Yaxshi ulangan dastur foydalanuvchiga interfeysni mustaqil ravishda ochish imkonini beradi.

Ulagich

REST API maqsadlari - bu nima?

Maqsad, o'zaro bog'lanishni minimallashtirish va masshtabga erishish uchun komponentlarning mustaqil evolyutsiyasini maksimal darajada oshirish uchun turli uslublarni muvofiqlashtirilgan chegaralar to'plami bilan birlashtirishdir.

Yangi gipermedia arxitekturasining narxi.

Smartfonlar, planshetlar va gadjetlar paydo bo'lishi bilan o'lchov o'lchovi mavjud.

Uchinchi tomon xizmatlari uchun RESTful API yaratilishi mumkin.

  • Bir tomonlama robot dasturlarini orqa tomon bilan ishlatishingiz mumkin.
  • Interfeysni loyihalashdan oldin bilishingiz kerak bo'lgan bir qator asosiy fikrlar mavjud.
  • URL manzillar va shartlar
  • REST ning asosiy printsipi APIni mantiqiy resurslarga bo'lishdir.
  • Ushbu resurslarni boshqarish standart usul bilan qo'shimcha HTTP so'rovlari yordamida amalga oshiriladi - GET, POST, PUT, PATCH, DELETE.
  • Resurs ko'plikning nomi bilan tavsiflanishi kerak.

Resurslar ustidagi harakatlar CRUD strategiyasi yordamida aniqlanadi va quyidagi tartibda HTTP usullari tomonidan qo'llab-quvvatlanadi:

  • GET /api/users - mijozlar ro'yxatini olish;
  • GET /api/users/123 - belgilangan foydalanuvchini tanlang;

POST /api/users – yangi foydalanuvchi yaratish;

  • PUT /api/users/123 - ko'rsatilgan hisob menejerining barcha ma'lumotlarini yangilash;
  • PATCH /api/users/123 – koristuvach ma'lumotlarini qisman yangilash;

DELETE /api/users/123 - vidaliti koristuvach.

Resurs faqat boshqa manba kontekstida mavjud bo'lganligi sababli, URL birlashtirilishi mumkin:

GET /api/posts/9/comments - 9-sonli yozuvga sharhlar ro'yxatini pastga aylantiring;

GET /api/posts/9/comments/3 - 3-sonli sharhni 9-postga o'tkazing.

  • Agar ob'ektdagi harakat CRUD operatsiyasi bo'lsa, uni saqlash resursi sifatida ishlatish mumkin:
  • POST /api/posts/9/like - o'xshashlik sifatida 9-sonli yozuvni bildiradi;

DELETE /api/posts/9/like - 9-sonli postdan “malakali” belgisini olib tashlang.

Maqsadlar ro'yxatiga yon navigatsiya haqida ma'lumot qo'shishingiz kerak bo'lsa, ma'lumotlar o'ramlarini qo'shish o'rniga HTTP havolasi sarlavhasidan tezda foydalanishingiz mumkin.

Sarlavha ko'rinishi:

Havola: ; rel = "keyingi", ; rel = "oldingi",

;

  • rel = "birinchi",
  • ;
  • rel = "oxirgi"
  • Mumkin rel qiymatlari:

keyingi - natijalar sahifasi keladi;

oldingi – natijalarning old tomoni;

natijalarning birinchi - birinchi sahifasi;

oxirgi - natijalarning oxirgi tomoni.

  • Ba'zida sahifadan keyingi navigatsiya oddiy sahifalarni qidirishga emas, balki murakkab qoidalarga asoslangan bo'lishi uchun turli xil URL manzillarini yaratishdan ko'ra bu ma'nolarni tushunish muhimdir.
  • HTTP usuliga qayta tayinlash
  • GET va POSTdan boshqa HTTP usullarini qo'llab-quvvatlamaydigan ba'zi serverlar yoki mijozlar bilan foydalanish uchun ularning emulyatsiyasi zarur bo'lishi mumkin.
  • Usul uchun qiymatlar X-HTTP-Method-Override sarlavhasiga o'tkaziladi va qiymatning o'zi POST usuli sifatida etiketlanadi.
  • GET so'rovi server lagerini o'zgartirishda aybdor emas!

Kodi HTTP holati

200 OK – GET, PUT, PATCH yoki DELETE muvaffaqiyatli so‘roviga javob.

201 Created - POST javobi yangi ob'ektni yaratish natijasini ko'rsatadi. Javob, shuningdek, manbaning URL manzilini ko'rsatadigan Joylashuv sarlavhasi bilan birga bo'lishi mumkin. 204 Kontent yo'q - hech narsani o'zgartirmaydigan buyruqning muvaffaqiyatli bajarilishini bildiradi (masalan, DELETE).

404 topilmadi - so'ralgan ob'ekt topilmadi.і 500 ichki server xatosi - serverdagi xato. ".

Xarid qilingan taqdirda, agar iloji bo'lsa, nashrda xaridorlar uchun qo'shimcha ma'lumotlar bo'lishi mumkin.

Aktyorlar aytadilar:

"Tse

API

, qaysi vikirist uchun HTTP so'rovi Javob, shuningdek, manbaning URL manzilini ko'rsatadigan Joylashuv sarlavhasi bilan birga bo'lishi mumkin. OLISH, QO'YISH, POST OʻCHIRISH Kim shunday desa:

"Resurslarni taqsimlash uchun qo'shimcha URI ga qarang"

Boshqalar baland ovozda qichqiradilar:

Oxirida siz aytishingiz mumkin:

"Asosiy jihatdan, bu oddiy , qanday vikorist.

HTTP

To'g'ri!"

Bu odamlarning harakatlari afvni tasdiqladi,

Bu odamlarning harakatlari afvni tasdiqladi,

Deyaki chastkovo verni,

    lekin buning ma'nosi yo'q,

    Bu hid

    hamma nuqtani yo'qotmoqda

RESTful API ishlab chiqish imkonini yaratish uchun,

Birinchisiga ko'ra

REST nima?

REST bu:

Virazno HTTP emas

Chi protokoli yo'q

Hech qanday spetsifikatsiya

Nima uchun juda ko'p REST API mavjud?

Va hali...

Buni Roy Filding 2000 yilda doktorlik dissertatsiyasida yozib olgan va hozirgi veb-arxitekturani abstraksiya sifatida tasvirlagan.

Bulaning nomi veb-qo'shimchalarning yaxshi rivojlanishi bilan qanday kurashish kerakligi haqidagi Viklikati bayonotiga chaqiriladi.

Roy RESTni oddiy misolda tasvirlab berdi:

Keling, veb-sahifalarni virtual mashina sifatida ko'rib chiqaylik.

Teri tomoni tanani ifodalaydi:

1. Birinchidan, koristuvach indeks lagerining ko'rinishidan birinchi lagerni olib tashlaydi.

2. Keyin koristuvach xabarni tanlab dastur orqali o'ting (bu erda xabar yon tomonga yuboriladi)

3. Hujumning Koristuvachevi lageriga o'tkazilishi natijasi.

REST HTTP emas

Albatta, 2000-yildayoq tarmoq HTTP ustida ishlayotgan edi va Roy va uning hamkasblari uning ustida ko‘p ishlaganlar.

Biroq, REST tizimni amalga oshirishning aniq tafsilotlarini yoki protokol sintaksisini aniqlamaydi.

HTTP-dan xabardor protokollar ustiga RESTful arxitekturasini yaratish butunlay mumkin.

Masalan, CoAP (Cooperative Access Protocol) qurilmalarni (Internet of Things) joylashtirish uchun RESTful protokoli bo'lib, qurilmada ham, bir vaqtning o'zida ham minimal resurslarni taqsimlash uchun ishlatiladi.

Xo'sh, REST dan foydalanishning maqsadi nima?

World Wide Web REST arxitekturasiga asoslangan.

Shuning uchun, agar siz Internetda keng tarqalgan bo'lgan RESTful bo'lmagan API yaratsangiz, unda siz suboptimal tizimni yaratasiz. Optimallashtirilgan arxitektura uchun optimal emas.

Shuni ta'kidlash kerakki, ba'zi RESTful bo'lmagan API-lar chekka arxitektura uchun maqbul bo'lmasligi mumkin, ammo boshqa muammolar uchun maqbul emas.

Masalan, zamonaviy front-end dasturlari juda aniq ehtiyojlarni qondira oladi va GraphQL yoki Falcor kabi ma'lumotlar yig'ish kutubxonalari soni ortib bormoqda.

Xo'sh, qancha RESTful API mavjud?

Agar u REST chegaralari ostida doimiy ishlasa, API RESTful hisoblanadi.

REST tizimi kerakli optimallashtirishga erishish uchun 6 chegarani bildiradi:

1. Mijoz-server

Bu almashinuv manfaatlar tamoyiliga asoslanadi.

Bu komponentlarning mustaqil rivojlanishiga imkon beradi.

Biz API-ni yaratganimizda, u ko'p sonli mijozlarga xizmat ko'rsatadigan server vazifasini bajaradi.

2. Ommaviy holda

Eng samarali chora o'lchovni vikorizatsiya qilmaydigan choradir.

Agar biz APIni yaratsak, keshni e'tiborsiz qoldirish bizning aybimiz emas.

4. To'g'ri interfeys

Keshni samarali keshlashni ta'minlash uchun komponentlar bitta interfeys orqali aloqa o'rnatishi kerak.

Yagona interfeys bilan kerakli ma'lumot standart shaklda uzatilishi mumkin.

4.1.

Resurslarni aniqlash

Bu shuni anglatadiki, nomlanishi mumkin bo'lgan har qanday ma'lumot manba (rasm, hujjat yoki boshqa manbalar to'plami) bo'lishi mumkin.

4.2.

Namoyishlar orqali resurslarni manipulyatsiya qilish

Resurs turli yo'llar bilan ifodalanishi mumkin.

Masalan, HTML, XML, JSON yoki JPEG faylini yuboring.

Bu shuni anglatadiki, mijozlar resurslar bilan o'zlarining namoyon bo'lishlari orqali o'zaro aloqada bo'lishadi, bu ularning o'zaro ta'sirida resurslarni mavhum tushunishni sezilarli darajada kamaytiradi.

4.3 Uchinchidan, o'z-o'zidan tavsiflangan ma'lumotlar

Bu shuni anglatadiki, resurs xabar qilingan so'rovga tavsiflar berishi mumkin va server sayt haqida tavsiflarni taqdim etishi mumkin.

Shunday qilib, HTTP sarlavhalari va javob kodlari ushbu qoida uchun asosiy ilovalardir.

4.4.

Gipermedia vosita va dasturga aylanishi mumkin

Buning ma'nosi shundaki, dastur mijozlarga giper-quvvat orqali resurslarga kirish imkonini beruvchi vakolatlarga ega.

Ko'rib turganingizdek, HTTP protokolida juda ko'p qoidalar amalga oshirilishi mumkin.

Shuning uchun, agar Vikorist API HTTPdan to'g'ri foydalansa, bu RESTful bo'lish uchun ajoyib imkoniyatdir.

5. Bagator tizimi

Boy tarmoq tizimida vositachilar, masalan, proksi-serverlar bitta rejimli tarmoq interfeysidan foydalangan holda mijoz va server o'rtasida joylashgan bo'lishi mumkin.

Boy tizimning afzalliklaridan biri shundaki, vositachilar qo'shiq maqsadlarida/masalan, keshlash uchun mijoz-server trafigini to'xtata oladi.

Kontseptsiyalaringizni resurslar bilan moslang va ularning har biriga noyob identifikatorlarni tayinlang.

Eng oddiy yo'l chet elliklar uchun ma'lumotlar bazasi xizmatidan foydalanish bo'ladi.

Bunday xizmat uchun ikkita manbani nomlashimiz mumkin;

Koristuvachiv va koristuvachiv (to'plam manbasi).

Ushbu resurslar /users URI va API ning /user/(id) URI orqali aniqlanishi mumkin.

O'zingizning API giperkuchlarini ko'rsating
REST arxitekturasini eslang

RESTful API yaratishning kamroq qiyin jihati Internet va uning asosiy arxitekturasini tushunish qanchalik muhimligiga bog'liq.

Biz ushbu optimallashtirishni tezlashtirishimiz yoki uni e'tiborsiz qoldirishimiz mumkin.

Agar sizda oziq-ovqat bilan bog'liq muammolar bo'lsa, bizdan so'raymiz

Mening postimni o'qiganingiz uchun tashakkur.

Fikr-mulohaza bo'limida norozilik va fikrlar doimo aylanib yuradi.

Salom, aziz o'quvchilar! Ushbu maqolani o'qishni boshlashdan oldin, men uni yozishga undagan ushbu yaratilish va vahiyning maqsadlarini tasvirlab bermoqchiman. (Kompaniyamizning Vinyl loyihalaridan birida REST uslubida server dasturini loyihalash zarurati paydo bo'ldi. Eng boshidanoq biz oddiy vazifa bilan nima qilish kerakligini va shu maqsadda eng kuchli ma'lumotni olish uchun hayron bo'ldik.

Biz arxitekturani rivojlantirish va REST xizmatlarini yagona uslubga keltirish jarayonini boshlaganimizdan so‘ng, men va hamkasblarimiz o‘rtasida u yoki bu jihatni amalga oshirish bo‘yicha qarama-qarshi masalalar va turlicha qarashlar paydo bo‘la boshladi.
Bu erda biz Google-ni ochish va jamoaviy aql yordamiga borish, RESTful dasturlarini ishlab chiqishda oldini olish kerak bo'lgan eng yaxshi amaliyotlarni o'rganish kerakligini angladik.

Bu REST xizmati ekanligini ham tushuning.

Men REST xizmatini "mijoz dasturi va server o'rtasidagi o'zaro ta'sir nuqtasi" deb ta'rifladim.

Java terminologiyasida bu mijoz so'rov yuboradigan servlet.

Muammolar

Qoidalarni tasvirlashni boshlashdan oldin, men REST standart emas degan fikrni aytmoqchiman, chunki amal qilish kerak bo'lgan yagona qoidalar yo'q. Bu shuni anglatadiki, u yoki bu vaziyatni eng yaxshi hal qila oladigan echimlar haqida boshqa foydali narsa yo'q. Har bir muayyan vaziyatda qanday HTTP usullaridan foydalanish va qanday HTTP kodini ishlatish haqida o'qish juda keng tarqalgan.

Xizmat nomi

Boshlash uchun REST xizmati uchun nom tanlashingiz kerak.

Xizmat nomi ostida men so'rovning URI-dagi yo'lingizni hurmat qilaman.

    Masalan,

    http://my-site.by/api/rest/service/name

    .

Nom tanlash uchun REST arxitekturasida qanday "resurslar" borligini tushunishimiz kerak.

  • Resursga taqdim etish
  • REST terminologiyasida u resurs bo'lishi mumkin - HTML hujjati, rasm, ma'lum bir mijoz haqidagi ma'lumot va boshqalar.
  • Resurs haqiqiy ob'ekt bo'lgani uchun uni standart formatda tanib olish oson, masalan, XML yoki JSON.

Keyin server ushbu resursni tanlangan formatdan foydalanib yuborishi mumkin, mijoz esa serverdan tanlangan formatdan foydalangan holda resurs bilan ishlashi mumkin.

    JSON formatida "profil" resursiga yuborilgan misol:

    "id": 1,

    "name" :"Mahesh" ,

    "login" :"manesh"

    REST resursni ko'rsatish uchun ishlatiladigan formatga hech qanday aniq cheklovlar qo'ymaydi va manbani ko'rsatish uchun ishlatiladigan formatni ishlab chiqishda bir nechta qoidalarga rioya qilish kerak:

    Mijoz va server tanlangan formatni tushunish va ishlash uchun javobgardir. Resurs murakkabligidan qat'i nazar, har qanday tanlangan formatda to'liq tavsiflanishi mumkin.

Format resurslar o'rtasida aloqa o'rnatish imkoniyatini bildirishi mumkin.

"So'rov" resursiga yuborish va "profil" resursi bilan bog'lanish misoli:

Teri resursi doimiy identifikator bilan noyob tarzda aniqlanishi mumkin. “Doimiy” identifikator ma’lumotlar almashinuvi soati davomida o‘zgarmasligini va u o‘zgarganda resursga tayinlanishini bildiradi. Agar resursga boshqa identifikator tayinlangan bo'lsa, server mijozni xabardor qilishi kerak, bu esa yangi manzilga yuborilgan sanani ko'rsatadi. Resurs yagona URL orqali aniqlanadi. Bu URL ma'lumotlar elementi uchun asosiy kalit ekanligini anglatadi. Resurs yagona URL orqali aniqlanadi. Totto, masalan, politsiya matima kitobidan yana bir kitob qaradi

/kitoblar/2 , va bu kitobning 41-chi tomoni /kitoblar/2/betlar/41 . Zvidsi y chiqish vazifalari formati. Bundan tashqari, manzil orqasidagi ma'lumotlar qaysi formatda bo'lishi muhim emas - Bu HTML yoki jpeg faylining skanerlangan nusxasi yoki Word hujjati bo'lishi mumkin.

REST xizmatiga nom berishda bir nechta manba nomini tanlash tavsiya etiladi. Ushbu yondashuv mavjud bo'lganlarning nomlarini kengaytirmasdan yangi REST xizmatlarini qo'shish imkonini beradi. Masalan, xizmat

/kitoblar bizga barcha kitoblaringiz ro'yxatini bering, /kitoblar/3 3-kitob va xizmat haqidagi ma'lumotlarga murojaat qiling /kitoblar/3/sahifalar uchinchi kitobning barcha tomonlarini aylantiring.

Resursda aniq harakatlar yaratadigan xizmatlar uchun amallarni kiritishning ikkita usuli mavjud: xizmat nomida yoki uning parametrlarida.

Masalan,

/books/3/toza yoki /books/3?toza . Men birinchi variantni afzal ko'raman, chunki bunday xizmatlar ko'pincha URL manziliga parametrlarni o'tkazishni qo'llab-quvvatlamaydigan POST usullaridan foydalanadi, bu esa xizmatni, menimcha, unchalik o'qilmaydi. Xizmat nomidagi harakat turiga asoslanib, biz xizmatimizni ko'proq kengaytiramiz, iloji boricha HTTP usuli turiga bog'liq. Shuningdek, chap tomonda tegni o'z ichiga olgan va ombor xizmatining biznesini tavsiflovchi nomlardan foydalanish tavsiya etilmaydi (chunki java usullarini nomlashda ishlash tavsiya etiladi). Masalan, zamíst/getAllCars pul ishlashning eng yaxshi usuli/avtomobillar).
.

Usulni bir so'z bilan ta'riflab bo'lmaydiganligi sababli, ajratuvchilarning yagona uslubini o'rnatish kerak, men eng mashhur yondashuv bo'lgan g'alabani "-" deb atayman. Ular amalga oshirilishi kerak bo'lgan HTTP usullari bilan bog'liq bo'lgan REST-Patterns deb ataladi.

Uyga yaqinroq, turli modellar POST va PUT ga turli yo'llar bilan qarashadi.

  • Biroq, yaratish, almashtirish yoki yangilash uchun PUT topshiriqlari POST uchun tayinlanmagan. Shuning uchun POST va PUT kodlarini almashtirish mumkin.
  • Ko'pgina hollarda, POST yaratish uchun, PUT esa tahrirlash uchun ishlatiladi va men nima uchun bir oz keyinroq tushuntiraman. Men resurslar bilan o'zaro ta'sir qilishning turli usullariga bir qator misollar keltiraman.
  • OLISH /kitoblar/- Barcha kitoblar ro'yxatini tanlaydi.
    Kechirimga chaqiring, tamom. Boshqa ma'lumotlarsiz faqat identifikator va ob'ekt nomi maydonlarini joylashtiring.
  • OLISH /kitoblar/(id)- Kitob haqida qo'shimcha ma'lumotlarni olib tashlash.
  • POST /kitoblar/ agar (!isset($HTTP_RAW_POST_DATA))

- Men yangi kitob yaratyapman.

Ma'lumotlar eslatmada uzatiladi.

PUT /kitoblar/(id)

- kitob haqidagi ma'lumotlarni identifikator (id) bilan o'zgartiradi, ehtimol ularni almashtiradi.

Ma'lumotlar ham so'rov bo'yicha uzatiladi.

Variantlar / kitoblar

- Belgilangan resurs uchun qo'llab-quvvatlanadigan operatsiyalar ro'yxatini tanlaydi (deyarli tasdiqlanmagan)

OʻCHIRISH /kitoblar/(id)

  • Xavfsizlik va ishonchsizlik
  • 201 - OK - muvaffaqiyatli qidiruv natijasida yangi resurs yaratildi.
  • 204 - OK - resurs muvaffaqiyatli sotib olindi.
  • 304 - O'zgartirilmagan - mijoz keshdan ma'lumotlarga kirishi mumkin.
  • 400 - noto'g'ri so'rov - so'rov noto'g'ri yoki so'rovni qayta ishlash mumkin emas.
  • 401 - Ruxsatsiz - so'rov mijozning autentifikatsiyasini ko'rsatadi.
  • 403 - Taqiqlangan - server ruxsat so'radi, lekin uni qayta ishlashga ruxsat berilmagan va kirish bloklangan.
  • 404 - topilmadi - manba topilmadi.
  • 500 - Ichki server xatosi - API ishlab chiquvchilari bunday xatolardan qochishda aybdor.

Ushbu imtiyozlar global ushlash blokida qo'lga olinishi, garovga qo'yilishi yoki filialdan boshqa tarzda qaytarilishi mumkin.

Biz vikorizatsiya qiladigan kodlar to'plami qanchalik katta bo'lsa, biz yaratadigan API shunchalik aqlli bo'ladi. Ammo shuni yodda tutingki, brauzerlar ushbu kodlarni boshqacha tarzda qayta ishlaydilar.

Misol uchun, 307 javob kodini rad etadigan ba'zi brauzerlar darhol qayta yo'naltirishni ko'rsatadi, ba'zilari esa bu vaziyatni hal qilish va harakatni saqlashga imkon beradi.

  • Avvalo, mijoz tomonidan qanday ishlashini tushunish muhimdir! Sarlavhalar
  • Kontent turi- so'ralgan format;

Qabul qiling

- Eshittirish formatlari ro'yxati.

Resurslarni qidirish parametrlari

Har qanday ma'lumotni qayta ishlashga mas'ul bo'lgan xizmatlarni tanlashni soddalashtirish, shuningdek ularni yanada samarali qilish uchun saralash, filtrlash, maydonlarni tanlash va sahifalash uchun parametrlarni kiritish parametrlarini tanlash kerak.

Filtrlash

Filtrlash uchun teri maydoni uchun noyob parametr yarating.

Bu so'rovni qayta ishlash vaqtini optimallashtiradigan, chiqarilgan ma'lumotlar miqdorini cheklash imkonini beradi.

Masalan, barcha qizil kitoblarni ko'rsatish uchun siz quyidagilarni yozishingiz kerak:

OLISH /books?color=red

Sortuvannya

Saralash filtrlash bilan bir xil tarzda amalga oshiriladi.

Misol uchun, nashr etilgan sana bo'yicha va nomi bo'yicha o'sishi bo'yicha saralangan barcha kitoblarni ko'rsatish uchun siz quyidagi yozuvni kiritishingiz kerak:

GET /books?sort=-yil,+ism

Havola: Sahifalar
Ilova sahifasida paydo bo'ladigan resurslar ro'yxatiga kirish imkoniyatini qo'llab-quvvatlash uchun REST API sahifalash funksiyasini taqdim etadi.
U bizga ma'lum bo'lgan SQL parametrlari yordamida amalga oshiriladi: chegara va ofset.
Masalan:

GET /books?offset=10&limit=5

Qo'lda xizmat ko'rsatish uchun trafikni tejash uchun siz ma'lumotlarni ko'rsatish formatini sozlash qobiliyatini qo'shishingiz mumkin.

Resurs uchun REST xizmatini yangilashi mumkin bo'lgan maydonlarni tanlash mumkin.

Misol uchun, agar siz ikkala kitob identifikatorini va ularning ranglarini olib tashlashingiz kerak bo'lsa, keyingi yozuvni olib tashlashingiz kerak:

GET /books?fields=id,color

Men seni qutqaraman
RESTful xizmatlarini almashishning sabablaridan biri shundaki, ular so'rovlarni olib tashlash uchun mijozning vaqtini tejashlari kerak.
Pulni tejamaydigan xizmatga misol: 1-so'rov:

2-so'rov:

http://MyService/Persons/2 HTTP/1.1 OLING
RESTful xizmatlarini almashishning sabablaridan biri shundaki, ular so'rovlarni olib tashlash uchun mijozning vaqtini tejashlari kerak. Ushbu ichimliklar terisi boshqasidan qat'iy nazar teri muammolarini rivojlanishi mumkin.
Pulni tejamaydigan xizmatga misol: Pulni tejaydigan xizmatga misol:

http://MyService/Persons/1 HTTP/1.1 OLING

http://MyService/NextPerson HTTP/1.1 OLING

  • Boshqa so'rovni qayta ishlash uchun server mijoz so'ragan qolgan shaxsning identifikatorini "eslab qolishi" kerak.
  • Tobto.
  • Server joriy oqimini unutishi uchun javobgardir, aks holda boshqa oqimni qayta ishlash mumkin emas.

Xizmatni loyihalashda, past ustuvorlikni qoldirib, energiyani tejashga hojat yo'q.

  • Xarajatlarni tejamaydigan xizmatning afzalliklari:

xizmat bir-biridan mustaqil ravishda ichimliklar so'raydi;

xizmat arxitekturasi xayrlashadi;
HTTP protokoli yordamida xizmatlarni amalga oshirish uchun qo'shimcha harakatlar talab etilmaydi, bu ham ma'lumotlarni saqlamaydi.

  • Pulni tejamaydigan xizmat yetarli emas: Mijozning o'zi kontekstga mos keladigan xizmatni xizmatga o'tkazish uchun javobgardir.
  • Versiya
  • REST API versiyasini qo'llab-quvvatlash yaxshi amaliyotdir. Bu sizga APIni o'zgartirishlar kiritish uchun foydalanayotgan mijozlarni majburlamasdan osongina kengaytirish imkonini beradi.
  • Versiyalashni amalga oshirish uchun bir qator yondashuvlar: Z vikoristannym Sarlavhani qabul qiling.

Bunday holda, API versiyasi Qabul qilishda ko'rsatilgan -

Qabul qiling: matn/v2+json

Z vikoristannyam URI.

Swagger - bu REST xizmatlarini hujjatlashtirish imkonini beruvchi texnologiya.

Swagger yuzsiz dasturlash va ramkalarni rag'batlantiradi.

Plus Swagger hujjatlarni ko'rib chiqish uchun foydalanuvchi interfeysini taqdim etadi.

Narx uchun Swagger haqidagi hisobot ma'lumotlarini ko'rishingiz mumkin.

Arxiv

Keshuvannya

  • Shuningdek, ma'lumotlar bazasiga so'rovlarni tezlashtirish va REST xizmatlarimiz uchun ma'lumotlar tezligini oshirish uchun keshlash mexanizmini o'rnatish tavsiya etiladi.
  • Keshlash ham server darajasida, ham vaziyatga qarab sozlanishi mumkin.
  • Keshuvannyam quyidagi HTTP sarlavhalaridan foydalanishi mumkin:
  • Sana - resurs yaratilgan sana va soat.

© 2024 androidas.ru - Android haqida hamma narsa