2008-09-23 20 views
7

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

अब तक मुझे नियंत्रक/एक्शन/इंडेक्स संरचना (जैसे उत्पाद/संपादन/1) पसंद आया है, लेकिन मैं अधिक जटिल यूआरएल के साथ संघर्ष कर रहा हूं।

उदाहरण के लिए, मान लीजिए कि आपके पास एक ऐसा पृष्ठ है जो उपयोगकर्ता के खाते में मौजूद सभी उत्पादों को सूचीबद्ध करता है। आपको इसे कैसे करना होगा? मेरे सिर के ऊपर से मैं एक लिस्टिंग पृष्ठ और एक संपादन पृष्ठ के लिए निम्नलिखित संभावनाओं के बारे में सोच सकता हूं:

  1. उपयोगकर्ता/{उपयोगकर्ता आईडी}/उत्पाद/सूची, उपयोगकर्ता/{उपयोगकर्ता आईडी}/उत्पाद/संपादन/{उत्पाद id}
  2. उपयोगकर्ता/{प्रयोक्ता आईडी}/उत्पाद, उपयोगकर्ता/{प्रयोक्ता आईडी}/उत्पाद/{उत्पाद id}
  3. उत्पाद? UserID = {प्रयोक्ता आईडी}, उत्पाद/संपादित करें/{उत्पाद id}

मुझे यकीन है कि बहुत सारे लोग हैं जो मुझे याद आ रही हैं। कोई सलाह?

उत्तर

7

मुझे रीस्टफुल, उपयोगकर्ता के अनुकूल और हैक करने योग्य यूआरएल पसंद हैं।

इसका क्या अर्थ है? आइए उपयोगकर्ता के अनुकूल यूआरएल से शुरू करें। मेरे लिए एक उपयोगकर्ता के अनुकूल यूआरएल टाइप करने में आसान है और याद रखने में आसान /Default.aspx?action=show&userID=140 इनमें से किसी भी आवश्यकताओं को पूरा नहीं करता है। `/ Users/troethom 'जैसे यूआरएल हालांकि तार्किक लगता है।

यह अगली बात पर जाता है। एक हैक करने योग्य यूआरएल एक यूआरएल है जिसे उपयोगकर्ता संशोधित कर सकता है और परिणाम के साथ अभी भी प्रस्तुत किया जा सकता है। यदि यूआरएल हैकबल है और मेरी प्रोफाइल के लिए यूआरएल /users/troethom है तो उपयोगकर्ता की सूची प्राप्त करने के लिए मेरे उपयोगकर्ता नाम को हटाने के लिए सुरक्षित होगा (/users)।

का उपयोग कर विश्वसनीय URL मेरे अन्य सुझावों के पीछे विचारों के समान ही है। आप किसी उपयोगकर्ता के लिए यूआरएल डिज़ाइन कर रहे हैं, न कि मशीन के लिए और इसलिए यूआरएल को सामग्री से संबंधित होना चाहिए, न कि आपकी साइट के तकनीकी बैक-एंड। '/ उपयोगकर्ता' के रूप में एक यूआरएल '/ उपयोगकर्ता/सूची' से अधिक समझ में आता है और '/ श्रेणी/प्रोग्रामिंग/जावास्क्रिप्ट' के रूप में एक यूआरएल (श्रेणी 'प्रोग्रामिंग' में उपश्रेणी 'जावास्क्रिप्ट' का प्रतिनिधित्व करता है '/ श्रेणी/शो से बेहतर है/12'।

यह वास्तव में आईडी छोड़ देते हैं और अधिक कठिन है, लेकिन मेरी दुनिया में यह प्रयास के लायक है।

इसके अलावा W3C's आम HTTP कार्यान्वयन की समस्याओं पर the Understanding URIs section से परामर्श करें।यूआरआई डिजाइन करते समय इसमें सामान्य नुकसान की एक सूची है। एक और अच्छा संसाधन Resourceful Vs Hackable Search URLs है।

3

आप "Friendly url scheme?" प्रश्न पर एक नज़र डालना चाहते हैं।

विशेष रूप से, Larry.Smithmier's answer एएसपी.NET में एमवीसी का उपयोग करते समय सामान्य यूआरएल योजनाओं की एक सूची प्रदान की गई।

1

इसके अलावा, आप अलग-अलग कार्रवाइयों के लिए समान मार्गों का पुन: उपयोग करने के लिए विभिन्न क्रियाओं का उपयोग करने पर विचार कर सकते हैं। उदाहरण के लिए, "उत्पाद/संपादन/45" के लिए एक GET अनुरोध उत्पाद संपादक को प्रदर्शित करेगा, जबकि उसी यूआरएल के लिए एक पोस्ट उत्पाद को अपडेट करेगा। इसे पूर्ण करने के AcceptVerb विशेषता का उपयोग कर सकते हैं:

[AcceptVerb("GET")] 
public ActionResult Edit(int id) 
{ 
    ViewData["Product"] = _products.Get(id); 
    return View(); 
} 

[AcceptVerb("POST")] 
public ActionResult Edit(int id, string title, string description) 
{ 
    _products.Update(id, title, description); 
    TempData["Message"] = "Changes saved successfully!"; 

    return RedirectToAction("Edit", new { id }); 
} 
0

troethom की टिप्पणी करने के लिए जोड़ने के लिए, RESTful आम तौर पर यह भी कहा कि, उदाहरण के लिए, आपको/उपयोगकर्ताओं/newusername

RESTful मूल रूप से 5 मानक HTTP तरीके का उपयोग करता है (मिलता है, PUT प्रतिनिधित्व डाल नया उपयोगकर्ता बनाने का मतलब , पोस्ट, डिलीट, हेड) सामग्री को नियंत्रित/एक्सेस करने के लिए।

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

इसकी बातें कर रही है, मैं सुझा RESTFul Web services पढ़ने चाहते हैं, उसके लिए एक अच्छा तरीका एक बेहतर समझ पाने के लिए: डी (और यह एक रफ़ू अच्छी किताब है!)

0

मैं इस विषय दृष्टिकोण दो मुख्य स्वीकार किए जाते हैं तरीके ...

देखा है

एक को MvcContrib project documentation

में वर्णित किया गया है

और दूसरा एक blog post by Stephen Walther (जिसे मैं व्यक्तिगत रूप से पसंद करता हूं) में वर्णित है।

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