मैं कुछ ByteString
क्लाइंट (ब्राउज़र) पर वापस रिले करने की कोशिश कर रहा हूं। क्लाइंट को अनुरोध किए जा रहे दस्तावेज़ के सामग्री-प्रकार को नहीं पता होगा, इसलिए मैं क्लाइंट को उचित सामग्री-प्रकार प्रतिक्रिया भेजने की कोशिश कर रहा हूं। दस्तावेज़ एक छवि या पीडीएफ या शब्द दस्तावेज़, आदि हो सकता हैनौकरियों में जेनेरिक सामग्री-प्रकार भेजना
उदाहरण के लिए, ग्राहक /document?id=55
का अनुरोध करेगा और सर्वर उचित सामग्री-प्रकार और संबंधित ByteString
से प्रतिक्रिया देगा।
मैंने उदाहरण here का पालन किया: और मैंने एक छवि के लिए कुछ बनाया।
data IMAGE
instance Accept IMAGE where
contentType _ = "image" M.// "jpeg"
instance MimeRender IMAGE LBS.ByteString where
mimeRender _ = id
चुनौती ग्राहक कुछ विशिष्ट Accept:
हेडर के साथ अनुरोध भेजने नहीं किया जाएगा तो वहाँ मुझे एक उचित माइम प्रकार के साथ जैसे कि यह here किया जाता है प्रतिक्रिया करने के लिए के लिए कोई रास्ता नहीं है। इसके अलावा उपर्युक्त केवल छवियों के लिए काम करेगा (मानते हैं कि ब्राउज़र png
का अनुमान लगाएंगे, यहां तक कि मैं jpeg
वापस भेजता हूं) लेकिन pdf
, docx
आदि के लिए नहीं।
मैं MyDynamicContent String
की तरह एक paramaterized प्रकार के बारे में सोचा और मैं रन-टाइम में सामग्री प्रकार में पारित करेंगे लेकिन मुझे यकीन है कि मैं अपने एपीआई जैसे कि, क्या मैं '[JSON]
के बजाय का उपयोग करेगा कैसे घोषणा करेंगे नहीं हूँ। निश्चित नहीं है कि ऐसी चीज भी संभव है क्योंकि उदाहरण सिर्फ एक साधारण डेटाटाइप हैं।
तो मेरी सवाल है, अगर मैं एक प्रतिक्रिया के रूप में कुछ ByteString
भेजने और Content-Type
हैडर गतिशील निर्धारित करते हैं, क्या सबसे अच्छा तरीका यह करने के लिए उपयोग कर रहा servant
अपडेट हो जाएगा चाहते हैं: मैं एक issue खोला है
सर्वर कैसे तय करता है कि किस सामग्री-प्रकार का जवाब देना है? (विशेष रूप से, केवल यह सुनिश्चित करने के लिए, यह स्थिर रूप से निर्धारित नहीं किया जा सकता है?) – user2141650
@ user2141650: 'सर्वर' को डेटास्टोर (एक दस्तावेज़ स्टोर सेवा) से यह जानकारी मिलती है। यह सेवा को कॉल करता है और सेवा सामग्री-प्रकार और बाइट स्ट्रिंग के साथ प्रतिक्रिया देती है। मुझे पता है कि मैं प्रत्येक सामग्री-प्रकार (या अधिकांशतः उपयोग किए जाने वाले लोगों) के लिए एक अंतिम बिंदु बना सकता हूं और पहले सामग्री-प्रकार भेज सकता हूं और फिर ग्राहक को सामग्री-प्रकार से संबंधित अंतिम बिंदु का उपयोग करने के लिए कह सकता हूं। यह इतना बुरा हैक है, इस तर्क को क्लाइंट में ले जा रहा है, मुझे लगता है कि इसे सर्वर द्वारा बेहतर तरीके से संभाला जाना चाहिए। – Ecognium