2010-07-21 22 views
10

मैं रीस्टफुल वेब सेवाओं के लिए नया हूं। हम अपने सार्वजनिक वेब सेवाओं को उपभोक्ताओं द्वारा उपभोग करने के लिए आरईएसटी मार्ग ले रहे हैं। और मेरे पास कुछ प्रश्न थे।रीस्टफुल वेब सेवाएं

क्या शुद्ध रीस्ट वेब सेवाओं के साथ कोई सीमा है? और यदि हां तो एक संकर REST वेब सेवा उन सीमाओं का ख्याल रखेगी?

मैं आईपी आधारित आधारित फ़िल्टरिंग के साथ सुरक्षा के लिए प्राधिकरण शीर्षलेख में एसएसएल + हैश संदेश प्रमाणीकरण कोड (एचएमएसी) का उपयोग करने के बारे में सोच रहा हूं। तुम लोगों को इसके बारे में क्या सोचते हैं?

क्या परीक्षण के लिए कोई अच्छा ग्राहक पक्ष उपकरण है? वर्तमान में मैं निम्नलिखित http://code.google.com/p/rest-client/

और किसी प्रकार के क्लाइंट साइड कोड जनरेशन टूल के बारे में क्या उपयोग कर रहा हूं?

निम्नलिखित लिंक जानकारी का मेरा स्रोत हैं।

http://msdn.microsoft.com/en-us/library/dd203052.aspx

http://blogs.msdn.com/b/endpoint/archive/2010/01/07/getting-started-with-wcf-webhttp-services-in-net-4.aspx

उत्तर

5

यह एक WCF बाकी WebService का एक अच्छा प्रारंभिक बिंदु है:

REST/SOAP endpoints for a WCF service

: तुम सिर्फ एक वेब ब्राउज़र के साथ एक बाकी सेवा का परीक्षण कर सकते हैं ((btw। Stackoverflow यूआरएल की अच्छा बाकी तरह है) यूआरएल पर जाएं और एक्सएमएल या जेएसओएन प्राप्त करें)। फिडलर भी एक अच्छा उपकरण है, और फायरफॉक्स के लिए फायरबग-प्लगइन है। मैं आमतौर पर एक पतली सेवा-इंटरफ़ेस प्रोजेक्ट और एक अलग (इकाई-परीक्षण) लॉजिक-प्रोजेक्ट बनाता हूं।

प्रमाणीकरण के लिए मैं पहले एक ग्रिड और टाइमस्टैम्प उत्पन्न करता हूं। फिर उन हैंश पर आधारित (.NET SHA256 और SHA512 का समर्थन करता है)। ग्रिड को कुछ ठोस संख्यात्मक आईडी मैप करने के लिए सर्वर (डेटाबेस तालिका) में संग्रहीत किया जा सकता है। तो फिर आप की तरह एक आराम यूआरएल हो सकता है:

/myobject/1?timestamp=20100802201000&hash=4DR7HGJPRE54Y 

और बस (AOP के साथ उदा) विकास के वातावरण में हैश & टाइमस्टैम्प जाँच अक्षम करें। टाइमस्टैम्प के साथ मैं जांचता हूं कि टिकट 15 मिनट पहले और समय में आगे है (= हमलों को रोकने के लिए पर्याप्त होना चाहिए)।

आपकी सेवा सार्वजनिक/इंटरनेट को दिखाई और अपने ग्राहक एक jQuery या Silverlight -client है जाएगा? फिर भी आपको कोई समस्या है: आप क्लाइंट सॉफ़्टवेयर कोड में एक गुप्त कुंजी शामिल नहीं करना चाहते हैं।

तो आपको क्लाइंट सत्र को स्टोर करने के लिए सर्वर में हैश और किसी प्रकार की कुकी उत्पन्न करने की आवश्यकता है। (ऐसा किया जा सकता है उदाहरण के लिए अलग-अलग कॉन्फ़िगर-फ़ाइल वाले फ़ोल्डर में एक अलग लॉगिन-पेज/एप्लिकेशन के साथ।) मुझे याद है कि this book इस विषय पर कुछ था:

यदि आप WCF का उपयोग करते समय HttpContext को सक्षम करना चाहते हैं, आपको <system.serviceModel> के तहत <serviceHostingEnvironment aspNetCompatibilityEnabled="true"> सेट करने की आवश्यकता है। फिर आप वर्तमान उपयोगकर्ता पहचान HttpContext.Current.User.Identity.Name से देख सकते हैं।

हालांकि, अगर आप एक शुद्ध बाकी सेवा करना चाहते हैं तो आप कुकीज़ का उपयोग नहीं है, लेकिन एक बुनियादी HTTP प्रमाणीकरण एसएसएल के साथ मिलकर/प्रत्येक कॉल के लिए टीएलएस।

मुझे लगता है कि यह सिर्फ LINQ2Xml या jQuery तो शायद ग्राहक पीढ़ी की जरूरत नहीं है के साथ एक ग्राहक बनाने के लिए आसान है।

या आप भी दोनों, एक सोप और एक REST इंटरफ़ेस हो सकता है, और एक ग्राहक बनाने के लिए एक सेवा संदर्भ का उपयोग करें।

+0

मुझे गाइड की आवश्यकता क्यों है? –

+0

एक पुराना सवाल यह है कि "कौन सा बेहतर आईडी है: संख्यात्मक या guid?" ग्रिड सुरक्षित है क्योंकि आप इसे अनुमानित नहीं कर सकते हैं। लेकिन संख्यात्मक आईडी अधिक स्पष्ट, सरल और साफ है। यदि आप संख्यात्मक आईडी और टाइमस्टैम्प द्वारा केवल हैश उत्पन्न करते हैं, तो यह इतना सुरक्षित नहीं है: आखिरकार, उन्होंने तोड़ दिया है सभी प्रमुख हैश-एल्गोरिदम (एमडी 5, एसएचए)। वे वैध सममित चेकसम उत्पन्न कर सकते हैं। इतना तेज़ नहीं है कि इससे कोई फर्क नहीं पड़ता है, लेकिन शायद कुछ वर्षों में स्थिति अलग है। इस समाधान के साथ आप दोनों के फायदे प्राप्त करते हैं प्रकार: आप वैध हैश-कोड आसानी से अनुमान नहीं लगा सकते हैं, लेकिन आपको ग्रिड-आधारित आईडी स्थानांतरित करने की आवश्यकता नहीं है। –

+0

:) मेरा प्रश्न "guid बनाम संख्या" नहीं था। यह और अधिक था। कब और कौन guid उत्पन्न करता है वर्कफ़्लो में? –

7

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

बाकी
+ लाइटवेट संदेश, बहुत कम भूमि के ऊपर
+ आसानी से पठनीय परिणाम, आसानी से
लागू करने के लिए
+ आसान एक वेब ब्राउज़र के साथ परीक्षण कर सकते हैं (एक्सएमएल खुद के अलावा अन्य) - पराजित इंटरफेस, ढीला प्रकार की जाँच

सोप
+ अधिक एक सख्त अनुबंध परिभाषा
+ विकास उपलब्ध उपकरणों के साथ बहुत, कठोर।

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

क्लाइंट साइड जनरेशन टूल्स: मैं आरईएसटी सेवाओं के लिए किसी से भी नहीं आया क्योंकि आरईएसटी एसओएपी के रूप में सेवा अनुबंध को परिभाषित नहीं करता है। WADL आरईएसटी सेवाओं के लिए ऐसा करने का प्रयास है। http://en.wikipedia.org/wiki/Web_Application_Description_Language http://wadl.codeplex.com/

मैं, और अधिक प्रमाणीकरण और सुरक्षा के साथ काम कर प्रतिक्रियाएं पढ़ने में दिलचस्प रहा हूँ के रूप में मैं अपने आप को कि में देख रहा हूँ।

+0

डब्ल्यूसीएफ और आरईएसटी के लिए एक अच्छा परिचय यहां है: http://msdn.microsoft.com/en-us/magazine/dd315413.aspx – schoetbi

0

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

जोर सरलीकरण पर जोर दिया जाता है - जैसे कि अवांछित पिलअप की बजाय पैरा के लिए सरल डेटा प्रकारों का उपयोग करना, न ही अनिवार्य कारणों (जैसे यूआरएल में टॉइंग विशाल पृष्ठ "शीर्षक") के लिए इंटरफ़ेस को अवरुद्ध करना, हेडर का उपयोग न करें जो अच्छी तरह से ज्ञात नहीं हैं और डी-फैक्टो मानक।

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

तुम भी दोनों JSON और एक्सएमएल सेवा कर सकते हैं और (उदाहरण के लिए गूगल के नक्शे की तरह) अभी भी RESTfull हो, लेकिन आप पूर्ण पैमाने सोप (जटिल इनपुट प्रकार आदि) नहीं कर सकते। आप अनुरोधों के लिए सीमित एसओएपी - सरल प्रकार कर सकते हैं, जीईटी तर्क के रूप में हमेशा स्पष्ट, लोगों को दस्तावेज के लिए डब्लूएसडीएल मिलते हैं।

आशा है कि यह पेंट्स लचीली पर्याप्त तस्वीर - किसी भी सख्त सिद्धांत से ऊपर सोचने का तरीका।

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