Saya sedang mengerjakan program server klien kecil untuk mengumpulkan pesanan. Saya ingin melakukan ini dengan "REST (ful) way".
Yang ingin saya lakukan adalah:
Kumpulkan semua orderlines (produk dan kuantitas) dan kirim pesanan lengkap ke server
Saat ini saya melihat dua opsi untuk melakukan ini:
- Kirim setiap baris pesanan ke server: POST qty dan product_id
Saya sebenarnya tidak ingin melakukan ini karena saya ingin membatasi jumlah permintaan ke server jadi opsi 2:
- Kumpulkan semua orderlines dan kirimkan ke server sekaligus.
Bagaimana cara menerapkan opsi 2? beberapa ide yang saya miliki adalah: Bungkus semua orderlines dalam objek JSON dan kirim ini ke server atau gunakan array untuk memposting orderlines.
Apakah itu ide yang baik atau praktik yang baik untuk menerapkan opsi 2, dan jika demikian, bagaimana saya harus melakukannya.
Apa praktik yang baik?
/api/book-group
,/api/book-collection
atau yang serupa.Meskipun operasi massal (misalnya pembuatan batch) sangat penting dalam banyak sistem, operasi tersebut tidak secara formal ditangani oleh gaya arsitektur RESTful.
Saya menemukan bahwa POST koleksi seperti yang Anda sarankan pada dasarnya berfungsi, tetapi masalah muncul saat Anda perlu melaporkan kegagalan sebagai tanggapan atas permintaan semacam itu. Masalah seperti itu menjadi lebih buruk ketika beberapa kegagalan terjadi karena penyebab yang berbeda atau ketika server tidak mendukung transaksi. Saran saya untuk Anda adalah jika tidak ada masalah kinerja, misalnya ketika penyedia layanan di LAN (bukan WAN) atau datanya relatif kecil, ada baiknya untuk mengirim 100 permintaan POST ke server. Sederhanakan, mulailah dengan permintaan terpisah dan jika Anda mengalami masalah kinerja, coba optimalkan.
sumber
Facebook menjelaskan bagaimana melakukan ini: https://developers.facebook.com/docs/graph-api/making-multiple-requests
sumber
Ide Anda tampaknya valid bagi saya. Penerapannya tergantung pada preferensi Anda. Anda dapat menggunakan JSON atau hanya parameter untuk ini (array "order_lines []") dan lakukan
Karena Anda akan membuat lebih banyak sumber daya sekaligus dalam satu tindakan (urutan dan barisnya), penting untuk memvalidasi masing-masing dan semuanya dan menyimpannya hanya jika semuanya lulus validasi, yaitu. Anda harus melakukannya dalam transaksi.
sumber
Saya kira lebih baik mengirim permintaan terpisah dalam satu koneksi . Tentu saja, server web Anda harus mendukungnya
sumber
Saya sebenarnya bergulat dengan ini akhir-akhir ini, dan inilah yang sedang saya upayakan.
Jika POST yang menambahkan banyak sumber daya berhasil, kembalikan 200 OK (saya mempertimbangkan 201, tetapi pengguna pada akhirnya tidak mendarat di sumber daya yang dibuat) bersama dengan halaman yang menampilkan semua sumber daya yang ditambahkan, baik dalam membaca mode -hanya atau diedit. Misalnya, pengguna dapat memilih dan POST beberapa gambar ke galeri menggunakan formulir yang hanya terdiri dari satu input file. Jika permintaan POST berhasil secara keseluruhan, pengguna disajikan dengan satu set formulir untuk setiap representasi sumber gambar yang dibuat yang memungkinkan mereka untuk menentukan detail lebih lanjut tentang masing-masing (nama, deskripsi, dll).
Jika satu atau lebih sumber daya gagal dibuat, penangan POST membatalkan semua pemrosesan dan menambahkan setiap pesan kesalahan individu ke larik. Kemudian, 419 Konflik dikembalikan dan pengguna diarahkan ke halaman kesalahan 419 Konflik yang menyajikan konten dari array kesalahan, serta cara kembali ke formulir yang telah dikirimkan.
sumber
Anda tidak ingin mengirim header HTTP untuk 100 baris pemesanan. Anda tidak ingin membuat permintaan lebih dari yang diperlukan.
Kirim seluruh pesanan dalam satu objek JSON ke server, ke: server / order atau server / order / baru. Kembalikan sesuatu yang mengarah ke: server / order / order_id
Pertimbangkan juga untuk menggunakan
CREATEPUT daripada POSTsumber