2009-06-06 13 views
6

एक एमवीसी ऐप लिखते समय नामकरण सम्मेलन की सिफारिश की जाती है जिसमें आवश्यक डेटा के लिए फ्रंट एंड और जेएसओएन पथ दोनों होते हैं?जेएसओएन क्रियाओं के लिए एमवीसी नामकरण सम्मेलन

उदाहरण के लिए, मान लें कि आपकी साइट के उपयोगकर्ता के पास "चीजें" हैं। उन्हें अपनी चीजों को देखने के लिए एक पृष्ठ पर जाने में सक्षम होना चाहिए, लेकिन हमें उन चीजों को जेएसओएन के रूप में अन्य पृष्ठों पर खींचने के लिए भी एक तरीका चाहिए। मैं कई विकल्पों के बारे में सोचने में सक्षम हूं लेकिन मैं आगे बढ़ने के लिए उनमें से किसी पर भी उत्सुक नहीं हूं। यहाँ मैं क्या कर लिया है:

  1. /बातें/सूची यूआई के लिए, /json/बातें JSON के लिए - यह एक JsonController जो वस्तुओं के विभिन्न प्रकार की सेवा है, जिससे कोई मौका हराने के अंत होगा की आवश्यकता होगी हम शुरू करने से पहले इकाई अलगाव का।
  2. /बातें/सूची यूआई के लिए, /बातें/सूची/json JSON के लिए - इस समय शायद मेरी पसंदीदा विकल्प है, लेकिन जादू stringing की आवश्यकता है (बस "json" यद्यपि)। साथ ही, अगर आपको कुछ फ़िल्टर पैरामीटर या ऐसे में लेने के लिए एक (स्ट्रिंग आईडी) एक्शन हस्ताक्षर की भी आवश्यकता है, तो आपके पास अतिरिक्त मार्ग जोड़ने या कुछ गंदे स्ट्रिंग स्प्लिटिंग करने का विकल्प होता है।
  3. /खाता/MyThings यूआई के लिए, /बातें/सूची JSON के लिए - थोड़ा क्लीनर, लेकिन वहाँ हमेशा एक प्रासंगिक नियंत्रक है कि आप से "बातें" सेवा कर सकता है नहीं हो सकता है। इसके अलावा, आप फिर से इकाइयों मिश्रण कर रहे हैं।

सभी और कोई सुझाव स्वागत है, धन्यवाद!

+0

कृपया [एक्शन नामकरण कन्वेंशन] (http://stackoverflow.com/questions/118474/action-naming-convention/38994001#38994001) पर मेरा उत्तर देखें। उम्मीद है कि यह मदद करता है ... –

उत्तर

15

तर्कसंगत रूप से पथ नाम सभी समान हो सकते हैं। आप अपने ग्राहक के वांछित प्रतिक्रिया की माइम-प्रकार के लिए शीर्ष लेख स्वीकार जांच कर सकते हैं, और फिर एक उपयुक्त तुम वहाँ क्या लगता है के आधार पर देखने वापसी:

  • आवेदन/json: JSON देखें
  • text/xml: एक्सएमएल देखें
  • पाठ/सादे, पाठ/html: JSP देखें

ब्राउज़र HTML करने के लिए इस क्षेत्र को सेट; आपके JSON क्लाइंट बस इस फ़ील्ड को उपयुक्त के रूप में सेट करेंगे।

+2

मैं सहमत हूं। यही है कि HTTP सामग्री बातचीत के लिए डिज़ाइन किया गया है। मैं आपके अपने माइम प्रकारों को परिभाषित करने की अनुशंसा करता हूं ताकि आप अपने JSON डेटा प्रारूपों को संस्करण बना सकें। एप्लिकेशन/vnd.mycorp.myformat-1.0 + जेसन जैसी कुछ। इस तरह, जब आपके प्रारूप में कुछ बदलता है, तो आप इसे एप्लिकेशन/vnd.mycorp.myformat-1.1 + json (पिछड़े संगत परिवर्तन के लिए) या एप्लिकेशन/vnd.mycorp.myformat-2.0 + json (पिछड़े असंगत के लिए) में बदल सकते हैं परिवर्तन)। – Nat

+0

शानदार ढंग से सुरुचिपूर्ण, धन्यवाद! $ .postJSON jQuery फ़ंक्शन जो मैं अपने यूआई में उपयोग कर रहा हूं वह पहले से ही सही हेडर भेजता है, इसलिए यह सही है! – tags2k

1

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

/things/list -- HTML 
/things/list?format=json -- JSON 

यदि आपके पास आईडी पैरामीटर हैं या अन्य पैरामीटर की आवश्यकता है तो यह आपके यूआरएल को तोड़ नहीं देगा। यह POSTs के साथ ही जीईटी के साथ भी काम कर सकता है।

/things/1 -- HTML for "thing 1" 
/things/1?format=json -- JSON for "thing 1" 
1

मैं

/things/list -- HTML 
/things/_listpage -- AJAX 

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

आमतौर पर सूची दृश्य में मैं एक

<% RenderAction("_listpage", "things", new {page = ViewData["CURRENT_PAGE"]}); %> 
-1

मैं @RedFilter

/things/list -- HTML 
/things/_list -- return HTML help and examples (more for you than them). 
/things/_list/schema -- schema info 
/things/_list/json -- JSON format 
/things/_list/xml -- XML format 
/things/_list/csv -- csv format 
/things/_list/tab -- tab deliminated format 
/things/_list/wdsl -- implemented soap web service 

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

public ActionResult _list(string id) 
{ 
    string data = ""; 
    DataTable oDataTable = this.oDAO.Get("list"); // pretend data retrieval 

    try{ 
     if(!String.IsNullOrEmpty(id)){ 
      data = this.oDecorator.FormatData(id,oDataTable); 
      this.ContentTypeChange(id); // change application handler 
     }else{ 
      data = this.GetHelp("_list"); 
     }   
    }catch{} 
    ViewData["data"] = data; 
    return View(); 
} 

... मदद एक विशेषता सूची, तकनीकी उदाहरण, या जो भी आप चाहते हैं के और अधिक हो सकता है:

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

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