मैं एक चौराहे पर हूं कि यह तय करना कि टैग उनके स्वयं के संसाधन या नोट की घोंसला वाली संपत्ति होनी चाहिए या नहीं। यह सवाल रीस्टफुल डिज़ाइन और डेटाबेस स्टोरेज पर थोड़ा सा स्पर्श करता है।क्या टैग का अपना संसाधन होना चाहिए या घोंसला वाली संपत्ति होनी चाहिए?
संदर्भ: मेरे पास एक नोट संसाधन है। उपयोगकर्ताओं के पास कई नोट्स हो सकते हैं। प्रत्येक नोट में कई टैग हो सकते हैं।
कार्यात्मक लक्ष्य: मैं निम्न करने के लिए रूट बनाने के लिए की जरूरत है:
1) लायें सभी उपयोगकर्ता टैग। कुछ ऐसा: GET /users/:id/tags
2) किसी नोट से जुड़े टैग हटाएं।
3) एक विशिष्ट नोट में टैग जोड़ें।
डेटा/प्रदर्शन लक्ष्य
1) उपयोगकर्ता टैग लाई जा रही है तेजी से होना चाहिए। यह "autosuggest"/"स्वतः पूर्ण" के उद्देश्य के लिए है।
2) डुप्लिकेट को रोकें (जितना संभव हो सके)। मैं चाहता हूं टैग टैग द्वारा डेटा पूछने में सक्षम होने के उद्देश्य से जितना संभव हो सके पुन: उपयोग किया जाए। उदाहरण के लिए, मैं उन परिदृश्यों को कम करना चाहता हूं जहां उपयोगकर्ता "सुपरहीरो" जैसे टैग टाइप करते हैं, जब टैग "सुपरहीरो" पहले से मौजूद है। नेस्ट संपत्ति के रूप में
1) टैग:
कहा जा रहा है, जिस तरह से मैं इसे देख, वहाँ एक टिप्पणी संसाधन पर टैग भंडारण के दो दृष्टिकोण हैं। उदाहरण के लिए:
type: 'notes',
attributes: {
id: '123456789',
body: '...',
tags: ['batman', 'superhero']
}
2) टैग अपने संसाधन के रूप में।
type: 'notes',
data: {
id: '123456789',
body: '...',
tags: [1,2,3] // <= Tag IDs instead of strings
}
या तो तरीकों में से एक के ऊपर काम कर सकता था, लेकिन मैं एक समाधान है कि scalability और डेटा स्थिरता (एक लाख नोट और एक करोड़ टैग की कल्पना) की अनुमति देगा रहा हूँ: उदाहरण के लिए। इस बिंदु पर, मैं विकल्प # 1 की ओर झुका रहा हूं क्योंकि कोड के साथ सामना करना आसान है लेकिन यह सही विकल्प नहीं हो सकता है।
मुझे विभिन्न दृष्टिकोणों के बारे में कुछ विचार सुनने में बहुत दिलचस्पी है, खासकर जब से मुझे इस विषय के बारे में SO पर समान प्रश्न नहीं मिल रहे हैं।
अद्यतन उत्तर के लिए धन्यवाद। मेरे लिए सबसे महत्वपूर्ण चीजों में से एक यह पहचान रहा है कि एक दूसरे का उपयोग क्यों फायदेमंद है। मैं कुछ समर्थक/कॉन सूची शामिल करने का उत्तर देना चाहता हूं।
उपयोग करने के लिए आप इस बारे में बात कर रहे हैं, जबकि डीबी में भंडारण टैग करेगा नहीं है या जब आउटपुट बाकी से वापस आ जाता है? –
क्या किसी टैग के नाम और शायद एक आईडी के अलावा कोई अन्य जानकारी है? –
टैग में केवल एक स्ट्रिंग मान होता है। यह प्रश्न रीस्टफुल डिज़ाइन और डीबी स्टोरेज दोनों को छूता है - मैंने अपना प्रश्न प्रतिबिंबित करने के लिए अपडेट किया है। –