क्या किसी संपूर्ण API को संपूर्ण फ़ॉर्म के लिए डेटा प्रदान करना चाहिए?


13

मान लीजिए कि मेरे पास एक जावास्क्रिप्ट वेब एप्लिकेशन है जो डेटा के लिए पूरी तरह से RESTful API का उपयोग करता है।

मान लें कि इस एप्लिकेशन का एक डेटा फ़ॉर्म है, और मान लें कि मैं / उत्पाद / 12345 पर एक रिकॉर्ड संपादित कर रहा हूं। फॉर्म का निर्माण करते समय, मैं / उत्पाद / 12345 पर RESTful अनुरोध करता हूं और JSON डेटा प्राप्त करता हूं:

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27
}

तो, मेरा रूप स्पष्ट रूप से बिक्री व्यक्ति का चयन करने के लिए ड्रॉपडाउन सूची हो सकता है। मुझे इस सूची को आबाद करने की आवश्यकता है। डेटा कहां से आना चाहिए? सबसे आम दृष्टिकोण क्या है?

क्या इसे / उत्पाद / 12345 अनुरोध प्रतिक्रिया का हिस्सा बनाने के लिए समझ में आएगा?

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27,
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ]
}

नया रिकॉर्ड बनाते समय क्या होगा? क्या मेरे एपीआई को निम्नलिखित के साथ GET / उत्पाद / नए का जवाब देना चाहिए?

{
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ],
  "categories": [
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
  ],
  "etc": [ ... ]
}

कृपया कुछ बनाने के लिए GET अनुरोध का उपयोग करें। आपका समापन बिंदु / उत्पाद होना चाहिए / उत्पाद / नया नहीं होना चाहिए । एक नया उत्पाद बनाने के लिए आपको उस अंतिम बिंदु पर एक PUT अनुरोध भेजना चाहिए।
केरेम बद्दोअन

यह कुछ भी पैदा नहीं कर रहा है। यह विशुद्ध रूप से मौजूदा डेटा के लिए एक अनुरोध है या एक नए के लिए टेम्पलेट, अभी तक रिकॉर्ड नहीं किया गया है।
चाड जॉनसन

ओह सॉरी, अब मैं देख रहा हूं कि आपका क्या मतलब है। किसी भी तरह से उत्पाद समापन बिंदु उत्पाद-निर्माण प्रपत्र ड्रॉप-डाउन के लिए टेम्पलेट उत्पाद या सूची-मूल्य प्रदान करने के लिए ज़िम्मेदार नहीं होना चाहिए। जैसा कि @Dan कहते हैं कि बस अलग-अलग समापन बिंदु बनाएं और कैशिंग हेडर का उपयोग करें ताकि आपका ब्राउज़र प्रदर्शन के लिए ड्रॉप-डाउन मानों को कैश कर सके।
केरेम बद्दोअन

जवाबों:


6

मैं बहुत सरल, संकीर्ण-केंद्रित समापन बिंदुओं की ओर झुकता हूं। मैं कुछ स्थानों जैसे / sales_users जो सभी बिक्री उपयोगकर्ताओं को लौटाता हूं, पर एक अनुरोध की उम्मीद है।

GET / sales_users:

[
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
]

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

GET / श्रेणियां:

[
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
]

मैं GET / उत्पाद / नया नहीं बनाऊंगा। बल्कि, मैं आपके ऐप में नए उत्पादों को जोड़ने के लिए एक फॉर्म का निर्माण करूंगा, जो इसकी सूचियों (जैसे, जीईटी / श्रेणियां, जीईटी / सेल्स_सर्स, आदि) को पॉप्युलेट करने के लिए उपयुक्त अनुरोधों को जानता है।


3

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

इसी तरह, जब /product/newआप कॉल करते हैं , तो आप केवल एक नए उत्पाद के लिए डेटा सबमिट करना चाहते हैं, जिसमें एक sales_user आईडी शामिल हो सकता है, लेकिन इससे अधिक कुछ नहीं। Sales_user में परिवर्तन स्वयं एक अलग कॉल होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.