Yamoq fe'l - Patch verb

Hisoblashda PATCH usuli a so'rov tomonidan qo'llab-quvvatlanadigan usul Gipermatn uzatish protokoli Mavjud resursga qisman o'zgartirish kiritish uchun (HTTP) protokoli.[1] PATCH usuli HTTP yordamida so'ralgan manbaga qo'llaniladigan o'zgarishlar ro'yxatini o'z ichiga olgan ob'ektni taqdim etadi Resurs identifikatorining yagona shakli (URI).[1] O'zgarishlar ro'yxati PATCH hujjati shaklida taqdim etiladi.[1] Agar so'ralgan manba mavjud bo'lmasa, u holda server PATCH hujjatiga qarab resurs yaratishi mumkin media turi va ruxsatnomalar.[1] PATCH hujjatida tasvirlangan o'zgarishlar semantik jihatdan aniq belgilangan bo'lishi kerak, ammo boshqacha bo'lishi mumkin media turi yamalgan manbadan ko'ra.[2] Kabi ramkalar XML, JSON PATCH hujjatidagi o'zgarishlarni tavsiflashda foydalanish mumkin.

PATCH tarixi

Da belgilangan semantikaga muvofiq HTTP protokoli, OLING, QO'YING va POST usullar manbaning to'liq ko'rinishini ishlatishi kerak. Resurslarni yaratish yoki almashtirish uchun ishlatilishi mumkin bo'lgan PUT usuli idempotent va faqat to'liq yangilanishlar uchun ishlatilishi mumkin. An'anaviy ravishda ishlatiladigan tahrirlash shakllari Ruby on Rails dastur ota-onalarga qisman yangilanishlarni qo'llash orqali yangi manbalarni yaratishi kerak. Ushbu talab tufayli PATCH usuli HTTP protokoliga 2010 yilda qo'shilgan.[3][4]

PUT vs PATCH va POST

HTTP uchun ma'lumotlar aloqasining asosidir Butunjahon tarmog'i. Bu so'rov-javob foydalanuvchilarga server bilan ishlashga yordam beradigan protokol CRUD operatsiyalar. HTTP kabi bir qator so'rov usullarini qo'llab-quvvatlaydi QO'YING, POST va PATCH resurslarni yaratish yoki yangilash uchun.[5]

PUT va PATCH usullarining asosiy farqi shundaki, PUT usuli so'rovdan foydalanadi URI PATCH usuli resursni o'zgartirish bo'yicha ko'rsatmalar to'plamini taqdim etgan holda, manbaning asl nusxasini o'rnini bosadigan so'ralgan manbaning o'zgartirilgan versiyasini etkazib berish. Agar PATCH hujjati tomonidan yuborilgan resursning yangi versiyasi hajmidan kattaroq bo'lsa QO'YING usuli keyin QO'YING usuli afzal.[1]

POST usuli resursga qisman yangilanishlarni yuborish uchun ishlatilishi mumkin. POST va PATCH usullarining asosiy farqi shundaki, POST usuli faqat dasturlarni qo'llab-quvvatlash uchun yozilganda yoki dasturlar uning semantikasini qo'llab-quvvatlasa, PATCH usuli umumiy usulda ishlatilishi mumkin va dasturni qo'llab-quvvatlashni talab qilmaydi. Agar PATCH usulidan foydalanish natijasi ma'lum bo'lmasa, u holda POST usuli afzaldir.[1][6]

Resurslarni yamoqlash

PATCH usuli atom.[1] Yoki PATCH usuli bilan belgilangan barcha o'zgarishlar qo'llaniladi yoki server tomonidan hech qanday o'zgarishlar qo'llanilmaydi.[1] Yamoq muvaffaqiyatli qo'llanilganligini tekshirishning ko'plab usullari mavjud. Masalan, "diff" yordam dasturi ular orasidagi farqlarni topish uchun eski va yangi versiyalarga qo'llanilishi mumkin.[1]

Keshlangan PATCH javobi eskirgan hisoblanadi. U faqat PATCH so'rovidan keyin kelishi mumkin bo'lgan GET va HEAD so'rovlari uchun ishlatilishi mumkin.[1]

PATCH hujjatidagi sub'ekt sarlavhalari faqat PATCH hujjatiga taalluqlidir va so'ralgan manbada qo'llanilishi mumkin emas.[1]

PATCH hujjati uchun standart format mavjud emas va u har xil turdagi manbalar uchun farq qiladi. Server qabul qilingan PATCH hujjati so'ralgan manbaga mos kelishini tekshirishi kerak.[1]

A JSON Patch hujjat o'xshash bo'lar edi

{ "op": "qo'shish", "o'zgaruvchan": "hisoblash", "qiymat": 1 }

"op" resursda bajarilgan operatsiyani anglatadi. "hisoblash" o'zgartirilayotgan resursni anglatadi. "qiymat" mavjud resursga qo'shiladigan miqdorni anglatadi.[7] PATCH hujjatidagi o'zgarishlarni qo'llashdan oldin, server olingan PATCH hujjati so'ralgan manbaga mos kelishini tekshirishi kerak. Agar PATCH so'rovi bajarilsa, u a ni qaytaradi 204 javob.[8]

A XML PATCH hujjati o'xshaydi

 sel ="doc / user [@ email = 'xyz @ abc.com']" turi ="@adress">ABC yo'li</add>

elementi 'elektron pochta' atributidan foydalangan holda joylashgan. elementiga qo'shiladi.[9]

Misol

Oddiy PATCH so'rovi misoli

[o'zgarishlar] bu example.txt resursida bajarilishi kerak bo'lgan barcha o'zgarishlarni o'z ichiga olgan patch hujjati

Mavjud matnli faylga muvaffaqiyatli PATCH javob:

  HTTP / 1.1 204 Tarkib yo'q - Joylashuv: /example.txt ETag: "c0b42b66f"

Javob 204 so'rov muvaffaqiyatli bajarilganligini anglatadi.[10]

PUT va PATCH o'rtasidagi savdo-sotiq

Dan foydalanish QO'YING usuli PATCH usuli bilan taqqoslaganda ko'proq tarmoqli kengligini iste'mol qiladi, agar resursga bir nechta o'zgartirishlar kiritilishi kerak bo'lsa.[iqtibos kerak ] Ammo PATCH usuli qo'llanilganda, odatda serverdan resurslarni olish, asl va yangi fayllarni taqqoslash, diff faylini yaratish va yuborish kiradi. Server tomonida server diff faylini o'qishi va o'zgartirishlarni kiritishi kerak. Bu PUT usuli bilan taqqoslaganda juda ko'p xarajatlarni o'z ichiga oladi.[11]Boshqa tomondan, QO'YING usuli talab qiladi OLING oldin bajarilishi kerak QO'YING va resurs o'rtasida o'zgartirilmasligini ta'minlash qiyin OLING va QO'YING so'rovlar.

E'tibor bering

PATCH usuli ma'nosida "xavfsiz" emas RFC 2616: u resurslarni o'zgartirishi mumkin, faqat unda aytib o'tilganlar bilan chegaralanib qolmaydi URI.[1]

PATCH usuli bunday emas idempotent. Buni qilish mumkin idempotent shartli so'rov yordamida.[1] Mijoz resursga shartli so'rov yuborganida, so'rov faqatgina mijoz ushbu resursga oxirgi marta kirganidan beri resurs yangilanmagan bo'lsa, muvaffaqiyatli bo'ladi. Bu, shuningdek, resurslarning buzilishini oldini olishga yordam beradi, chunki ba'zi bir yangilanishlar faqat ma'lum bir tayanch nuqtadan boshlab amalga oshirilishi mumkin.[1]

Ishlashda xatolik yuz berdi

Agar quyidagi xatolardan biri yuzaga kelsa, PATCH so'rovi bajarilmasligi mumkin:

Noto'g'ri tuzatilgan yamoq hujjati

Server PATCH hujjati talab qilinadigan darajada formatlanmagan bo'lsa, 400 (Noto'g'ri so'rov) javobni qaytaradi.[1]

Qo'llab-quvvatlanmaydigan patch hujjati

Server 415 raqamini qaytaradi (Qo'llab-quvvatlanmaydi) Media turi ) bilan javob Qabul qilish-Patch javob sarlavhasi o'z ichiga olgan qo'llab-quvvatlanadigan ommaviy axborot vositalari turlari mijoz qo'llab-quvvatlanmaydigan patch hujjatini yuborganida. Bu mijozga mijoz tomonidan yuborilgan PATCH hujjati so'ralgan manbaga tatbiq etilmasligi to'g'risida xabar beradi.[1]

Qayta ishlashga yaroqsiz so'rov

Server PATCH hujjatini tushunganida, lekin so'ralgan manbani o'zgartira olmaganida yoki manba bekor qilinishiga olib keladigan yoki boshqa biron bir xato holatiga olib keladigan bo'lsa, server 422 (Qayta ishlanmaydigan shaxs) javobini qaytaradi.[1]

Resurs topilmadi

PATCH hujjati mavjud bo'lmagan manbaga tatbiq etilmaganda, server 404 (Topilmadi) javobini qaytaradi.[1]

Ziddiyatli holat

Server resursning hozirgi holati uchun yamoqni ishlata olmaganida, server 409 (to'qnashuv) javobini qaytaradi.[1]

Qarama-qarshi modifikatsiya

Dan foydalanib, mijoz tomonidan taqdim etilgan old shart sharoitida server 412 (Old shart bajarilmadi) javobini qaytaradi If-Match yoki If-Unmodified-beri sarlavhasi ishlamayapti. Agar oldindan shart berilmagan bo'lsa va qarama-qarshi modifikatsiya bo'lsa, u holda server 409 (ziddiyat) javobini qaytaradi.[1]

Bir vaqtning o'zida modifikatsiya qilish

Agar ma'lum bir manbaga PATCH so'rovlari ma'lum tartibda qo'llanilishi kerak bo'lsa va server bir vaqtning o'zida PATCH so'rovlarini bajara olmasa, server 409 (to'qnashuv) javobini qaytaradi.[1]

Xavfsizlik masalalari

PATCH so'rovi shartli so'rovlar kabi mexanizmlardan foydalanishi kerak Etaglar va If-Match tuzatish paytida ma'lumotlar buzilmasligini ta'minlash uchun sarlavhani so'rang.[1] PATCH so'rovi bajarilmaganda yoki kanal ishlamay qolganda yoki vaqt tugashi bilan mijoz mijozdan foydalanishi mumkin OLING resurs holatini tekshirishni so'rash.[1] Server zararli mijozlar ortiqcha server resurslarini iste'mol qilish uchun PATCH usulidan foydalanmasligini ta'minlashi kerak.[1]

Adabiyotlar

  1. ^ a b v d e f g h men j k l m n o p q r s t siz v w x y "HTTP uchun PATCH usuli". Olingan 2015-09-12.
  2. ^ "Ahmoq singari yamoq qilma". Ahmoq singari yamoq qilmang. Olingan 16 sentyabr 2015.
  3. ^ RFC 5789
  4. ^ "PATCH tarixi". weblog.rubyonrails.org. Olingan 25 sentyabr 2015.
  5. ^ "Gipermatnli uzatish protokoli - HTTP / 1.1". Olingan 13 sentyabr 2015.
  6. ^ "Nega PATCH sizning HTTP API uchun yaxshi". Nima uchun PATCH sizning HTTP API uchun yaxshi. Olingan 16 sentyabr 2015.
  7. ^ "JSON Patch - qoralama-ietf-appsawg-json-patch-08". Olingan 13 sentyabr 2015.
  8. ^ "PATCH". MDN veb-hujjatlari. Olingan 2018-10-11.
  9. ^ "XML RFC". tools.ietf.org. Olingan 25 sentyabr 2015.
  10. ^ "PATCH". MDN veb-hujjatlari. Olingan 2018-10-12.
  11. ^ Darren. "REST API Best Practices 3: Qisman yangilanishlar - PATCH va PUT". www.blogger.com. Olingan 13 sentyabr 2015.