𝗖𝗹𝗲𝗮𝗻 𝗔𝗣𝗜 𝗗𝗲𝘀𝗶𝗴𝗻 𝗶𝗻 𝗡𝗼𝗱𝗲.𝗷𝘀
बहुतेक Node.js APIs एका सिंगल server.js फाईल आणि काही रूट्सने (routes) सुरू होतात. जेव्हा ॲप लहान असते तेव्हा हे काम करते.
मग ॲप मोठे होते.
रूट्सची संख्या वाढते. Business logic रूट हँडलर्समध्ये मिसळते. Error handling कॉपी-पेस्ट केलेल्या कोडचा गोंधळ बनून जाते. नवीन डेव्हलपर्सना गोष्टी कुठे आहेत हे शोधण्यात अडचण येते. API अजूनही काम करते, पण त्याची देखभाल (maintain) करणे कठीण होते.
क्लीन API डिझाइन हे टाळते. तुम्हाला अशा स्ट्रक्चरची गरज आहे जे विविध जबाबदाऱ्या वेगळ्या करते (separates concerns).
प्रोफेशनल API लेयरनुसार (layer by layer) कसा तयार करायचा ते खाली दिले आहे:
- प्रोजेक्ट स्ट्रक्चर: फीचर फोल्डर्सचा (feature folders) वापर करा. प्रत्येक डोमेनचे स्वतःचे राउटर, कंट्रोलर, सर्व्हिस आणि स्कीमा असावेत.
- व्हर्जनिंग (Versioning): पहिल्या दिवसापासून
/api/v1/ने सुरुवात करा. नंतर v2 जोडणे हे केवळ फोल्डर हलवण्यासारखे असावे, पूर्ण रिफॅक्टरिंग (refactor) करण्याची गरज पडू नये. - कंट्रोलर लेयर (The Controller Layer): कंट्रोलर्स HTTP हाताळतात. ते रिक्वेस्टला (requests) सर्व्हिस कॉल्समध्ये रूपांतरित करतात आणि रिस्पॉन्स (responses) पाठवतात. त्यामध्ये business logic नसावे.
- सर्व्हिस लेयर (The Service Layer): येथे तुमचे business logic असते. सर्व्हिसना
reqकिंवाresऑब्जेक्ट्सबद्दल माहिती नसावी. त्यांना फक्त डेटा आणि नियमांशी (rules) देणेघेणे असते. - व्हॅलिडेशन (Validation): बाउंड्रीवर Zod वापरा. इनपुट्स तुमच्या कंट्रोलर्सपर्यंत पोहोचण्यापूर्वीच ते व्हॅलिडेट करा. यामुळे चुकीचा डेटा (malformed data) तुमच्या लॉजिकला बिघडवण्यापासून वाचतो.
- सेंट्रलाइज्ड एरर हँडलिंग (Centralized Error Handling): संपूर्ण ॲपसाठी एकच एरर हँडलर वापरा. यामुळे प्रत्येक एरर रिस्पॉन्सची रचना (structure) सारखीच राहते.
- सुसंगत रिस्पॉन्स (Consistent Responses): तुमचे सक्सेस आणि एरर रिस्पॉन्स तयार करण्यासाठी एक हेल्पर (helper) वापरा. प्रेडिक्टेबल (Predictable) JSON मुळे फ्रंटएंड डेव्हलपर्सचे काम सोपे होते.
- रेट लिमिटिंग (Rate Limiting): मिडिलवेअरच्या (middleware) मदतीने तुमचे एंडपॉइंट्स (endpoints) गैरवापरापासून सुरक्षित ठेवा.
- डॉक्युमेंटेशन (Documentation): ऑटोमॅटिकली इंटरअॅक्टिव्ह API डॉक्स तयार करण्यासाठी Swagger वापरा.
हे का महत्त्वाचे आहे:
जेव्हा तुम्ही हे लेयर्स वेगळे करता, तेव्हा तुम्हाला लवचिकता (flexibility) मिळते. जर तुम्हाला मॉक डेटाबेसकडून (mock database) रिअल डेटाबेसकडे स्विच करायचे असेल, तर तुम्हाला फक्त सर्व्हिस बदलावी लागेल. कंट्रोलर्स आणि राउटर तसेच राहतील.
जर तुम्हाला अधिक चांगली परफॉर्मन्स आणि इन-बिल्ट TypeScript सपोर्ट हवा असेल, तर Fastify चा विचार करा. स्ट्रक्चरल तत्त्वे तीच राहतील, पण फ्रेमवर्क तुमच्यासाठी अधिक काम करेल.
सध्याच्या काळात सर्व काही एकाच फाईलमध्ये टाकणे थांबवा. सुरुवातीलाच योग्य स्ट्रक्चर तयार करणे म्हणजे 'ओव्हरइंजिनिअरिंग' (overengineering) नाही. मेंटेनेबल बॅकएंडसाठी (maintainable backend) ही किमान गरज आहे.
तुमचे सध्याचे Express सेटअप कसे आहे? तुम्ही लेअर्ड आर्किटेक्चर (layered architecture) वापरता की ऑर्गॅनिक (organic)?
स्रोत: https://dev.to/gavincettolo/clean-api-design-in-nodejs-a-practical-guide-3a32