Lebih
SISA API menggunakan POST bukan GET
Let's menganggap layanan ini menawarkan beberapa funcionality yang dapat saya gunakan seperti ini:
GET /service/function?param1=value1¶m2=value2
Adalah benar untuk mengatakan bahwa aku bisa menggunakannya dengan POSTING query?
POST /service/function { param1 : value1, param2 : value2 }
Ada dua pertanyaan yang sama? Saya bisa menggunakan kedua varian dalam setiap kasus atau dokumentasi harus secara eksplisit mengatakan bahwa saya dapat menggunakan GET dan POST pertanyaan?
54
7
Hanya untuk review,
SISA
memiliki sifat-sifat tertentu yang pengembang harus diikuti dalam rangka untuk membuatnyaTenang
:Apa SISANYA?
Menurut wikipedia:
Apa kata kerja harus melakukan
JADI pengguna Daniel Vasallo melakukan pekerjaan yang baik meletakkan tanggung jawab dari metode ini di pertanyaan Pemahaman ISTIRAHAT: Verba, kode kesalahan, dan authentication:
Jadi, untuk menjawab pertanyaan anda:
Jika anda sedang menulis tua polos RPC API call, mereka bisa secara teknis dipertukarkan selama pemrosesan di sisi server yang tidak berbeda antara kedua panggilan. Namun, dalam rangka untuk panggilan untuk menjadi Tenang, menyebut endpoint melalui
MENDAPATKAN
metode harus memiliki fungsi yang berbeda (yang adalah untuk mendapatkan sumber daya(s)) dariPOST
metode (yang adalah untuk menciptakan sumber daya baru).Catatan: ada beberapa perdebatan di luar sana tentang apakah atau tidak
POST
juga harus diizinkan untuk digunakan untuk memperbarui sumber daya... meskipun aku'm tidak mengomentari itu, saya'm hanya memberitahu anda beberapa orang memiliki masalah dengan itu.Saya menggunakan POST tubuh untuk sesuatu yang non-sepele dan line-of-business apps untuk alasan-alasan ini:
BTW, saya juga menempatkan bidang untuk kembali di POSTING saya, tubuh saya mungkin tidak ingin mengekspos saya nama field. Keamanan adalah seperti bawang; banyak lapisan dan membuat kita menangis!
Anda dapat't menggunakan
API
menggunakanPOST
atauMENDAPATKAN
jika mereka tidak membangun untuk panggilan menggunakan metode ini separetly. Seperti jika anda mengatakan APIdiakses dengan menggunakan
MENDAPATKAN
metode. Maka anda tidak dapat menyebutnya menggunakanPOST
metode jika tidak ditetapkan sebagaiPOST
metode oleh penciptanya. Jika anda melakukannya anda mungkin punya405 Metode tidak diizinkan
status.Umumnya di
POSTING
metode yang anda butuhkan untuk mengirim konten ke dalam tubuh dengan format tertentu yang dijelaskan dalamcontent-type
header untuk ex.application/json
untuk data json.Dan setelah itu permintaan tubuh akan deserialized di server akhir. Jadi, anda perlu untuk lulus serial data dari klien dan hal ini diputuskan oleh pengembang layanan.
Tapi secara umum istilah
MENDAPATKAN
digunakan ketika server mengembalikan beberapa data untuk klien dan tidak memiliki dampak apapun pada server sedangkanPOST
digunakan untuk membuat beberapa sumber daya pada server. Sehingga umumnya tidak harus sama.Berpikir tentang hal itu. Ketika klien anda membuat MENDAPATKAN permintaan untuk sebuah URI X, apa itu's mengatakan ke server adalah: "aku ingin sebuah representasi dari resource yang terletak di X, dan operasi ini seharusnya't perubahan apa pun pada server." permintaan PUT mengatakan: "saya ingin anda untuk mengganti apapun adalah sumber daya yang terletak di X dengan entitas baru saya'm memberikan anda pada tubuh ini permintaan". HAPUS permintaan berkata: "saya ingin anda untuk menghapus apapun adalah sumber daya yang terletak di X". PATCH ini mengatakan "aku'm memberikan anda diff ini, dan anda harus mencoba untuk menerapkannya ke sumber daya di X dan memberitahu saya jika itu berhasil." Tapi POST mengatakan: "aku'm mengirimkan data ini subordinasi ke sumber daya di X, dan kami memiliki kesepakatan sebelumnya pada apa yang harus anda lakukan dengan itu."
Jika anda don't memilikinya didokumentasikan di suatu tempat bahwa sumber daya mengharapkan POS dan melakukan sesuatu dengan itu, itu doesn't masuk akal untuk mengirim POSTING ke mengharapkan untuk bertindak seperti MENDAPATKAN.
SISANYA bergantung pada standar perilaku yang mendasari protokol, dan POSTING lebih tepatnya metode yang digunakan untuk tindakan yang isn't standar. Hasil dari GET, PUT dan DELETE permintaan yang jelas dalam standar, tapi POSTING isn't. Hasil dari POST subordinasi ke server, jadi jika itu's tidak terdokumentasi yang dapat anda gunakan POST untuk melakukan sesuatu, anda harus berasumsi bahwa anda dapat't.
Itu bagus bahwa SISANYA membawa makna verba HTTP (seperti yang didefinisikan) tapi aku lebih memilih untuk setuju dengan Scott Peal.
Di sini juga item dari WIKI's diperpanjang penjelasan pada request POST:
Saya hanya bisa menyarankan kepada SELURUH tim untuk mempertimbangkan lebih aman menggunakan protokol HTTP untuk menghindari membuat konsumen perjuangan dengan non-aman "praktek yang baik".
Di SISA, masing-masing HTTP verba memiliki tempat dan makna.
Misalnya,
DAPATKAN adalah untuk mendapatkan 'sumber daya(s)' yang menunjuk pada alamat URL.
POST ini adalah untuk instruktur backend untuk 'buat' sumber daya dari 'jenis' menunjuk ke dalam URL. Anda dapat melengkapi POST operasi dengan parameter atau data tambahan pada tubuh POST panggilan.
Dalam kasus anda, karena anda tertarik 'mendapatkan' info menggunakan query, sehingga harus MENDAPATKAN operasi bukan POST operasi.
Ini wiki dapat membantu untuk lebih memperjelas hal-hal.
Harap ini membantu!
POSTING ini berlaku untuk menggunakan bukan DAPATKAN jika anda memiliki alasan tertentu untuk melakukannya dan proses itu dengan benar. Saya mengerti itu's tidak secara khusus RESTy, tetapi jika anda memiliki banyak ruang dan ampersands dan garis miring dan sebagainya dalam data anda [misalnya model produk seperti Amazon] kemudian mencoba untuk encode dan decode ini dapat menjadi masalah lebih dari itu's bernilai bukan hanya pra-jsonifying itu. Pastikan meskipun bahwa anda mengembalikan kode respon yang tepat dan banyak komentar apa yang anda're lakukan karena itu's tidak khas use case dari POS.