Kami sedang mengembangkan server dengan REST API, yang menerima dan merespons dengan JSON. Masalahnya adalah, jika Anda perlu mengunggah gambar dari klien ke server.
Catatan: dan juga saya berbicara tentang kasus penggunaan di mana entitas (pengguna) dapat memiliki beberapa file (carPhoto, licensePhoto) dan juga memiliki properti lainnya (nama, email ...), tetapi ketika Anda membuat pengguna baru, Anda tidak dapat mengirim gambar-gambar ini, mereka ditambahkan setelah proses pendaftaran.
Solusi yang saya sadari, tetapi masing-masing memiliki beberapa kekurangan
1. Gunakan multipart / form-data alih-alih JSON
Bagus : Permintaan POST dan PUT senyap mungkin, mereka dapat berisi input teks bersama dengan file.
kontra : Ini bukan JSON lagi, yang jauh lebih mudah untuk menguji, men-debug dll. dibandingkan dengan multipart / form-data
2. Izinkan untuk memperbarui file yang terpisah
Permintaan POST untuk membuat pengguna baru tidak memungkinkan untuk menambahkan gambar (yang ok dalam kasus penggunaan kami seperti yang saya katakan di awal), mengunggah gambar dilakukan dengan permintaan PUT sebagai multipart / formulir-data ke misalnya / pengguna / 4 / carPhoto
bagus : Semuanya (kecuali mengunggah file itu sendiri) tetap di JSON, mudah untuk menguji dan men-debug (Anda dapat mencatat permintaan JSON lengkap tanpa takut panjangnya)
kontra : Ini tidak intuitif, Anda tidak bisa POST atau PUT semua variabel entitas sekaligus dan alamat ini /users/4/carPhoto
dapat dianggap lebih sebagai koleksi (kasus penggunaan standar untuk REST API terlihat seperti ini /users/4/shipments
). Biasanya Anda tidak dapat (dan tidak mau) DAPATKAN / PUT setiap variabel entitas, misalnya pengguna / 4 / nama. Anda bisa mendapatkan nama dengan GET dan mengubahnya dengan PUT di pengguna / 4. Jika ada sesuatu setelah id, biasanya koleksi lain, seperti pengguna / 4 / ulasan
3. Gunakan Base64
Kirim sebagai JSON tetapi menyandikan file dengan Base64.
Bagus : Sama seperti solusi pertama, ini adalah layanan yang tenang.
Kontra : Sekali lagi, pengujian dan debugging jauh lebih buruk (tubuh dapat memiliki megabita data), ada peningkatan ukuran dan juga dalam waktu pemrosesan di kedua - klien dan server
Saya benar-benar ingin menggunakan solusi no. 2, tetapi memiliki kontra ... Adakah yang bisa memberi saya wawasan yang lebih baik tentang solusi "apa yang terbaik"?
Tujuan saya adalah memiliki layanan tenang dengan standar sebanyak mungkin, sementara saya ingin membuatnya sesederhana mungkin.