हम REST API के साथ सर्वर विकसित कर रहे हैं, जो JSON के साथ स्वीकार और प्रतिक्रिया करता है। समस्या यह है, अगर आपको क्लाइंट से सर्वर पर चित्र अपलोड करने की आवश्यकता है।
नोट: और यह भी कि मैं एक ऐसे उपयोग-मामले के बारे में बात कर रहा हूँ जहाँ इकाई (उपयोगकर्ता) में कई फाइलें (carPhoto, लाइसेंस-फोटो) हो सकती हैं और अन्य गुण (नाम, ईमेल ...) भी हो सकते हैं, लेकिन जब आप नया उपयोगकर्ता बनाते हैं, तो आप डॉन टी इन छवियों को भेजते हैं, उन्हें पंजीकरण प्रक्रिया के बाद जोड़ा जाता है।
जिन समाधानों से मैं अवगत हूं, लेकिन उनमें से प्रत्येक में कुछ खामियां हैं
1. JSON के बजाय मल्टीपार्ट / फॉर्म-डेटा का उपयोग करें
अच्छा : POST और PUT अनुरोध जितना संभव हो उतना Restful हैं, वे फ़ाइल के साथ पाठ इनपुट शामिल कर सकते हैं।
विपक्ष : यह अब JSON नहीं है, जो मल्टीगार्ट / फॉर्म-डेटा की तुलना में परीक्षण, डिबग आदि के लिए बहुत आसान है
2. अलग फ़ाइलों को अद्यतन करने की अनुमति दें
नए उपयोगकर्ता बनाने के लिए POST अनुरोध छवियों को जोड़ने की अनुमति नहीं देता है (जो हमारे उपयोग के मामले में ठीक है कि मैंने शुरुआत में कैसे कहा था), चित्रों को अपलोड करना उदाहरण के लिए मल्टीपार्ट / फॉर्म-डेटा के रूप में / उपयोगकर्ताओं / 4 / carPhoto द्वारा अनुरोध किया जाता है
अच्छा : सब कुछ (फ़ाइल अपलोडिंग को छोड़कर) JSON में ही रहता है, परीक्षण करना आसान है और डीबग (आप अपनी लंबाई से डर के बिना JSON के अनुरोधों को पूरा कर सकते हैं)
विपक्ष : यह सहज नहीं है, आप POST या PUT के सभी वैरिएबल को एक ही बार में कैंट /users/4/carPhoto
कर सकते हैं और इस पते को एक संग्रह के रूप में अधिक माना जा सकता है (REST API के लिए मानक उपयोग-केस इस तरह दिखता है /users/4/shipments
)। आमतौर पर आप (और न चाहते हैं) इकाई के प्रत्येक चर को प्राप्त / प्राप्त कर सकते हैं, उदाहरण के लिए उपयोगकर्ता / 4 / नाम। आप GET के साथ नाम प्राप्त कर सकते हैं और इसे PUT के साथ उपयोगकर्ताओं / 4 में बदल सकते हैं। यदि आईडी के बाद कुछ है, तो यह आमतौर पर उपयोगकर्ताओं / 4 / समीक्षाओं की तरह एक और संग्रह है
3. बेस 64 का उपयोग करें
इसे JSON के रूप में भेजें लेकिन Base64 के साथ फ़ाइलों को एन्कोड करें।
अच्छा : पहले समाधान के रूप में ही, यह यथासंभव सेवा है।
विपक्ष : एक बार फिर, परीक्षण और डिबगिंग बहुत खराब है (शरीर में मेगाबाइट डेटा हो सकता है), आकार में वृद्धि और प्रसंस्करण समय दोनों में भी है - क्लाइंट और सर्वर
मैं वास्तव में समाधान सं का उपयोग करना चाहूंगा। 2, लेकिन यह अपने विपक्ष है ... कोई भी मुझे "सबसे अच्छा क्या है" समाधान की बेहतर जानकारी दे सकता है?
मेरा लक्ष्य रेस्टफुल सेवाओं को यथासंभव अधिक मानकों के साथ रखना है, जबकि मैं इसे यथासंभव सरल रखना चाहता हूं।