जबकि रेखा कुछ धुंधली है, मेरे लिए अंगूठे का एक नियम है: डेटा जो आपके व्यावसायिक तर्क पर काम करता है वह शरीर में होना चाहिए, मेटाडेटा कर सकते हैं / हेडर में रखा जाना चाहिए।
इसे देखने का एक और तरीका है: जो डेटा केवल विशिष्ट प्रकार के अनुरोधों में दिखाई देता है वह शरीर में होना चाहिए जबकि डेटा जो पूरे एप्लिकेशन में लगातार संभाला जाता है उसे हेडर में जाना चाहिए।
फिर भी एक और दृष्टिकोण है: क्या आप सोच सकते हैं कि डेटा का एक टुकड़ा आपके अनुप्रयोग के बजाय एक राउटर / फ़ायरवॉल द्वारा विश्व स्तर पर संभाला जाता है? यदि हाँ, तो यह शरीर में नहीं बल्कि हेडर में जाना चाहिए।
इन नियमों को लागू करने के कुछ उदाहरण होंगे:
- सुरक्षा क्रेडेंशियल्स हेडर में जाते हैं क्योंकि संभवत: उन्हें एक आवेदन के सभी स्थानों में समान रूप से नियंत्रित किया जाएगा; कार्यान्वयन के स्तर पर, संभवत: कुछ मान्य फ़िल्टर होंगे जो मान्य क्रेडेंशियल्स के बिना अनुरोधों को अस्वीकार करते हुए वास्तविक समापन बिंदु की परवाह किए बिना अनुरोध को संभालते हैं यदि यह फ़िल्टर के माध्यम से प्राप्त होता है।
- यदि, दूसरी ओर, आपके पास एक समापन बिंदु है जो एक व्यवस्थापक को आपके सिस्टम में उपयोगकर्ताओं को जोड़ने की अनुमति देता है, तो बनाए जाने वाले उपयोगकर्ता का लॉगिन अनुरोध निकाय में होना चाहिए: क) यह आपके आवेदन के व्यापार तर्क द्वारा नियंत्रित किया जाता है, बी) यह इस विशेष समापन बिंदु में दिखाई देता है लेकिन दूसरों में नहीं।
- कैशिंग को नियंत्रित करने वाले विकल्प हेडर में अच्छी तरह से फिट हो सकते हैं (जब तक कि कैशिंग आपके एप्लिकेशन के व्यावसायिक तर्क का एक मुख्य हिस्सा नहीं है)।
अद्वितीय डिवाइस आईडी के बारे में अपने प्रश्न पर वापस जाएं: यदि यह हर जगह एक सुसंगत तरीके से उपयोग किया जाता है, उदाहरण के लिए केवल लॉगिंग के लिए, इसे हेडर में डाला जा सकता है। लेकिन अगर यह समापन बिंदु के आधार पर विभिन्न तरीकों से अनुरोधों को फ़िल्टर करने के लिए उपयोग किया जाता है, तो यह शरीर में बेहतर होगा। बेशक, यदि आपके पास दोनों उपयोग के मामले हैं, तो संभवतः यह संभव है कि इसे पारित करने का एक ही तरीका (शायद हेडर) एक ही डेटा को दो स्थानों पर डालने के लिए एपीआई उपयोगकर्ता को मजबूर करने के बजाय आपको या तो अनुमति देने की दुविधा दे। असंगत इनपुट या किसी प्रकार का सत्यापन लागू करना।