Saya perlu menjalankan proses yang tidak memerlukan input dari pengguna, hanya pemicu. Saya berencana untuk menggunakan POST / uri tanpa badan untuk memicu proses. Saya ingin tahu apakah ini dianggap buruk dari perspektif HTTP dan REST?
177
Jawaban:
Saya mengajukan pertanyaan ini pada kelompok kerja HTTP IETF beberapa bulan yang lalu. Jawaban singkatnya adalah: TIDAK, ini bukan praktik yang buruk (tapi saya sarankan membaca utas untuk lebih jelasnya).
sumber
Menggunakan POST bukannya GET sangat masuk akal, karena juga menginstruksikan server (dan gateway sepanjang jalan) untuk tidak mengembalikan respons yang di-cache.
sumber
POST sepenuhnya OK. Perbedaan GET dengan POST Anda mengubah keadaan sistem (kemungkinan besar pemicu Anda adalah "melakukan" sesuatu dan mengubah data).
Saya sudah menggunakan POST tanpa payload dan "rasanya" OK. Satu hal yang harus Anda lakukan ketika menggunakan POST tanpa payload: Pass header
Content-Length: 0
. Saya ingat masalah dengan beberapa proksi ketika saya api-client tidak lulus.sumber
Jika Anda menggunakan POST / uri tanpa badan, itu seperti menggunakan fungsi yang tidak mengambil argumen .eg int post (void); jadi masuk akal untuk memiliki fungsi untuk kelas sumber daya Anda yang dapat mengubah keadaan suatu objek tanpa argumen. Jika Anda mempertimbangkan untuk menerapkan fungsi sentuh Unix untuk URI, bukankah itu pilihan yang baik?
sumber
Ya, tidak apa-apa untuk mengirim permintaan POST tanpa isi dan alih-alih menggunakan parameter string kueri. Tapi hati-hati jika parameter Anda mengandung karakter yang tidak valid HTTP, Anda harus menyandikannya.
Misalnya jika Anda perlu POST 'hello world' ke dan titik akhir Anda harus membuatnya terlihat seperti ini: http://api.com?param=hello%20world
sumber
Dukungan untuk jawaban bahwa POST OK dalam hal ini adalah bahwa dalam kasus Python, kerangka kerja OpenAPI "FastAPI" menghasilkan GUI Swagger (lihat gambar) yang tidak berisi bagian Tubuh ketika metode (lihat contoh di bawah) tidak memiliki parameter untuk menerima tubuh.
metode "post_disable_db" hanya menerima parameter path "db_name" dan tidak memiliki parameter ke-2 yang akan menyiratkan badan wajib.
sumber