REST युक्ति (आप जिस भी स्तर पर जाना चाहते हैं) को डेटाबेस एक्सेस के रूप में डिज़ाइन नहीं किया गया था। यह एपीआई एक्सेस तक मानकीकरण लाने की कोशिश कर रहा है। उल्लेख किए गए SQL सम्मेलनों (चाहे आप उन्हें उपयोग करना चाहते हैं या नहीं) को एपीआई एक्सेस को ध्यान में रखते हुए डिज़ाइन नहीं किया गया था। वे SQL क्वेरी लिखने के लिए हैं।
इसलिए यहां अनपैक करने का मुद्दा वैचारिक समझ है जो एक एपीआई डेटाबेस पर सीधे मैप करता है। हम इसे कम से कम 2009 तक कम से कम एंटी-पैटर्न के रूप में वर्णित पा सकते हैं ।
मूल कारण यह बुरा है? यह वर्णन करने वाला कोड "यह ऑपरेशन मेरे डेटा को कैसे प्रभावित करता है?" क्लाइंट कोड बन जाता है ।
यह एपीआई पर कुछ बहुत भयानक प्रभाव है। (संपूर्ण सूची नहीं)
यह एपीआई को कठिन बनाता है
मैं एक नए उपयोगकर्ता को इस तरह से बनाने के लिए कदमों की कल्पना करता हूं:
POST /users { .. }
POST /usersettings { .. }
कुछ डिफ़ॉल्ट मानों के साथ
POST /confirmemails { .. }
लेकिन आप चरण # 2 की विफलता को कैसे संभालते हैं? आपके एपीआई के अन्य ग्राहकों के लिए यह कितनी बार वही लॉजिक कॉपी-पास्ता है?
क्लाइंट की ओर से एकल ऑपरेशन के रूप में शुरू किए जाने पर ये डेटा ऑपरेशन अक्सर सर्वर साइड पर अनुक्रम करना आसान होते हैं। जैसे POST /newusersetup
। DBA इसे एक संग्रहीत कार्यविधि के रूप में पहचान सकते हैं, लेकिन API ऑपरेशन का प्रभाव केवल डेटाबेस से परे हो सकता है।
एपीआई को सुरक्षित करने से निराशा का एक ब्लैक होल बन जाता है
मान लें कि आपको दो उपयोगकर्ता खातों को मर्ज करने की आवश्यकता है।
GET /users/1
PUT /users/2 { .. }
DELETE /users/1
आप उपयोगकर्ता विलोपन की अनुमति नहीं देते हुए मर्ज सुविधा की अनुमति के लिए उपयोगकर्ता की अनुमति कैसे सेट करने जा रहे हैं? क्या उपयोगकर्ता को DELETE /users/1
तब /usersettings
भी हटा दिया जाता है जब वह मौजूद होता है?
एपीआई संचालन को उच्चतर (-से-डेटाबेस) -वेल संचालन के रूप में देखा जाना चाहिए जिससे सिस्टम में कई परिवर्तन हो सकते हैं।
रखरखाव कठिन हो जाता है
... क्योंकि आपके ग्राहक आपके डेटाबेस संरचना पर निर्भर हैं।
इस परिदृश्य के साथ मेरे अनुभव के आधार पर:
- आप मौजूदा तालिकाओं / स्तंभों का नाम बदल या निकाल नहीं सकते। यहां तक कि जब वे अपने फ़ंक्शन के लिए गलत तरीके से नामित किए जाते हैं या अब उपयोग नहीं किए जाते हैं। ग्राहक टूटेंगे।
- नई सुविधाएँ मौजूदा डेटा संरचनाओं को परिवर्तित नहीं कर सकती हैं, इसलिए इसका डेटा और कार्यक्षमता अक्सर कृत्रिम रूप से अलग हो जाती है, जब यह समग्र रूप से किसी मौजूदा विशेषता के साथ होती है।
- कोड आधार धीरे-धीरे विखंडन, भ्रमित करने वाले नामों और बचे-खुचे सामान के कारण समझना कठिन हो जाता है, जिन्हें सुरक्षित रूप से हटाया नहीं जा सकता।
- सभी लेकिन तुच्छ परिवर्तन तेजी से जोखिम भरे और समय लेने वाले बनते हैं।
- सिस्टम स्थिर हो जाता है और अंततः बदल दिया जाता है।
सीधे ग्राहकों के लिए अपने डेटाबेस संरचना को उजागर न करें ... विशेष रूप से ग्राहकों को आपके पास विकास संबंधी नियंत्रण नहीं है। केवल मान्य संचालन के लिए क्लाइंट को संकुचित करने के लिए API का उपयोग करें।
इसलिए यदि आप किसी API को डेटाबेस में सीधे इंटरफ़ेस के रूप में उपयोग कर रहे हैं, तो बहुवचन आपकी चिंताओं में कम से कम है। फेंक-फेंकने के प्रयोग के अलावा, मैं सुझाव दूंगा कि एपीआई का प्रतिनिधित्व करने वाले उच्च-स्तरीय संचालन का निर्धारण करने में कुछ समय खर्च करना चाहिए। और जब आप इसे इस तरह से देखते हैं, तो बहुवचन एपीआई इकाई नामों और विलक्षण SQL इकाई नामों के बीच कोई संघर्ष नहीं होता है। वे अलग-अलग कारणों से वहां हैं।