PUT menempatkan file atau sumber daya pada URI tertentu, dan tepat di URI itu. Jika sudah ada file atau sumber daya di URI itu, PUT menggantikan file atau sumber daya itu. Jika tidak ada file atau sumber daya di sana, PUT membuat satu. PUT idempoten , tetapi respons PUT yang paradoks tidak dapat di-cache.
POST mengirimkan data ke URI tertentu dan mengharapkan sumber daya di URI itu untuk menangani permintaan tersebut. Server web pada titik ini dapat menentukan apa yang harus dilakukan dengan data dalam konteks sumber daya yang ditentukan. Metode POST tidak idempoten , namun respons POST dapat disimpan dalam cache selama server menetapkan header Kontrol-Cache yang sesuai dan Kedaluwarsa.
HTTP RFC resmi menetapkan POST sebagai:
Penjelasan sumber daya yang ada;
Posting pesan ke papan buletin, newsgroup, milis, atau grup artikel serupa;
Memberikan blok data, seperti hasil pengiriman formulir, ke proses penanganan data;
Perbedaan mendasar antara permintaan POST dan PUT tercermin dalam arti berbeda dari Request-URI. URI dalam permintaan POST mengidentifikasi sumber daya yang akan menangani entitas terlampir. Sumber daya itu bisa berupa proses penerimaan data, gateway ke beberapa protokol lain, atau entitas terpisah yang menerima anotasi. Sebaliknya, URI dalam permintaan PUT mengidentifikasi entitas yang dilampirkan dengan permintaan - agen pengguna tahu apa yang dimaksud dengan URI dan server TIDAK HARUS mencoba menerapkan permintaan tersebut ke sumber daya lain. Jika server menginginkan agar permintaan diterapkan ke URI yang berbeda, itu HARUS mengirim respons 301 (Dipindahkan Secara Permanen); agen pengguna MUNGKIN kemudian membuat keputusan sendiri mengenai apakah akan mengarahkan permintaan atau tidak.
Selain itu, dan sedikit lebih ringkas, RFC 7231 Bagian 4.3.4 PUT menyatakan (penekanan ditambahkan),
4.3.4. TARUH
Metode PUT meminta status sumber daya target menjadi
createdatau replaceddengan status yang ditentukan oleh representasi terlampir dalam muatan pesan permintaan.
Menggunakan metode yang benar, selain tidak terkait:
Satu keuntungan dari REST ROA vs SOAP adalah bahwa ketika menggunakan HTTP REST ROA, itu mendorong penggunaan yang tepat dari kata kerja HTTP / metode. Jadi misalnya Anda hanya akan menggunakan PUT ketika Anda ingin membuat sumber daya di lokasi yang tepat. Dan Anda tidak akan pernah menggunakan GET untuk membuat atau memodifikasi sumber daya.
Saya membaca dalam spesifikasi itu If the Request-URI does not point to an existing resource [...] the origin server *can* create the resource with that URI. Jadi implementasi PUT yang menolak untuk membuat sumber daya jika tidak ada akan benar, kan? Jika demikian, apakah ini terjadi dalam praktik? Atau implementasi biasanya juga buat di PUT?
houcros
1
beberapa pengecualian tambahan yang membuat perbedaannya sangat jelas ada di URL berikutnya - dzone.com/articles/put-vs-post
Ashish Shetkar
1
Yang tidak saya mengerti adalah bagaimana mengimplementasikan idempotency PUT. secara umum, sebagian besar API akan menggunakan pembuatan ID secara otomatis jika membuat sumber daya baru. dan di PUT, Anda harus membuat sumber daya jika tidak ada, tetapi gunakan ID yang ditentukan dalam URI, tetapi bagaimana Anda bisa melakukannya jika metode pembuatan id diatur menjadi otomatis ???
Roni Axelrad
1
Singkatnya: URI dalam permintaan POST mengidentifikasi sumber daya yang akan menangani entitas terlampir . URI dalam permintaan PUT mengidentifikasi entitas itu sendiri .
Drazen Bjelovuk
Respons terhadap metode POST tidak dapat di-cache, KECUALI responsnya mencakup bidang header Kontrol-Cache yang sesuai atau Kedaluwarsa
NattyC
211
Hanya semantik.
HTTP PUTseharusnya menerima isi permintaan, dan kemudian menyimpannya di sumber yang diidentifikasi oleh URI.
HTTP POSTlebih umum. Seharusnya memulai tindakan di server. Tindakan itu bisa menyimpan badan permintaan di sumber yang diidentifikasi oleh URI, atau bisa juga URI yang berbeda, atau bisa juga tindakan yang berbeda.
PUT seperti unggahan file. Put ke URI mempengaruhi persis URI itu. POST ke URI dapat memiliki efek sama sekali.
Itu yang menyiratkan fungsi tertentu mungkin tidak benar
TaylorMac 8'13
131
Untuk memberikan contoh sumber daya gaya REST:
"POST / buku" dengan banyak informasi buku mungkin membuat buku baru, dan merespons dengan URL baru yang mengidentifikasi buku itu: "/ buku / 5".
"PUT / books / 5" harus membuat buku baru dengan id 5, atau mengganti buku yang ada dengan ID 5.
Dalam gaya non-sumber daya, POST dapat digunakan untuk apa saja yang memiliki efek samping. Satu perbedaan lain adalah bahwa PUT harus idempoten - beberapa PUT dari data yang sama ke URL yang sama harus baik-baik saja, sementara beberapa POST dapat membuat beberapa objek atau apa pun yang dilakukan tindakan POST Anda.
Hai Bhollis, Apa yang akan terjadi, jika saya menggunakan POST / buku / 5? akankah ia membuang sumber daya yang tidak ditemukan?
ChanGan
13
Saya merasa idempotensi adalah perbedaan yang paling menonjol dan penting antara PUT dan POST
Martin Andersson
1
Hai ChanGan, inilah penjelasan yang diberikan Wikipedia tentang kasus "POST / buku / 5" Anda: "Tidak digunakan secara umum. Perlakukan anggota yang dituju sebagai koleksi dengan haknya sendiri dan buat entri baru di dalamnya."
rdiachenko
jawaban ini memberi kesan bahwa PUT dan POST dapat didefinisikan pada sumber daya yang sama, namun perbedaan lain di samping idempotensi adalah siapa yang mengendalikan ruang ID. Di PUT, pengguna mengontrol ruang ID dengan membuat sumber daya dengan ID tertentu. Dalam POST, server mengembalikan ID yang harus dirujuk pengguna dalam panggilan berikutnya seperti GET. Di atas aneh karena campuran keduanya.
Tommy
74
DAPATKAN : Mengambil data dari server. Seharusnya tidak memiliki efek lain.
POST : Mengirim data ke server untuk membuat entitas baru. Sering digunakan saat mengunggah file atau mengirimkan formulir web.
PUT : Mirip dengan POST, tetapi digunakan untuk mengganti entitas yang ada.
PATCH : Mirip dengan PUT, tetapi digunakan untuk memperbarui hanya bidang tertentu dalam entitas yang ada.
HAPUS : Menghapus data dari server.
TRACE : Menyediakan cara untuk menguji apa yang diterima server. Itu hanya mengembalikan apa yang dikirim.
OPSI : Memungkinkan klien untuk mendapatkan informasi tentang metode permintaan yang didukung oleh layanan. Header respons yang relevan adalah Diizinkan dengan metode yang didukung. Juga digunakan dalam CORS sebagai permintaan preflight untuk memberi tahu server tentang metode permintaan aktual dan bertanya tentang header khusus.
KEPALA : Hanya mengembalikan header respons.
CONNECT : Digunakan oleh browser ketika ia tahu itu berbicara ke proxy dan URI akhir dimulai dengan https: //. Maksud CONNECT adalah untuk memungkinkan sesi TLS terenkripsi ujung-ke-ujung, sehingga data tidak dapat dibaca oleh proxy.
Apa catatan dalam konteks ini? Pertanyaannya adalah tentang Permintaan HTTP.
Kishore
Apa yang akan dilakukan POST jika dokumen / sumber daya sudah ada? Apakah ini akan melempar kesalahan, atau hanya akan baik-baik saja?
Aditya Pednekar
Berdasarkan sebagian besar dari apa yang saya baca PUT dapat membuat juga.
aderchox
19
Orang lain telah memposting jawaban yang sangat baik, saya hanya ingin menambahkan bahwa dengan sebagian besar bahasa, kerangka kerja, dan kasus penggunaan Anda akan berurusan dengan POST jauh lebih sering daripada PUT. Sampai-sampai PUT, DELETE, dll. Pada dasarnya adalah pertanyaan-pertanyaan sepele.
Akhir-akhir ini saya agak terganggu oleh kesalahpahaman populer oleh pengembang web bahwa POST digunakan untuk membuat sumber daya, dan PUT digunakan untuk memperbarui / mengubahnya.
Jika Anda melihat halaman 55 RFC 2616 ("Hypertext Transfer Protocol - HTTP / 1.1"), Bagian 9.6 ("PUT"), Anda akan melihat untuk apa PUT sebenarnya:
Metode PUT meminta entitas terlampir disimpan di bawah Request-URI yang disediakan.
Ada juga paragraf praktis untuk menjelaskan perbedaan antara POST dan PUT:
Perbedaan mendasar antara permintaan POST dan PUT tercermin dalam arti berbeda dari Request-URI. URI dalam permintaan POST mengidentifikasi sumber daya yang akan menangani entitas terlampir. Sumber daya itu bisa berupa proses penerimaan data, gateway ke beberapa protokol lain, atau entitas terpisah yang menerima anotasi. Sebaliknya, URI dalam permintaan PUT mengidentifikasi entitas yang dilampirkan dengan permintaan - agen pengguna tahu apa yang dimaksud dengan URI dan server TIDAK HARUS mencoba menerapkan permintaan tersebut ke sumber daya lain.
Itu tidak menyebutkan apa-apa tentang perbedaan antara memperbarui / membuat, karena bukan itu tentang. Ini tentang perbedaan antara ini:
obj.set_attribute(value) # A POST request.
Dan ini:
obj.attribute = value # A PUT request.
Jadi tolong, hentikan penyebaran kesalahpahaman populer ini. Baca RFC Anda.
Ini sepertinya tidak sopan, dan pedantic dengan cara yang kurang bermanfaat. Dalam contoh PUT yang Anda kutip, entitas baru, dalam api ISTIRAHAT, catatan 'baru' - dan dapat diakses di lokasi itu. Ini dipertanyakan apakah ini pilihan desain yang baik untuk memungkinkan sub-anggota dapat berubah seperti itu (saya pikir itu tidak ideal), tetapi bahkan jika itu, Anda menggunakan subspesies untuk menyerang banyak informasi yang berguna. Sebagian besar waktu, deskripsi seperti yang biasanya dinyatakan adalah pernyataan yang baik dari konten RFC, dirangkum, dan pernyataan tentang praktik yang biasa dan kebiasaan. Juga, tidak ada salahnya Anda bersikap sopan.
tooluser
3
Ini tidak dapat cukup dibatalkan. PUT tidak memiliki tempat di API REST. Sebagian besar waktu, POST menunjukkan semantik yang benar.
Beefster
Tidak dikatakan dengan baik, tetapi memang interpretasi yang akurat tentang RFC. Dunia pengembang web sepertinya adalah rawa informasi yang keliru.
William T Froggard
@Beefster Tidak ada yang namanya 'POST Menunjukkan'. Najeebul membuat poin bagus di sini. Bagaimana Anda mengetahui apa yang ditunjukkannya? kecuali bahwa Anda hanya menggunakannya karena Anda selalu menggunakannya seperti itu sejak hari pertama Anda mempelajarinya tetapi tidak benar-benar tahu mengapa Anda harus menggunakannya dibandingkan dengan yang lain?
Mosia Thabo
12
POST dianggap sesuatu dari metode jenis pabrik. Anda memasukkan data dengannya untuk membuat apa yang Anda inginkan dan apa pun yang ada di ujung sana tahu apa yang harus dilakukan dengannya. PUT digunakan untuk memperbarui data yang ada di URL yang diberikan, atau untuk membuat sesuatu yang baru ketika Anda tahu akan seperti apa URI dan itu belum ada (sebagai lawan dari POST yang akan membuat sesuatu dan mengembalikan URL ke jika perlu).
REST meminta pengembang untuk menggunakan metode HTTP secara eksplisit dan dengan cara yang konsisten dengan definisi protokol. Prinsip desain REST dasar ini menetapkan pemetaan satu-ke-satu antara membuat, membaca, memperbarui, dan menghapus operasi (CRUD) dan metode HTTP. Menurut pemetaan ini:
• Untuk membuat sumber daya di server, gunakan POST.
• Untuk mengambil sumber daya, gunakan GET.
• Untuk mengubah status sumber daya atau memperbaruinya, gunakan PUT.
• Untuk menghapus atau menghapus sumber daya, gunakan HAPUS.
@Beefster Posting untuk dibuat, Put to update, apakah itu benar?
Long Nguyen
Tidak. PUT adalah untuk benar-benar menempatkan konten literal di URL dan jarang menempatkannya dalam REST API. POST lebih abstrak dan mencakup segala jenis penambahan konten yang tidak memiliki semantik "Letakkan file ini di URL ini".
Beefster
7
Seharusnya cukup mudah ketika menggunakan satu atau yang lain, tetapi kata-kata yang kompleks adalah sumber kebingungan bagi banyak dari kita.
Kapan menggunakannya:
Gunakan PUTsaat Anda ingin memodifikasi sumber daya tunggal yang sudah menjadi bagian dari pengumpulan sumber daya. PUTmenggantikan sumber daya secara keseluruhan. Contoh:PUT /resources/:resourceId
Sidenote: Gunakan PATCHjika Anda ingin memperbarui bagian dari sumber daya.
Gunakan POSTsaat Anda ingin menambahkan sumber daya anak di bawah kumpulan sumber daya.
Contoh:POST => /resources
Secara umum:
Secara umum, dalam praktiknya, selalu gunakan PUTuntuk operasi UPDATE .
Selalu gunakan POSTuntuk operasi BUAT .
Contoh:
GET / perusahaan / laporan => Dapatkan semua laporan GET / perusahaan / laporan / {id} => Dapatkan informasi laporan diidentifikasi oleh "id" POST / perusahaan / laporan => Buat laporan baru PUT / perusahaan / laporan / {id} baru => Perbarui melaporkan informasi yang diidentifikasi oleh "id" PATCH / perusahaan / laporan / {id} => Perbarui bagian dari informasi laporan yang diidentifikasi oleh "id" DELETE / perusahaan / laporan / {id} => Hapus laporan dengan "id"
Perbedaan antara POST dan PUT adalah bahwa PUT idempoten, itu berarti, memanggil permintaan PUT yang sama beberapa kali akan selalu menghasilkan hasil yang sama (yang tidak ada efek samping), sementara di sisi lain, memanggil permintaan POST berulang kali mungkin terjadi ( tambahan) efek samping dari menciptakan sumber daya yang sama beberapa kali.
GET : Permintaan menggunakan GET hanya mengambil data, yaitu meminta representasi dari sumber yang ditentukan
POST: Ini mengirim data ke server untuk membuat sumber daya. Jenis isi permintaan ditunjukkan oleh header Jenis-Konten. Ini sering menyebabkan perubahan status atau efek samping pada server
PUT : Membuat sumber daya baru atau mengganti representasi dari sumber daya target dengan payload permintaan
PATCH : Ini digunakan untuk menerapkan modifikasi parsial ke sumber daya
DELETE : Ini menghapus sumber daya yang ditentukan
TRACE : Ini melakukan tes loop-back pesan di sepanjang jalan ke sumber daya target, menyediakan mekanisme debugging yang berguna
OPTIONS : Ini digunakan untuk menggambarkan opsi komunikasi untuk sumber daya target, klien dapat menentukan URL untuk metode PILIHAN, atau tanda bintang (*) untuk merujuk ke seluruh server.
HEAD : Ia meminta respons yang identik dengan permintaan GET, tetapi tanpa badan respons
CONNECT : Ini membangun terowongan ke server yang diidentifikasi oleh sumber daya target, dapat digunakan untuk mengakses situs web yang menggunakan SSL (HTTPS)
POST digunakan untuk membuat sumber daya baru dan kemudian mengembalikan sumber daya tersebut URI
EX
REQUEST : POST ..../books
{
"book":"booName",
"author":"authorName"
}
Panggilan ini dapat membuat buku baru dan mengembalikan buku itu URI
Response ...THE-NEW-RESOURCE-URI/books/5
PUT digunakan untuk mengganti sumber daya, jika sumber daya itu ada maka cukup perbarui itu, tetapi jika sumber daya itu tidak ada maka buat itu,
REQUEST : PUT ..../books/5
{
"book":"booName",
"author":"authorName"
}
Dengan PUTkami tahu pengidentifikasi sumber daya, tetapi POSTakan mengembalikan pengidentifikasi sumber daya baru
Penggunaan non-ISTIRAHAT
POST digunakan untuk memulai tindakan di sisi server, tindakan ini mungkin atau tidak dapat membuat sumber daya, tetapi tindakan ini akan memiliki sisi yang mempengaruhi selalu akan mengubah sesuatu di server
PUT digunakan untuk menempatkan atau mengganti konten literal di URL tertentu
Perbedaan lain dalam gaya REST-ful dan non-REST-ful
POST adalah Operasi Non-Idempoten: Ini akan menyebabkan beberapa perubahan jika dijalankan beberapa kali dengan permintaan yang sama.
PUT adalah Operasi Idempoten: Tidak akan memiliki efek samping jika dijalankan beberapa kali dengan permintaan yang sama.
Perlu disebutkan bahwa POSTada beberapa serangan Pemalsuan Permintaan Situs Web (CSRF) yang umum terjadi sementara PUTtidak.
CSRF di bawah ini tidak mungkin dilakukanPUT ketika korban mengunjungi attackersite.com.
The efek serangan adalah bahwa korban tidak sengaja menghapus pengguna hanya karena (korban) telah log-in sebagai adminon target.site.com, sebelum mengunjungi attackersite.com:
Permintaan normal (cookie dikirim): ( PUTbukan nilai atribut yang didukung)
Sebenarnya tidak ada perbedaan selain gelar mereka. Sebenarnya ada perbedaan mendasar antara GET dan yang lainnya. Dengan metode "MENDAPAT" -Request, Anda mengirim data dalam url-address-line, yang dipisahkan terlebih dahulu dengan tanda tanya, dan kemudian dengan tanda &.
Tetapi dengan metode "POST" -meminta, Anda tidak bisa meneruskan data melalui url, tetapi Anda harus meneruskan data sebagai objek di "badan" permintaan. Di sisi server, Anda harus membaca isi dari konten yang diterima untuk mendapatkan data yang dikirim. Tetapi di sisi lain tidak ada kemungkinan untuk mengirim konten di dalam tubuh, ketika Anda mengirim "MENDAPATKAN" -Minta.
Klaim, bahwa "GET" hanya untuk mendapatkan data dan "POST" adalah untuk memposting data, sama sekali salah. Tidak ada yang dapat mencegah Anda membuat konten baru, menghapus konten yang ada, mengedit konten yang ada, atau melakukan apa pun di backend, berdasarkan data, yang dikirim oleh permintaan "GET" atau dengan permintaan "POST". Dan tidak ada yang bisa mencegah Anda untuk mengkodekan backend dengan cara, bahwa dengan "POST" - Permintaan, klien meminta beberapa data.
Dengan permintaan, apa pun metode yang Anda gunakan, Anda memanggil URL dan mengirim atau tidak mengirim beberapa data untuk menentukan, informasi mana yang ingin Anda sampaikan ke server untuk menangani permintaan Anda, dan kemudian klien mendapat jawaban dari server. Data dapat berisi apa pun yang ingin Anda kirim, backend diizinkan melakukan apa pun yang diinginkan dengan data dan respons dapat berisi informasi apa pun, yang ingin Anda masukkan ke sana.
Hanya ada dua METODE DASAR ini. DAPATKAN dan POST. Tapi struktur mereka, yang membuat mereka berbeda dan bukan apa yang Anda kode di backend. Di backend Anda dapat kode apa pun yang Anda inginkan, dengan data yang diterima. Tetapi dengan "POST" - permintaan Anda harus mengirim / mengambil data di tubuh dan tidak di url-addressline, dan dengan permintaan "GET", Anda harus mengirim / mengambil data di url-addressline dan tidak di tubuh. Itu saja.
Semua metode lain, seperti "PUT", "HAPUS" dan seterusnya, mereka memiliki struktur yang sama dengan "POST".
Metode POST terutama digunakan, jika Anda ingin sedikit menyembunyikan konten, karena apa pun yang Anda tulis di url-addressline, ini akan disimpan dalam cache dan GET-Method sama dengan menulis url-addressline dengan data. Jadi jika Anda ingin mengirim data sensitif, yang tidak selalu harus nama pengguna dan kata sandi, tetapi misalnya beberapa id atau hash, yang Anda tidak ingin ditampilkan di url-address-line, maka Anda harus menggunakan metode POST .
Panjang URL-Addressline juga terbatas pada 1024 simbol, sedangkan "POST" -Metode tidak dibatasi. Jadi, jika Anda memiliki jumlah data yang lebih besar, Anda mungkin tidak dapat mengirimkannya dengan Permintaan-GET, tetapi Anda harus menggunakan Permintaan-POST. Jadi ini juga merupakan nilai tambah bagi permintaan POST.
Tetapi menangani permintaan GET jauh lebih mudah, ketika Anda tidak memiliki teks yang rumit untuk dikirim. Jika tidak, dan ini merupakan nilai tambah lain untuk metode POST, adalah, bahwa dengan metode GET Anda perlu menyandikan url teks, agar dapat mengirim beberapa simbol di dalam teks atau bahkan spasi. Tetapi dengan metode POST Anda tidak memiliki batasan dan konten Anda tidak perlu diubah atau dimanipulasi dengan cara apa pun.
PUT - Jika kami membuat permintaan yang sama dua kali menggunakan PUT menggunakan parameter yang sama dua kali, permintaan kedua tidak akan berpengaruh. Inilah sebabnya mengapa PUT umumnya digunakan untuk skenario Pembaruan, memanggil Pembaruan lebih dari sekali dengan parameter yang sama tidak melakukan apa-apa lebih dari panggilan awal sehingga PUT idempoten.
POST bukan idempoten, misalnya Buat akan membuat dua entri terpisah ke target maka itu bukan idempoten sehingga CREATE digunakan secara luas di POST.
Melakukan panggilan yang sama menggunakan POST dengan parameter yang sama setiap kali akan menyebabkan dua hal berbeda terjadi, maka mengapa POST umumnya digunakan untuk skenario Buat
Jawaban:
PUT HTTP:
PUT menempatkan file atau sumber daya pada URI tertentu, dan tepat di URI itu. Jika sudah ada file atau sumber daya di URI itu, PUT menggantikan file atau sumber daya itu. Jika tidak ada file atau sumber daya di sana, PUT membuat satu. PUT idempoten , tetapi respons PUT yang paradoks tidak dapat di-cache.
HTTP 1.1 Lokasi RFC untuk PUT
HTTP POST:
POST mengirimkan data ke URI tertentu dan mengharapkan sumber daya di URI itu untuk menangani permintaan tersebut. Server web pada titik ini dapat menentukan apa yang harus dilakukan dengan data dalam konteks sumber daya yang ditentukan. Metode POST tidak idempoten , namun respons POST dapat disimpan dalam cache selama server menetapkan header Kontrol-Cache yang sesuai dan Kedaluwarsa.
HTTP RFC resmi menetapkan POST sebagai:
HTTP 1.1 Lokasi RFC untuk POST
Perbedaan antara POST dan PUT:
RFC sendiri menjelaskan perbedaan inti:
Selain itu, dan sedikit lebih ringkas, RFC 7231 Bagian 4.3.4 PUT menyatakan (penekanan ditambahkan),
Menggunakan metode yang benar, selain tidak terkait:
Satu keuntungan dari REST ROA vs SOAP adalah bahwa ketika menggunakan HTTP REST ROA, itu mendorong penggunaan yang tepat dari kata kerja HTTP / metode. Jadi misalnya Anda hanya akan menggunakan PUT ketika Anda ingin membuat sumber daya di lokasi yang tepat. Dan Anda tidak akan pernah menggunakan GET untuk membuat atau memodifikasi sumber daya.
sumber
If the Request-URI does not point to an existing resource [...] the origin server *can* create the resource with that URI
. Jadi implementasi PUT yang menolak untuk membuat sumber daya jika tidak ada akan benar, kan? Jika demikian, apakah ini terjadi dalam praktik? Atau implementasi biasanya juga buat di PUT?Hanya semantik.
HTTP
PUT
seharusnya menerima isi permintaan, dan kemudian menyimpannya di sumber yang diidentifikasi oleh URI.HTTP
POST
lebih umum. Seharusnya memulai tindakan di server. Tindakan itu bisa menyimpan badan permintaan di sumber yang diidentifikasi oleh URI, atau bisa juga URI yang berbeda, atau bisa juga tindakan yang berbeda.PUT seperti unggahan file. Put ke URI mempengaruhi persis URI itu. POST ke URI dapat memiliki efek sama sekali.
sumber
Untuk memberikan contoh sumber daya gaya REST:
"POST / buku" dengan banyak informasi buku mungkin membuat buku baru, dan merespons dengan URL baru yang mengidentifikasi buku itu: "/ buku / 5".
"PUT / books / 5" harus membuat buku baru dengan id 5, atau mengganti buku yang ada dengan ID 5.
Dalam gaya non-sumber daya, POST dapat digunakan untuk apa saja yang memiliki efek samping. Satu perbedaan lain adalah bahwa PUT harus idempoten - beberapa PUT dari data yang sama ke URL yang sama harus baik-baik saja, sementara beberapa POST dapat membuat beberapa objek atau apa pun yang dilakukan tindakan POST Anda.
sumber
sumber
PUT dimaksudkan sebagai metode untuk "mengunggah" barang ke URI tertentu, atau menimpa apa yang sudah ada dalam URI itu.
POST, di sisi lain, adalah cara mengirimkan data yang TERKAIT dengan URI yang diberikan.
Lihat HTTP RFC
sumber
Sejauh yang saya tahu, PUT sebagian besar digunakan untuk memperbarui catatan.
POST - Untuk membuat dokumen atau sumber daya lainnya
PUT - Untuk memperbarui dokumen yang dibuat atau sumber daya lainnya.
Namun untuk lebih jelasnya, PUT biasanya 'Mengganti' catatan yang ada jika ada dan membuat jika tidak ada ..
sumber
Orang lain telah memposting jawaban yang sangat baik, saya hanya ingin menambahkan bahwa dengan sebagian besar bahasa, kerangka kerja, dan kasus penggunaan Anda akan berurusan dengan POST jauh lebih sering daripada PUT. Sampai-sampai PUT, DELETE, dll. Pada dasarnya adalah pertanyaan-pertanyaan sepele.
sumber
Silakan lihat: http://zacharyvoase.com/2009/07/03/http-post-put-diff/
Akhir-akhir ini saya agak terganggu oleh kesalahpahaman populer oleh pengembang web bahwa POST digunakan untuk membuat sumber daya, dan PUT digunakan untuk memperbarui / mengubahnya.
Jika Anda melihat halaman 55 RFC 2616 ("Hypertext Transfer Protocol - HTTP / 1.1"), Bagian 9.6 ("PUT"), Anda akan melihat untuk apa PUT sebenarnya:
Ada juga paragraf praktis untuk menjelaskan perbedaan antara POST dan PUT:
Itu tidak menyebutkan apa-apa tentang perbedaan antara memperbarui / membuat, karena bukan itu tentang. Ini tentang perbedaan antara ini:
Dan ini:
Jadi tolong, hentikan penyebaran kesalahpahaman populer ini. Baca RFC Anda.
sumber
POST dianggap sesuatu dari metode jenis pabrik. Anda memasukkan data dengannya untuk membuat apa yang Anda inginkan dan apa pun yang ada di ujung sana tahu apa yang harus dilakukan dengannya. PUT digunakan untuk memperbarui data yang ada di URL yang diberikan, atau untuk membuat sesuatu yang baru ketika Anda tahu akan seperti apa URI dan itu belum ada (sebagai lawan dari POST yang akan membuat sesuatu dan mengembalikan URL ke jika perlu).
sumber
REST meminta pengembang untuk menggunakan metode HTTP secara eksplisit dan dengan cara yang konsisten dengan definisi protokol. Prinsip desain REST dasar ini menetapkan pemetaan satu-ke-satu antara membuat, membaca, memperbarui, dan menghapus operasi (CRUD) dan metode HTTP. Menurut pemetaan ini:
• Untuk membuat sumber daya di server, gunakan POST.
• Untuk mengambil sumber daya, gunakan GET.
• Untuk mengubah status sumber daya atau memperbaruinya, gunakan PUT.
• Untuk menghapus atau menghapus sumber daya, gunakan HAPUS.
Info lebih lanjut: Layanan web RESTful: Dasar-dasar dari IBM
sumber
Seharusnya cukup mudah ketika menggunakan satu atau yang lain, tetapi kata-kata yang kompleks adalah sumber kebingungan bagi banyak dari kita.
Kapan menggunakannya:
Gunakan
PUT
saat Anda ingin memodifikasi sumber daya tunggal yang sudah menjadi bagian dari pengumpulan sumber daya.PUT
menggantikan sumber daya secara keseluruhan. Contoh:PUT /resources/:resourceId
Sidenote: Gunakan
PATCH
jika Anda ingin memperbarui bagian dari sumber daya.POST
saat Anda ingin menambahkan sumber daya anak di bawah kumpulan sumber daya.Contoh:
POST => /resources
Secara umum:
PUT
untuk operasi UPDATE .POST
untuk operasi BUAT .Contoh:
GET
/ perusahaan / laporan => Dapatkan semua laporanGET
/ perusahaan / laporan / {id} => Dapatkan informasi laporan diidentifikasi oleh "id"POST
/ perusahaan / laporan => Buat laporan baruPUT
/ perusahaan / laporan / {id} baru => Perbarui melaporkan informasi yang diidentifikasi oleh "id"PATCH
/ perusahaan / laporan / {id} => Perbarui bagian dari informasi laporan yang diidentifikasi oleh "id"DELETE
/ perusahaan / laporan / {id} => Hapus laporan dengan "id"sumber
Perbedaan antara POST dan PUT adalah bahwa PUT idempoten, itu berarti, memanggil permintaan PUT yang sama beberapa kali akan selalu menghasilkan hasil yang sama (yang tidak ada efek samping), sementara di sisi lain, memanggil permintaan POST berulang kali mungkin terjadi ( tambahan) efek samping dari menciptakan sumber daya yang sama beberapa kali.
GET
: Permintaan menggunakan GET hanya mengambil data, yaitu meminta representasi dari sumber yang ditentukanPOST
: Ini mengirim data ke server untuk membuat sumber daya. Jenis isi permintaan ditunjukkan oleh header Jenis-Konten. Ini sering menyebabkan perubahan status atau efek samping pada serverPUT
: Membuat sumber daya baru atau mengganti representasi dari sumber daya target dengan payload permintaanPATCH
: Ini digunakan untuk menerapkan modifikasi parsial ke sumber dayaDELETE
: Ini menghapus sumber daya yang ditentukanTRACE
: Ini melakukan tes loop-back pesan di sepanjang jalan ke sumber daya target, menyediakan mekanisme debugging yang bergunaOPTIONS
: Ini digunakan untuk menggambarkan opsi komunikasi untuk sumber daya target, klien dapat menentukan URL untuk metode PILIHAN, atau tanda bintang (*) untuk merujuk ke seluruh server.HEAD
: Ia meminta respons yang identik dengan permintaan GET, tetapi tanpa badan responsCONNECT
: Ini membangun terowongan ke server yang diidentifikasi oleh sumber daya target, dapat digunakan untuk mengakses situs web yang menggunakan SSL (HTTPS)sumber
Penggunaan ISTIRAHAT
POST
digunakan untuk membuat sumber daya baru dan kemudian mengembalikan sumber daya tersebutURI
Panggilan ini dapat membuat buku baru dan mengembalikan buku itu
URI
PUT
digunakan untuk mengganti sumber daya, jika sumber daya itu ada maka cukup perbarui itu, tetapi jika sumber daya itu tidak ada maka buat itu,Dengan
PUT
kami tahu pengidentifikasi sumber daya, tetapiPOST
akan mengembalikan pengidentifikasi sumber daya baruPenggunaan non-ISTIRAHAT
POST
digunakan untuk memulai tindakan di sisi server, tindakan ini mungkin atau tidak dapat membuat sumber daya, tetapi tindakan ini akan memiliki sisi yang mempengaruhi selalu akan mengubah sesuatu di serverPUT
digunakan untuk menempatkan atau mengganti konten literal di URL tertentuPerbedaan lain dalam gaya REST-ful dan non-REST-ful
POST
adalah Operasi Non-Idempoten: Ini akan menyebabkan beberapa perubahan jika dijalankan beberapa kali dengan permintaan yang sama.PUT
adalah Operasi Idempoten: Tidak akan memiliki efek samping jika dijalankan beberapa kali dengan permintaan yang sama.sumber
Perlu disebutkan bahwa
POST
ada beberapa serangan Pemalsuan Permintaan Situs Web (CSRF) yang umum terjadi sementaraPUT
tidak.CSRF di bawah ini tidak mungkin dilakukan
PUT
ketika korban mengunjungiattackersite.com
.The efek serangan adalah bahwa korban tidak sengaja menghapus pengguna hanya karena (korban) telah log-in sebagai
admin
ontarget.site.com
, sebelum mengunjungiattackersite.com
:Permintaan normal (cookie dikirim): (
PUT
bukan nilai atribut yang didukung)Kode pada
attackersite.com
:Permintaan XHR (cookie dikirim): (
PUT
akan memicu permintaan preflight, yang responsnya akan mencegah browser memintadeleteUser
halaman)sumber
Dengan kata sederhana, Anda dapat mengatakan:
1.HTTP Get: Digunakan untuk mendapatkan satu atau lebih item
2.HTTP Post: Digunakan untuk membuat item
3.HTTP Put: Digunakan untuk memperbarui suatu item
4.HTTP Patch: Digunakan untuk memperbarui sebagian item
5.HTTP Delete: Digunakan untuk menghapus item
sumber
Sebenarnya tidak ada perbedaan selain gelar mereka. Sebenarnya ada perbedaan mendasar antara GET dan yang lainnya. Dengan metode "MENDAPAT" -Request, Anda mengirim data dalam url-address-line, yang dipisahkan terlebih dahulu dengan tanda tanya, dan kemudian dengan tanda &.
Tetapi dengan metode "POST" -meminta, Anda tidak bisa meneruskan data melalui url, tetapi Anda harus meneruskan data sebagai objek di "badan" permintaan. Di sisi server, Anda harus membaca isi dari konten yang diterima untuk mendapatkan data yang dikirim. Tetapi di sisi lain tidak ada kemungkinan untuk mengirim konten di dalam tubuh, ketika Anda mengirim "MENDAPATKAN" -Minta.
Klaim, bahwa "GET" hanya untuk mendapatkan data dan "POST" adalah untuk memposting data, sama sekali salah. Tidak ada yang dapat mencegah Anda membuat konten baru, menghapus konten yang ada, mengedit konten yang ada, atau melakukan apa pun di backend, berdasarkan data, yang dikirim oleh permintaan "GET" atau dengan permintaan "POST". Dan tidak ada yang bisa mencegah Anda untuk mengkodekan backend dengan cara, bahwa dengan "POST" - Permintaan, klien meminta beberapa data.
Dengan permintaan, apa pun metode yang Anda gunakan, Anda memanggil URL dan mengirim atau tidak mengirim beberapa data untuk menentukan, informasi mana yang ingin Anda sampaikan ke server untuk menangani permintaan Anda, dan kemudian klien mendapat jawaban dari server. Data dapat berisi apa pun yang ingin Anda kirim, backend diizinkan melakukan apa pun yang diinginkan dengan data dan respons dapat berisi informasi apa pun, yang ingin Anda masukkan ke sana.
Hanya ada dua METODE DASAR ini. DAPATKAN dan POST. Tapi struktur mereka, yang membuat mereka berbeda dan bukan apa yang Anda kode di backend. Di backend Anda dapat kode apa pun yang Anda inginkan, dengan data yang diterima. Tetapi dengan "POST" - permintaan Anda harus mengirim / mengambil data di tubuh dan tidak di url-addressline, dan dengan permintaan "GET", Anda harus mengirim / mengambil data di url-addressline dan tidak di tubuh. Itu saja.
Semua metode lain, seperti "PUT", "HAPUS" dan seterusnya, mereka memiliki struktur yang sama dengan "POST".
Metode POST terutama digunakan, jika Anda ingin sedikit menyembunyikan konten, karena apa pun yang Anda tulis di url-addressline, ini akan disimpan dalam cache dan GET-Method sama dengan menulis url-addressline dengan data. Jadi jika Anda ingin mengirim data sensitif, yang tidak selalu harus nama pengguna dan kata sandi, tetapi misalnya beberapa id atau hash, yang Anda tidak ingin ditampilkan di url-address-line, maka Anda harus menggunakan metode POST .
Panjang URL-Addressline juga terbatas pada 1024 simbol, sedangkan "POST" -Metode tidak dibatasi. Jadi, jika Anda memiliki jumlah data yang lebih besar, Anda mungkin tidak dapat mengirimkannya dengan Permintaan-GET, tetapi Anda harus menggunakan Permintaan-POST. Jadi ini juga merupakan nilai tambah bagi permintaan POST.
Tetapi menangani permintaan GET jauh lebih mudah, ketika Anda tidak memiliki teks yang rumit untuk dikirim. Jika tidak, dan ini merupakan nilai tambah lain untuk metode POST, adalah, bahwa dengan metode GET Anda perlu menyandikan url teks, agar dapat mengirim beberapa simbol di dalam teks atau bahkan spasi. Tetapi dengan metode POST Anda tidak memiliki batasan dan konten Anda tidak perlu diubah atau dimanipulasi dengan cara apa pun.
sumber
Baik PUT dan POST adalah Metode Istirahat.
PUT - Jika kami membuat permintaan yang sama dua kali menggunakan PUT menggunakan parameter yang sama dua kali, permintaan kedua tidak akan berpengaruh. Inilah sebabnya mengapa PUT umumnya digunakan untuk skenario Pembaruan, memanggil Pembaruan lebih dari sekali dengan parameter yang sama tidak melakukan apa-apa lebih dari panggilan awal sehingga PUT idempoten.
POST bukan idempoten, misalnya Buat akan membuat dua entri terpisah ke target maka itu bukan idempoten sehingga CREATE digunakan secara luas di POST.
Melakukan panggilan yang sama menggunakan POST dengan parameter yang sama setiap kali akan menyebabkan dua hal berbeda terjadi, maka mengapa POST umumnya digunakan untuk skenario Buat
sumber