PUT va PATCH o'rtasidagi farq nimada?

JuniorHTTP #http #rest

Savol

PUT va PATCH metodlari bir-biridan nimasi bilan farq qiladi?

Qisqa javob

PUT resursni butunlay almashtiradi — klient obyektning to'liq ko'rinishini yuborishi kerak. PATCH esa faqat yuborilgan maydonlarni yangilaydi, qolganlari o'zgarishsiz qoladi.

Batafsil javob

  • PUT: server to'liq obyektni kutadi. Agar biror maydon yuborilmasa, u o'chirilishi yoki standart qiymatga qaytarilishi mumkin — chunki server so'rovni "resursning butunlay yangi holati" deb talqin qiladi.
  • PATCH: server qisman o'zgartirish qo'llaydi — o'zgargan maydonlar to'plami yoki ko'rsatmalar. Resursning qolgan qismiga tegilmaydi.

Idempotentlik bo'yicha:

  • PUT idempotent: bir xil so'rovni qayta yuborish bir xil natija beradi.
  • PATCH odatda idempotent bo'lishi shart emas (masalan, so'rov tanasi "hisoblagichni 1 taga oshirish" ko'rsatmasi bo'lsa, qayta chaqirish natijani o'zgartiradi).

Misol

// PUT — foydalanuvchining BARCHA maydonlarini yuborish kerak,
// aks holda yuborilmagan maydonlar o'chirilib ketishi mumkin
await fetch('/api/users/1', {
  method: 'PUT',
  body: JSON.stringify({ name: 'Alice', age: 30, email: 'a@mail.com' })
})

// PATCH — faqat o'zgarayotgan qismini yuborish yetarli
await fetch('/api/users/1', {
  method: 'PATCH',
  body: JSON.stringify({ age: 31 })
})

Qo'shimcha savollar

  • PATCH idempotent bo'lishi mumkinmi? Qanday holatda?
  • email maydonisiz PUT yuborilsa nima bo'ladi — turli API'lar bunga qanday munosabatda bo'ladi?
  • Qat'iy REST/JSON API'larda PATCH uchun qanday tana formati ko'pincha ishlatiladi (masalan, JSON Patch, RFC 6902)?