Apa perbedaan antara PUT, POST dan PATCH? [Tutup]

280

Apa perbedaan antara metode PUT, POST dan PATCH dalam protokol HTTP?

selva kumar
sumber
4
kemungkinan duplikat PUT vs POST di REST
Nowhere man
12
Menggunakan apa pun selain GET / POST adalah gila di API web modern. Terlalu banyak yang melakukannya. URI yang diidentifikasi di sebagian besar aplikasi modern BUKAN sumber daya untuk diganti, diperbarui, dll. Itu bukan dokumen. Mereka PROSEDUR dipanggil. URI itu sendiri jarang mengidentifikasi sumber daya yang sebenarnya, selain metode yang dipanggil. Oleh karena itu, gunakan GET untuk permintaan querystring dan POST ketika Anda perlu memposting data JSON atau file di tubuh permintaan. IMO, hal lain sedang mencoba untuk mengusir konsep usang yang melibatkan URI dan operasi pada dokumen HTML statis ke dalam arsitektur baru yang tidak terlihat seperti itu.
Triynko
1
Semua jawaban bagus. Saya hanya ingin membagikan jawaban saya tentang perbedaan dan kapan Anda harus menggunakan masing-masing.
Latih
@Triynko Dan prosedur yang Anda maksud melibatkan pembuatan , penghapusan , dan modifikasi sumber daya. Tidak ada cara yang lebih baik untuk menyampaikan ide-ide seperti itu selain TETAP. Kenapa tidak?
Константин Ван

Jawaban:

201

Perbedaan antara PUT, POST, GET, DELETE dan PATCH IN HTTP Verbs:

Kata kerja HTTP yang paling umum digunakan POST, GET, PUT, DELETE mirip dengan operasi CRUD (Buat, Baca, Perbarui dan Hapus) dalam database. Kami menentukan kata kerja HTTP ini dalam huruf kapital . Jadi, di bawah ini adalah perbandingan di antara mereka.

  1. buat - POST
  2. baca - DAPATKAN
  3. perbarui - PUT
  4. hapus - HAPUS

PATCH: Menyerahkan sebagian modifikasi ke sumber daya. Jika Anda hanya perlu memperbarui satu bidang untuk sumber daya, Anda mungkin ingin menggunakan metode PATCH.

Catatan:
Karena POST, PUT, DELETE memodifikasi konten, tes dengan Fiddler untuk url di bawah ini hanya meniru pembaruan. Itu tidak menghapus atau memodifikasi sebenarnya. Kami hanya dapat melihat kode status untuk memeriksa apakah penyisipan, pembaruan, penghapusan terjadi.

URL: http://jsonplaceholder.typicode.com/posts/

1) DAPATKAN:

GET adalah tipe paling sederhana dari metode permintaan HTTP; yang digunakan browser setiap kali Anda mengklik tautan atau mengetik URL ke bilah alamat. Ini menginstruksikan server untuk mengirimkan data yang diidentifikasi oleh URL ke klien. Data tidak boleh dimodifikasi di sisi server sebagai hasil dari permintaan GET. Dalam hal ini, permintaan GET bersifat read-only.

Memeriksa dengan Fiddler atau PostMan: Kita dapat menggunakan Fiddler untuk memeriksa respons. Buka Fiddler dan pilih tab Compose. Tentukan kata kerja dan url seperti yang ditunjukkan di bawah ini dan klik Jalankan untuk memeriksa respons.

Verb: DAPATKAN

url: http://jsonplaceholder.typicode.com/posts/

Respons: Anda akan mendapatkan respons sebagai:

"userId": 1, "id": 1, "title": "sunt aut ...", "body": "quia et suscipit ..."

Di jalur "bahagia" (atau non-kesalahan), GET mengembalikan representasi dalam XML atau JSON dan kode respons HTTP 200 (OK). Dalam kasus kesalahan, paling sering mengembalikan 404 (TIDAK DITEMUKAN) atau 400 (PERMINTAAN BURUK).

2) POST:

Kata kerja POST sebagian besar digunakan untuk membuat sumber daya baru. Secara khusus, ini digunakan untuk membuat sumber daya bawahan. Artinya, tunduk pada beberapa sumber daya lain (misalnya orang tua).

Pada pembuatan yang berhasil, kembalikan status HTTP 201, kembalikan header Lokasi dengan tautan ke sumber daya yang baru dibuat dengan status HTTP 201.

Memeriksa dengan Fiddler atau PostMan: Kita dapat menggunakan Fiddler untuk memeriksa respons. Buka Fiddler dan pilih tab Compose. Tentukan kata kerja dan url seperti yang ditunjukkan di bawah ini dan klik Jalankan untuk memeriksa respons.

Kata kerja: POST

url: http://jsonplaceholder.typicode.com/posts/

Badan Permintaan:

data: {judul: 'foo', badan: 'bar', userId: 1000, Id: 1000}

Respons: Anda akan menerima kode respons sebagai 201.

Jika kita ingin memeriksa catatan yang dimasukkan dengan Id = 1000, ubah kata kerjanya untuk Dapatkan dan gunakan url yang sama dan klik Jalankan.

Seperti yang dikatakan sebelumnya, url di atas hanya memungkinkan membaca (GET), kami tidak dapat membaca data yang diperbarui secara nyata.

3) PUT:

PUT paling sering digunakan untuk kemampuan pembaruan , PUT-ing ke URI sumber daya yang dikenal dengan badan permintaan yang berisi representasi yang baru diperbarui dari sumber daya asli.

Memeriksa dengan Fiddler atau PostMan: Kita dapat menggunakan Fiddler untuk memeriksa respons. Buka Fiddler dan pilih tab Compose. Tentukan kata kerja dan url seperti yang ditunjukkan di bawah ini dan klik Jalankan untuk memeriksa respons.

Kata kerja: PUT

url: http://jsonplaceholder.typicode.com/posts/1

Badan Permintaan:

data: {judul: 'foo', badan: 'bar', userId: 1, Id: 1}

Respons: Saat pembaruan berhasil, ia mengembalikan 200 (atau 204 jika tidak mengembalikan konten apa pun di tubuh) dari PUT.

4) HAPUS:

DELETE cukup mudah dimengerti. Ini digunakan untuk menghapus sumber daya yang diidentifikasi oleh URI.

Pada penghapusan sukses, kembalikan status HTTP 200 (OK) bersama dengan badan respons, mungkin representasi dari item yang dihapus (sering menuntut bandwidth terlalu banyak), atau respons terbungkus (lihat Nilai Pengembalian di bawah). Entah itu atau mengembalikan status HTTP 204 (TANPA KONTEN) tanpa badan tanggapan. Dengan kata lain, status 204 tanpa badan, atau respons gaya JSEND dan status HTTP 200 adalah respons yang disarankan.

Memeriksa dengan Fiddler atau PostMan: Kita dapat menggunakan Fiddler untuk memeriksa respons. Buka Fiddler dan pilih tab Compose. Tentukan kata kerja dan url seperti yang ditunjukkan di bawah ini dan klik Jalankan untuk memeriksa respons.

Verb: DELETE

url: http://jsonplaceholder.typicode.com/posts/1

Respons: Saat penghapusan berhasil, ia mengembalikan status HTTP 200 (OK) bersama dengan badan respons.

Contoh antara PUT dan PATCH

TARUH

Jika saya harus mengubah nama depan saya maka kirim permintaan PUT untuk Pembaruan:

{"first": "Nazmul", "last": "hasan"} Jadi, di sini untuk memperbarui nama depan kita perlu mengirim semua parameter data lagi.

PATCH:

Permintaan tambalan mengatakan bahwa kami hanya akan mengirim data yang perlu kami modifikasi tanpa mengubah atau mempengaruhi bagian data lainnya. Mis: jika kita hanya perlu memperbarui nama depan, kita hanya memberikan nama depan saja.

Silakan merujuk tautan di bawah ini untuk informasi lebih lanjut:

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

Apa perbedaan utama antara permintaan PATCH dan PUT?

http://www.restapitutorial.com/lessons/httpmethods.html

Krishna
sumber
62
PUT tidak diperbarui. PUT adalah membuat atau mengganti entitas di URI yang diberikan. Per spec HTTP, PUT idempoten. Ya, itu dapat digunakan untuk memperbarui, tetapi berpikir hanya karena pembaruan itu tidak benar.
Maladon
2
Saya setuju PUT tidak diperbarui, ini dapat dipetakan dengan mengganti, karena ketika Anda mengirim PUT, itu menimpa sumber daya yang ada. Tetapi jika kami mengirim PATCH, itu hanya akan menggantikan entri yang ditentukan.
Atul Chavan
1
Karena PUT juga dapat digunakan untuk membuat, saya tidak yakin bagaimana jawaban Anda menunjukkan mana yang harus saya gunakan?
Rob P.
1
Jawaban ini jauh lebih baik, tetapi tidak dibandingkan dengan PATCH: stackoverflow.com/a/630475/2391795
Vadorequest
11

Definisi di bawah ini dari contoh dunia nyata.

Gambaran Umum Contoh
Untuk setiap data klien, kami menyimpan pengenal untuk menemukan data klien itu dan kami akan mengirimkan kembali pengenal itu ke klien itu untuk referensi.

  1. POS

    • Jika Klien mengirim data tanpa pengidentifikasi menggunakan metode POST maka kami akan menyimpannya dan menetapkan pengenal baru.
    • Jika Klien kembali mengirim data yang sama tanpa pengidentifikasi menggunakan metode POST, maka kami akan menyimpannya dan menetapkan pengenal baru.
    • Catatan : Duplikasi diperbolehkan di sini
  2. TARUH

    • Jika Klien Mengirim data dengan pengenal, maka kami akan memeriksa apakah pengenal itu ada. Jika pengenal ada, kami akan memperbarui data lain. Kami akan membuatnya dan menetapkan pengenal baru.
  3. PATCH

    • Jika Klien Mengirim data dengan pengenal, maka kami akan memeriksa apakah pengenal itu ada. Jika pengenal ada, kami akan memperbarui data lain, kami akan melemparkan pengecualian.

Catatan: Pada Metode Put , Kami tidak melempar pengecualian jika pengidentifikasi tidak ditemukan. Namun dalam metode Patch , kami melemparkan pengecualian jika pengidentifikasi tidak ditemukan.

Beri tahu saya jika Anda memiliki pertanyaan di atas.

Yokesh Waran
sumber
8

Jenis Permintaan

  • buat - POST
  • baca - DAPATKAN
  • buat atau perbarui - PUT
  • hapus - HAPUS
  • perbarui - PATCH

GET / PUT idempoten. PATCH terkadang idempoten

Apa itu idempoten - Artinya, jika kami memunculkan kueri beberapa kali, ia tidak akan mempengaruhi hasilnya. (Keluaran yang sama. Misalkan seekor sapi hamil dan jika kami mengembangbiakkannya lagi, maka ia tidak bisa hamil berkali-kali)

get : -

dapatkan sederhana. Dapatkan data dari server dan perlihatkan kepada pengguna

{
id:1
name:parth
email:x@x.com
}

post : -

buat sumber daya baru di Database. Itu berarti menambahkan data baru. Ini bukan idempoten.

put : -

Buat sumber daya baru jika tidak tambahkan ke yang sudah ada. Idempoten karena akan memperbarui sumber daya yang sama setiap kali dan output akan sama. ex. - data awal

{
id:1
name:parth
email:x@x.com
}
{
id:1
email:ppp@ppp.com
}

patch

jadi sekarang datang permintaan patch PATCH kadang-kadang idempoten

id:1
name:parth
email:[email protected]
}

nama tambalan: w

{
id:1
name:w
email:x@x.com
}
Metode HTTP
DAPATKAN ya
POST no
TETAPI ya
PATCH no *
OPSI ya
KEPALA ya
HAPUS ya

Sumber: Idempoten - Apa itu Idempotensi?

Parth Patel
sumber
Apa arti "terkadang" idempoten sebenarnya? Apa yang menentukan idempotensi?
Polv
7

di sini adalah deskripsi sederhana dari semua:

  • POST selalu untuk membuat sumber daya (tidak masalah jika itu digandakan)
  • PUT adalah untuk memeriksa apakah sumber daya ada kemudian memperbarui, kalau tidak buat sumber daya baru
  • PATCH selalu untuk memperbarui sumber daya
a_m_dev
sumber
5

Perbedaan Utama Antara Permintaan PUT dan PATCH :

Misalkan kita memiliki sumber daya yang memegang nama depan dan nama belakang seseorang.

Jika kami ingin mengubah nama depan maka kami mengirim permintaan pembaruan

{ "first": "Michael", "last": "Angelo" }

Di sini, meskipun kami hanya mengubah nama depan, dengan permintaan PUT kami harus mengirim parameter pertama dan terakhir.
Dengan kata lain, adalah wajib untuk mengirim semua nilai lagi, muatan penuh.

Namun, ketika kami mengirim permintaan PATCH, kami hanya mengirim data yang ingin kami perbarui. Dengan kata lain, kami hanya mengirim nama depan untuk memperbarui, tidak perlu mengirim nama belakang.

pemula
sumber
2

Cukup logis perbedaan antara PUT & PATCH wrt mengirim data penuh & parsial untuk mengganti / memperbarui masing-masing. Namun, hanya beberapa poin seperti di bawah ini

  1. Terkadang POST dianggap sebagai pembaruan untuk PUT untuk pembuatan
  2. Apakah HTTP mengamanatkan / memeriksa pengiriman data lengkap vs sebagian di PATCH? Jika tidak, PATCH mungkin sama dengan pembaruan seperti pada PUT / POST
agishal manish
sumber
2

Pikirkan seperti ini ...

POST - buat

PUT - ganti

PATCH - perbarui

DAPATKAN - baca

HAPUS - hapus

Kwame Opare Asiedu
sumber
2
Saya mungkin akan menambahkan perbedaan ini : " TETAPI jika klien menentukan alamat sumber daya yang dihasilkan, POST jika server melakukannya. "
ruffin
1

Penjelasan Sederhana:

POST - Buat catatan BARU

PUT - Jika catatan ada, perbarui yang lain, buat catatan baru

PATCH - perbarui

DAPATKAN - baca

HAPUS - hapus

Sahibzada Abdul Hadi
sumber
Bagaimana ini berbeda dari jawaban Kwame yang diposting sekitar dua minggu sebelum jawaban Anda?
ruffin