2010-05-19 4 views
14

मैं एक साइट काफी कुछ पृष्ठों है कि RESTful डिजाइन की मेरी समझ सीमित है, जो अनिवार्य है बाहर गिर गया है पर काम कर रहा हूँ: क्या लेबलिंग कार्यों/मार्गों के लिए एक अच्छा सिस्टम है:विश्वसनीय डिजाइन, CRUD et al के बाहर पृष्ठों का नाम कैसे दें?

Create, Read, Update, Delete, Show, List 

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

दूसरा मामला: मेरे पास ग्राहकों और कंपनियों के बीच 'मिलान' नामक एक टेबल है। इन मिलानों को साइट के विभिन्न हिस्सों (विभिन्न लेआउट, विभिन्न सीएसएस शीट्स, विभिन्न प्रकार के उपयोगकर्ताओं तक पहुंचने आदि) पर पूरी तरह से अलग तरीकों से एक्सेस किया जाता है। वे सभी मेलिंग/शो नहीं हो सकते हैं। दूसरों को लेबल करने का सबसे अच्छा तरीका क्या है?

धन्यवाद बहुत बहुत। =)

+1

पढ़ें और दिखाएं वही हैं। HTTP पर – Anurag

+3

REST कहता है कि आपको संसाधनों को प्राप्त करने, PUT, POST, GETTE को आजमाएं और मानचित्र करना चाहिए। यह रेल है जो 'बनाएं, पढ़ें, अपडेट करें, हटाएं, दिखाएं, सूची' जैसे कार्यों को संदर्भित करें। –

+0

कुछ दिन पहले से मेरा जवाब देखें (http://stackoverflow.com/questions/2857323/what-exactly-is-rest-architecture-and-how-is-it-implemented-in-rails/2862347#2862347)। शायद आरईएसटी इन अतिरिक्त टुकड़ों को याद कर रहा है, न कि दूसरी तरफ। – Anurag

उत्तर

7

मैं निश्चित रूप से कोई विशेषज्ञ हूँ, लेकिन अगर आप अपने संसाधनों पर पुनर्विचार और अधिक सख्ती से उनमें से लगता है कि 'संज्ञाएं' के रूप में या डेटा की कम से कम सूचियों में, यह फिट करने के लिए आसान हो सकता है जीईटी, पोस्ट, पुट, और डिलीट में कोई वांछित कार्रवाई। उदाहरण के लिए, आपके पास /customers/ संसाधन अनुमानित हो सकता है कि प्रत्येक ग्राहक के लिए /customers/{username}/ संसाधन हो। शायद यह उन्हें अपने बारे में जानकारी देता है। आपके पास /homebases/{username}/ या /customers/{username}/homebase/ आपके होमबेस संसाधनों के रूप में हो सकता है। संभवतः, आप मुख्य रूप से जीईटी के माध्यम से उस होमबेस संसाधन तक पहुंच पाएंगे, और अगर वहां अपडेट करने के लिए कुछ भी है (जो कि मैं होम-बेस या डैशबोर्ड पर एक कुल संसाधन के बाद से अपेक्षा नहीं करता)।

'मिलान' के लिए आप /matchings/{customer},{company}/ (हाँ, कॉमा और अर्धविरामों की तरह कुछ उपयोग कर सकते हैं। कॉमा आमतौर पर दो भागों ऑर्डर-निर्भर हैं और अर्धविराम का मतलब ऑर्डर-स्वतंत्र है, हालांकि इसके बारे में कोई नियम नहीं है)। उस संसाधन से, आप जो भी डेटा चाहते हैं उसे पढ़ने, दिखाने और सूचीबद्ध करने के लिए प्राप्त कर सकते हैं (जीईटी अनुरोध के शरीर के रूप में पारित वैकल्पिक क्वेरी पैरामीटर सहित), अपडेट करने के लिए पोस्ट करें, बनाने के लिए पुट करें और हटाएं हटाएं। जीईटी में पारित पैरामीटर का उपयोग करके, आप उसी डेटा के विभिन्न विचारों का भी अनुरोध कर सकते हैं। बेशक, आपके पास /matchings/{customer},{company}/invoices/{invoice#}/ जैसे मिलान के उप-संसाधन हो सकते हैं।

मुझे वैसे भी "रीस्टफुल वेब सर्विसेज" (2007 O'Reilly) पुस्तक पसंद आया।

मुझे उम्मीद है कि कुछ समझदारी होगी और सहायक होगा। =)

3

कुल और समग्र विचार एक गंभीर समस्या है, मुझे लगता है। मुझे homepage समस्या से निपटना पड़ा जो मुझे पता था कि सब कुछ के खिलाफ चला गया।

मेरा समाधान होमपेज या डैशबोर्ड को स्वयं संसाधन के रूप में मानना ​​था, लेकिन एक संसाधन जहां केवल जीईटी ऑपरेशंस को समझ में आया था। होमपेज से पोस्ट/पुट/डिलीट सामान्य संसाधनों को सामान्य रूप से निर्देशित किया गया था।

मिलान, इसके विपरीत, मिलान करने में एक आसान समस्या प्रतीत होती है। यह आपके विवरण से ग्राहकों और कंपनियों के बीच एक साधारण मैपिंग जैसा प्रतीत होता है, और आप क्वेरीस्ट्रिंग पैरामीटर के आधार पर इसे parametrize कर सकते हैं।

/matchings?companies=X,Y,Z&locations=NY,CA,TX 
+0

मैं मानता हूं कि डैशबोर्ड संसाधन पर कुछ भी अनुमति देने के लिए यह अजीब लगता है, और डैशबोर्ड के कुछ अन्य संसाधनों को अद्यतन करना ठीक होगा, जैसा कि आपने कहा था। –

+1

संसाधन के रूप में डैशबोर्ड को ध्यान में रखना एक पूरी तरह से मान्य दृष्टिकोण है और संसाधनों के उप-समूह का समर्थन करने वाले संसाधन में कोई समस्या नहीं है। एकमात्र चेतावनी होमपेज संसाधन के साथ है। आम तौर पर एक ऐसा यूआरएल बनाने का अच्छा विचार नहीं है जो अलग-अलग लोगों के लिए अलग-अलग सामग्री देता है। इसके बजाए '/ users/bob/homegage' संसाधन बनाना बेहतर है। –

+0

यदि डैशबोर्ड दृश्य को प्रमाणीकृत पहुंच की आवश्यकता है, तो आप सभी उपयोगकर्ताओं के लिए एक ही यूआरएल का उपयोग कर सकते हैं - मेल, फेसबुक, ट्विटर इत्यादि। – Anurag

2

RESTful डिजाइन, मैं, मान लें कि RESTful वेब सेवाओं मतलब के बाद से किसी REST- आधारित संरचना है कि तुलना में एक बहुत व्यापक अर्थ है।

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

लेकिन रीस्टफुल वेब सेवाएं किसी भी ठोस मानक (एसओएपी के विपरीत) का पालन नहीं करती हैं। यह उपयोग करने के लिए आम बात है: विद्यमान

  • DELETE आइटम अद्यतन करने के लिए - - नए आइटम बनाने
  • PUT के लिए - - विद्यमान
  • आइटम
  • पोस्ट लाई जा रही के लिए

    • प्राप्त के लिए मौजूदा वस्तुओं को हटाने

    बनाएँ, पढ़ें, अपडेट करें और हटाएं (सीआरयूडी) किसी भी सतत भंडारण के मूल कार्य हैं।

    यह देखना है कि आम RESTful वेब सेवाओं में आसान है, प्रत्येक HTTP विधि बुनियादी कार्यों में से एक मैच के लिए प्रयोग किया जाता है किया जा रहा है, लेकिन बात यह है: यह इस तरह से होना जरूरी नहीं है।

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

    यदि कोई सुरक्षित (एन्क्रिप्टेड) ​​रीस्टफुल वेब सेवा विकसित करना चाहता है, तो कोई भी सभी अनुरोध HTTPS पोस्ट कर सकता है, और फिर अनुरोध के भीतर निर्दिष्ट कर सकता है, जिसमें सीआरयूडी संचालन में से कौन सा प्रदर्शन करना चाहता है, और किस संसाधन पर।

    एक भी, एक व्यापक श्रेणी के CRUD अवधारणा का विस्तार कर सकता है वास्तव में, लगभग हर आवेदन में, एक के लिए है।

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

    विशेष रूप से आपके प्रश्न के संबंध में, आप अपना स्वयं का प्रोटोकॉल निर्दिष्ट कर सकते हैं, show_by_x, show_by_y, आदि जैसे आपके स्वयं के कार्य हो सकते हैं। आरईएसटी पुलिस आपको गिरफ्तार करने के लिए नहीं आ रही है :-)

  • +0

    'HTTP पर SOAP RPC आर्किटेक्चर एक विश्वसनीय वास्तुकला है हू? क्या आप उस विचित्र दावे पर कुछ बैकअप प्रदान कर सकते हैं? –

    +0

    मेरा मतलब यह था कि आरईएसटी व्यापक अर्थ में कैसे है, जो कुछ भी HTTP विधियों का उपयोग करता है। SOAP POST विधि का उपयोग करता है। लेकिन उदाहरण की मेरी पसंद वास्तव में खराब थी, क्योंकि आरईएसटी को आमतौर पर एसओएपी के विकल्प के रूप में वर्णित किया जाता है, इसलिए मैंने अपने उत्तर से संदर्भ हटा दिया है। यह बात बताने के लिए धन्यवाद। – ivo

    0

    आरईएसटी और ओआरएम 2 अलग-अलग चीजें हैं, भले ही आपके पास उपयोगकर्ता नामक मॉडल हो, आप एक उपयोगकर्ता संसाधन के लिए आवश्यक किया।संसाधन के रूप में मॉड्यूल/वर्गों

    पूर्व रेल नियंत्रक स्तर में कामयाब होना चाहिए

    Think संसाधन: यदि आप अपने उपयोगकर्ताओं डैशबोर्ड पृष्ठ के बाद वे में लॉग इन करने पर उतरने के लिए चाहते हो सकता है (और कहते हैं कि तुम उन व्यवस्थापकों की दो श्रेणियों है और सामान्य उपयोगकर्ताओं), तो आपको uer_dashboard

    दो संसाधनों namly

    admin_dashboard हो सकता है और दोनों ही कार्रवाई

    दूसरा सीए पढ़ा है इसलिए हो सकता है se:

    (अलग उपयोगकर्ता के स्तर के अनुसार विभिन्न संसाधनों) उपरोक्त उदाहरण की तरह कुछ रखने पर विचार यदि संभव हो तो

    मैं एक बाकी गुरु नहीं हूँ, लेकिन उम्मीद है कि इस मदद करता है: डी

    चियर्स, समीरा

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