HTTP membedakan antara dua properti:
Idempotensi didefinisikan oleh spek sebagai berikut:
Metode juga dapat memiliki properti " idempotence " di mana (selain dari kesalahan atau masalah kedaluwarsa) efek samping dari N> 0 permintaan identik adalah sama seperti untuk satu permintaan. Metode GET
, HEAD
, PUT
dan DELETE
berbagi properti ini. Juga, metode OPTIONS
dan TRACE
TIDAK HARUS memiliki efek samping, dan karenanya inheren idempoten.
Dan keamanan:
Secara khusus, konvensi telah ditetapkan bahwa metode GET
dan TIDAK HARUS memiliki signifikansi mengambil tindakan selain pengambilan. Metode-metode ini harus dianggap " aman ". Ini memungkinkan agen pengguna untuk mewakili metode lain, seperti , dan , dengan cara khusus, sehingga pengguna dibuat sadar akan fakta bahwa tindakan yang mungkin tidak aman sedang diminta.HEAD
POST
PUT
DELETE
Secara alami, tidak mungkin untuk memastikan bahwa server tidak menghasilkan efek samping sebagai akibat dari melakukan GET
permintaan; pada kenyataannya, beberapa sumber daya dinamis menganggap itu sebagai fitur. Perbedaan penting di sini adalah bahwa pengguna tidak meminta efek samping, sehingga tidak dapat dimintai pertanggungjawaban atas efek sampingnya.
Perhatikan bahwa keselamatan menyiratkan idempotensi: jika suatu metode tidak memiliki efek samping, maka melakukannya berkali-kali akan menghasilkan efek samping yang sama seperti melakukannya sekali, yaitu tidak ada.
Ini menempatkan metode ke dalam tiga kategori:
- aman (dan dengan demikian juga idempoten):
GET
, HEAD
, OPTION
,TRACE
- idempoten tapi belum tentu aman:
PUT
,DELETE
- tidak idempoten atau aman:
POST
PUT perlu memiliki sisi yang tidak terpengaruh.
Itu salah. PUT
idempoten tetapi tidak aman. The Inti dari PUT
adalah memiliki efek samping, yaitu memperbarui sumber daya. Apa yang dimaksud dengan idempotensi adalah bahwa memperbarui sumber daya yang sama dengan konten yang sama beberapa kali harus memiliki efek yang sama dengan memperbarui hanya sekali.
Perhatikan paragraf terakhir di bagian tentang keselamatan [penekanan tambang]:
Secara alami, tidak mungkin untuk memastikan bahwa server tidak menghasilkan efek samping sebagai akibat dari melakukan GET
permintaan; pada kenyataannya, beberapa sumber daya dinamis menganggap itu sebagai fitur. Perbedaan penting di sini adalah bahwa pengguna tidak meminta efek samping, sehingga tidak dapat dimintai pertanggungjawaban atas efek sampingnya .
Meskipun kalimat ini berbicara tentang GET
dan keamanan, kita dapat mengasumsikan bahwa penulis juga bermaksud menerapkan alasan PUT
dan idempotensi yang sama. TKI: PUT
seharusnya hanya memiliki satu efek samping yang terlihat pengguna , yaitu memperbarui sumber daya yang disebutkan. Ini mungkin memiliki efek samping lain, tetapi pengguna tidak bertanggung jawab untuk itu.
Misalnya, fakta yang PUT
idempoten berarti bahwa saya dapat mencoba kembali sesering yang saya inginkan: spec menjamin bahwa mengeksekusinya berkali-kali akan persis sama dengan mengeksekusinya sekali. Sangat valid untuk membuat backlog revisi lama sebagai efek samping dari beberapa PUT
permintaan tersebut. Namun, jika, sebagai hasil dari beberapa percobaan ulang, database Anda dipenuhi dengan tumpukan revisi lama, itu bukan masalah saya, itu milik Anda.
TKI: Anda diizinkan memiliki efek samping sebanyak yang Anda inginkan, tetapi
- itu harus melihat ke pengguna seolah-olah permintaan mereka idempoten
- Anda bertanggung jawab atas efek samping tersebut, bukan pengguna