2012-12-02 5 views
21

कोडिंग समय में स्पष्ट लाभ के कारण बस breeze.js के साथ खेलना शुरू कर रहा है, यानी जावास्क्रिप्ट के भीतर सीधे सर्वर से मॉडल डेटा तक पहुंचने के लिए प्रबंधन करना (मैं यहां एक नौसिखिया हूं, इसलिए स्पष्ट रूप से बेयर!)।विंडज का उपयोग कर जावास्क्रिप्ट में क्वेरी जानकारी रखना खतरनाक नहीं है?

अतीत में मैंने सर्वर पर डेटा प्राप्त करने/पोस्ट करने के लिए स्टॉक AJAX कॉल का उपयोग किया है, और मैंने jLinq जैसे स्थानीय डेटा पूछने में कुछ सहायता प्रदान करने के लिए अतीत में कुछ अलग-अलग क्लाइंट टूल का उपयोग किया है।

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

धन्यवाद!

संपादित जाहिर है मैं केवल एक, नहीं कर रहा हूँ लेकिन मैं वहाँ एक उचित प्रतिक्रिया है अनुमान लगा रहा हूँ - शायद सीमित डेटा डीटीओ तरीकों या कुछ का उपयोग कर अनुरोध किया जा रहा? The other question posted is here

+0

किस तरह से खतरनाक? क्या आपके मॉडल में संवेदनशील डेटा है जो क्लाइंट के सामने नहीं आना चाहिए? – David

उत्तर

14

पूर्ण व्यापार मॉडल का खुलासा करना खतरनाक हो सकता है। मॉडल के उस हिस्से के अनियंत्रित पूछताछ की अनुमति देना खतरनाक हो सकता है जिसे आप क्लाइंट को बेनकाब करना चाहते हैं। यह सच है कि आप एक आसान-से-क्वेरी API या किसी को पूछना मुश्किल है या नहीं।

यही कारण है कि हमारी टीम इस बारे में सावधान हैं कि हम अपनी सेवाओं का निर्माण कैसे करते हैं।

आपको केवल अपने क्लाइंट ऐप की ज़रूरतों का खुलासा करना चाहिए। यदि आप किसी प्रकार के अधिकृत उदाहरणों तक पहुंच सीमित करना चाहते हैं, तो आप ध्यान से निर्धारित गैर-क्वेरी योग्य सेवा विधियां लिख सकते हैं। ब्रीज़ उन्हें ठीक कह सकता है। आपको प्रत्येक अनुरोध के लिए ब्रीज़ क्वेरी सुविधाओं का उपयोग करने की आवश्यकता नहीं है।आपको अभी भी कैशिंग, संबंधित-इकाई-नेविगेशन, परिवर्तन-ट्रैकिंग, सत्यापन, सेव-बंडलिंग, कैश-क्वेरीिंग, ऑफ़लाइन समर्थन से लाभ होगा।

दोहराना: आपकी सेवा विधियों को IQueryable वापस नहीं करना है। यहां तक ​​कि जब वे IQueryable लौटाते हैं, तो आप क्वेरी परिणामों को केवल उन संस्थाओं को सीमित करने के लिए सेवा विधि लिख सकते हैं जिन्हें उपयोगकर्ता देखने के लिए अधिकृत है।

सौभाग्य से, आप एक ही सेवा में या सहयोग सेवाओं में दो दृष्टिकोणों को मिश्रित कर सकते हैं।

ब्रीज़ आपको विकल्प देता है। समझदारी से उन विकल्पों का प्रयोग करने के लिए आप पर निर्भर है। वहां जाएं और अपनी आवश्यकताओं को पूरा करने के लिए अपनी सेवाओं को डिज़ाइन करें।

+2

जितना अधिक मैं हवा का पता लगाता हूं और स्पष्ट रूप से उपरोक्त उन टिप्पणियों को लागू करता हूं (जो चेहरे को आम तौर पर सामान्य समझ में आता है - दुनिया के चक्रवात दृश्य के रूप में तकनीकी समाधानों को "देखना" आसान है!) जितना अधिक मुझे एक अस्पष्ट गर्म महसूस होता है अंत में ब्राउज़र और सर्वर की दुनिया अंत में एक साथ लाया जा रहा है :) –

4

ब्रीज़ उस अर्थ में आपके व्यवसाय तर्क के लिए नहीं है। अंगूठे के नियम को ध्यान में रखते हुए कि यदि आप जावास्क्रिप्ट में कुछ करते हैं, तो कोई भी ऐसा कर सकता है, आपको आवश्यकतानुसार अपने स्वयं के सेवा डेटा की दृश्यता को सीमित करना होगा।

दूसरे शब्दों में, यदि आप डेटा को सार्वजनिक रूप से दृश्यमान बनाना चाहते हैं तो यह आपके लिए उपयोगी है। लेकिन केवल उन्हीं संस्थाओं का पर्दाफाश करें जिन्हें आप खुश कर रहे हैं और किसी को भी पूछने की इजाजत दे रहे हैं; इसे देखने का एक और तरीका यह है कि आपकी एपीआई आपकी वेबसाइट के लिए एक सार्वजनिक एपीआई बन जाती है (लेकिन आप विज्ञापन नहीं करते हैं और सभी को उपयोग करने के लिए कहते हैं)।

मैं व्यक्तिगत रूप से चीजों को करने के प्रशंसक नहीं हूं क्योंकि बैकएंड कार्यान्वयन की स्कीमा पर निर्भरता निर्भर है। अगर मैं अपने डेटाबेस टेबल में बदलाव करना चाहता हूं, तो अब मुझे अपनी जावास्क्रिप्ट को ध्यान में रखना होगा। मुझे एकीकरण और इकाई परीक्षण के मामले में भी कमी है।

हालांकि, यदि आप सेवा विधियों और इसके कार्यान्वयन की विभिन्न परतों के निर्माण के बिना गैर-संवेदनशील डेटा पर वेबसाइट सुविधा को त्वरित रूप से बनाना चाहते हैं, तो इसका उपयोग हो सकता है।

+0

अरे अच्छी प्रतिक्रिया, धन्यवाद। मुझे लगता है कि मैं उसी पथ के साथ सोच रहा था: केवल उस डेटा को उजागर करना जो आप वास्तव में चाहते हैं यानी यदि आपके मॉडल में गुणों का एक गुच्छा था, जिसमें आइटम को बाहरी रूप से दिखाई नहीं दे रहा है, तो केवल उन तत्वों को स्थानांतरित करने के लिए डीटीओ का उपयोग करना जो आप दिखाना चाहते हैं । मुझे लगता है कि अगर मैं कुछ याद कर चुका था, तो मैं बस कुछ पुष्टि प्राप्त करना चाहता था, इसलिए प्रतिक्रिया के लिए फिर से धन्यवाद। –

+4

आप निश्चित रूप से केवल अपने वेब एपीआई में डीटीओ के माध्यम से जो चाहते हैं उसे बेनकाब कर सकते हैं, फिर ब्रीज़ केवल उन लोगों को प्राप्त कर सकता है। मुझे लगता है कि आपके डीबी परिवर्तनों का विषय वास्तव में पानी को पकड़ नहीं लेता है। यदि आप किसी तालिका में कोई फ़ील्ड जोड़ते हैं, तो आपको अपने व्यावसायिक मॉडल में कुछ कोड अपडेट करना होगा। आप डीटीओ को अपडेट नहीं करना चुन सकते हैं और फिर परिवर्तन जावास्क्रिप्ट को बिल्कुल प्रभावित नहीं करेंगे। तो अलगाव पैटर्न के साथ इसके आसपास के तरीके हैं। –

+0

मुझे लगता है कि यह पानी पकड़ता है; डीबी परिवर्तन केवल एक तालिका में एक स्तंभ जोड़ने के लिए ही सीमित नहीं हैं। आप एक कॉलम को हटा सकते हैं, टेबल ले जा सकते हैं, टेबल विभाजित कर सकते हैं, डीबी प्रदाताओं को बदल सकते हैं। अगर मेरे पास एक एपीआई है, तो मैं अलगाव रखना चाहता हूं ताकि कोई स्कीमा परिवर्तन क्लाइंट को प्रभावित न करे। यह केवल तभी होता है जब मेरे इंटरफ़ेस अनुबंध को एक बदलाव की आवश्यकता होती है जिसे मैं एपीआई संस्करण से खुश हूं और ग्राहक को सूचित करता हूं। यह अलगाव है कि क्लाइंट-साइड क्वेरी मॉडल मुश्किल बनाता है। – Mendhak

4

जब आप मेटाडेटा का पर्दाफाश करते हैं तो क्या होगा? क्या यह खतरनाक नहीं माना जाता है। आईएमएचओ डीबीकॉन्टेक्स्ट से मेटाडेटा का पर्दाफाश करने के लिए सुरक्षित नहीं है। मुझे पता है कि आप क्लाइंट पर मेटाडेटा बना सकते हैं, लेकिन बिंदु जितनी जल्दी हो सके चीजें करना है (अगर सुरक्षित है)।

+1

मेटाडाटा खतरनाक क्या बनाता है? आपके सभी सुरक्षा जोखिमों के बीच सूचना रैंक कहां टाइप करता है? वैसे तो कम जोखिम को कम करना सबसे अच्छा है यदि आप कार्यक्षमता समझौता किए बिना उचित लागत पर ऐसा कर सकते हैं। सौभाग्य से, यह बहुत आसान डब्ल्यू/आर/टी प्रकार की जानकारी है। आपको अपने पूरे व्यावसायिक मॉडल का खुलासा नहीं करना है, केवल क्लाइंट पर ही अनुमति दी गई है। उन प्रकारों तक सीमित करना आपके क्लाइंट एप्लिकेशन मॉडल का समर्थन करने के लिए डीबीकॉन्टेक्स्ट की सतह को सीमित करने जितना आसान हो सकता है। और यदि ऑब्जेक्ट क्लाइंट पर मौजूद है, तो मेटाडेटा आपको बताता है कि क्लाइंट पर ऑब्जेक्ट नहीं है? – Ward

संबंधित मुद्दे