Dalam aplikasi yang saya bangunkan, kami mahu pelanggan menghantar data dalam format JSON, jadi saya sedang membangunkan API RESTful. Sebahagian daripada aplikasi memerlukan pelanggan untuk memuat naik fail (biasanya imej), bersama-sama dengan maklumat tentang imej.
Saya menghadapi masalah menjejaki cara untuk mencapai ini dalam satu permintaan. Adakah mungkin untuk Base64 mengekod data fail ke dalam rentetan JSON? Adakah saya perlu melaksanakan dua permintaan POST kepada pelayan? Bukankah saya sepatutnya menggunakan JSON untuk mengendalikan ini?
Selain itu, kami menggunakan Grails pada bahagian belakang, dan perkhidmatan ini boleh diakses oleh pelanggan mudah alih asli (iPhone, Android, dll.), jika maklumat itu berbeza.
Anda boleh menggunakan jenis kandunganmultipart/form-datauntuk menghantar fail dan data dalam satu permintaan:
Darihttp://www.faqs.org/rfcs/rfc2388.html:
Anda boleh memasukkan maklumat fail atau maklumat medan dalam setiap bahagian antara setiap sempadan. Saya telah berjaya melaksanakan perkhidmatan RESTful yang memerlukan pengguna menyerahkan data dan borang, multipart/form-data berfungsi dengan sempurna. Perkhidmatan ini dibina menggunakan Java/Spring dan pelanggan menggunakan C#, jadi malangnya saya tidak mempunyai contoh Grails untuk memberi anda cara menyediakan perkhidmatan. Dalam kes ini, anda tidak perlu menggunakan JSON kerana setiap bahagian "data borang" memberi anda tempat untuk menentukan nama parameter dan nilainya.
Kelebihan menggunakan data berbilang bahagian/bentuk ialah anda menggunakan pengepala yang ditakrifkan oleh HTTP, jadi anda mengikuti falsafah REST menggunakan alat HTTP sedia ada untuk mencipta perkhidmatan.
Saya bertanya soalan yang sama di sini:
Bagaimana untuk memuat naik fail dengan metadata menggunakan perkhidmatan web REST?
Anda pada asasnya mempunyai tiga pilihan:
multipart/form-data
dan kembalikan ID kepada pelanggan. Pelanggan kemudiannya menghantar metadata menggunakan ID tersebut dan pelayan mengaitkan semula fail dan metadata.