REST API कैसे बनाएं: डिज़ाइन, सुरक्षा और डिप्लॉयमेंट
REST API बनाने के लिए, उन रिसोर्स की सूची बनाएं जिन्हें आपका ऐप मैनेज करता है (users, orders, bookings), हर एक को /orders और /orders/{id} जैसा URL दें, और कार्यों के लिए HTTP मेथड इस्तेमाल करें: पढ़ने के लिए GET, बनाने के लिए POST, अपडेट करने के लिए PATCH, हटाने के लिए DELETE। सार्थक स्टेटस कोड के साथ JSON लौटाएं, हर इनपुट को वैलिडेट करें, सर्वर पर ऑथेंटिकेशन और हर रिकॉर्ड के लिए अनुमति जाँच ज़रूरी करें, और लिस्ट को पेजिनेट करें। फिर endpoints का दस्तावेज़ बनाएं और API को HTTPS के पीछे डिप्लॉय करें।
यह गाइड डिज़ाइन के फैसले, रूट के एक उदाहरण सेट, AI ऐप बिल्डर के लिए प्रॉम्प्ट, और उन गलतियों को कवर करती है जिनसे सुरक्षा में छेद होते हैं। अगर APIs आपके लिए नए हैं, तो API क्या है से शुरू करें।
REST API कब चाहिए
- आपके वेब फ्रंटएंड को सर्वर से डेटा सेव और लोड करना है
- मोबाइल ऐप, पार्टनर या ऑटोमेशन टूल को आपके डेटा तक पहुँच चाहिए
- दूसरी सर्विसेज़ आपको इवेंट भेजती हैं (webhooks)
- आप फ्रंटएंड और बैकएंड टीमों के बीच काम बाँट रहे हैं
REST सबसे आम स्टाइल है, लेकिन अकेला विकल्प नहीं। REST बनाम GraphQL बताता है कि एक लचीला क्वेरी endpoint कब बेहतर बैठता है।
पहले डिज़ाइन: रिसोर्स और रूट
अपने ऐप के नाउन और लोग उनके साथ क्या करते हैं, यह लिखें। एक सरल booking ऐप के लिए:
| मेथड | रूट | क्या करता है | सफलता कोड |
|---|---|---|---|
GET | /api/bookings | कॉलर की bookings की लिस्ट (पेजिनेटेड) | 200 |
POST | /api/bookings | नई booking बनाएं | 201 |
GET | /api/bookings/{id} | एक booking पाएं | 200 |
PATCH | /api/bookings/{id} | कुछ फ़ील्ड बदलें | 200 |
DELETE | /api/bookings/{id} | booking रद्द करें | 204 |
GET | /api/health | मॉनिटरिंग के लिए हेल्थ चेक | 200 |
ये create, read, update और delete पर मैप होते हैं; देखें CRUD क्या है। कुछ उपयोगी नियम:
- URL में बहुवचन नाउन, कोई क्रिया नहीं:
/bookings,/getBookingsनहीं। - स्वामित्व स्पष्ट करने के लिए सिर्फ़ एक स्तर का नेस्टिंग:
/bookings/{id}/notes। - CRUD से अलग कार्य sub-resources हो सकते हैं:
POST /bookings/{id}/cancelएक जादुई PATCH से साफ़ है। - फ़ील्ड के नाम में एकरूपता, जैसे हर जगह
created_at।
स्टेटस कोड और एरर
मानक HTTP कोड इस्तेमाल करें ताकि क्लाइंट टेक्स्ट पढ़े बिना समझ सके कि क्या हुआ:
| कोड | अर्थ | कब इस्तेमाल करें |
|---|---|---|
| 200 | OK | सफल read या update |
| 201 | Created | POST से कुछ बना |
| 204 | No Content | सफलता, लौटाने को कुछ नहीं |
| 400 | Bad Request | इनपुट वैलिडेशन में फेल |
| 401 | Unauthorized | लॉग इन नहीं या गलत token |
| 403 | Forbidden | लॉग इन है पर अनुमति नहीं |
| 404 | Not Found | मौजूद नहीं, या कॉलर को पता नहीं होना चाहिए कि यह है |
| 409 | Conflict | डुप्लिकेट, या स्लॉट पहले से बुक है |
| 429 | Too Many Requests | रेट लिमिट पार |
| 500 | Server Error | आपकी तरफ़ कुछ टूटा |
एरर एक ही सुसंगत JSON आकार में लौटाएं, जैसे {"error": {"code": "slot_taken", "message": "That time is no longer available."}}, और रिस्पॉन्स में कभी stack trace या database एरर न डालें।
विकल्प और ट्रेड-ऑफ़
| फ़ैसला | सरल विकल्प | दूसरा विकल्प |
|---|---|---|
| API कहाँ रहता है | आपके वेब फ्रेमवर्क में API रूट | अलग API सर्विस, कई क्लाइंट या अलग भाषा के लिए उपयोगी |
| ऑथेंटिकेशन | आपके अपने वेब ऐप के लिए session cookies | मोबाइल ऐप और थर्ड-पार्टी के लिए tokens (bearer tokens या API keys) |
| पेजिनेशन | ?page=2&limit=20 | cursor-based (?after=...), बड़ी और बदलती लिस्ट के लिए ज़्यादा स्थिर |
| वर्ज़निंग | बाहरी उपयोगकर्ता आने तक कोई नहीं | जब दूसरे निर्भर हों, तब path में /v1/ |
| दस्तावेज़ | रूट बताती एक README | OpenAPI spec, जिससे टूल इंटरैक्टिव डॉक्स और क्लाइंट कोड बना सकते हैं |
चरण-दर-चरण
- ऊपर बताए अनुसार रिसोर्स और रूट सूचीबद्ध करें, और हर रूट को कौन कॉल कर सकता है यह भी।
- अपने database में ज़रूरी फ़ील्ड और संबंधों के साथ डेटा मॉडल बनाएं।
- पहले read रूट बनाएं, फिर create, update और delete।
- हर write पर इनपुट वैलिडेट करें एक schema library से: ज़रूरी फ़ील्ड, टाइप, लंबाई, अनुमत मान। अज्ञात फ़ील्ड अस्वीकार करें।
- ऑथेंटिकेशन जोड़ें, फिर हर रिकॉर्ड पर ऑथराइज़ेशन:
/bookings/42लोड करते समय जाँचना होगा कि booking 42 कॉलर की है, सिर्फ़ यह नहीं कि कोई लॉग इन है। - हर लिस्ट को पेजिनेट करें और पेज का आकार सीमित करें।
- लॉग इन और महंगे रूट पर रेट लिमिट लगाएं। देखें रेट लिमिटिंग।
- CORS तभी सेट करें जब दूसरे डोमेन के browsers को API कॉल करनी हो, और वे origins साफ़-साफ़ लिखें। CORS एरर कैसे ठीक करें में वे एरर समझाए गए हैं जो आपको दिखेंगे।
- हर रूट के लिए दस्तावेज़ और टेस्ट लिखें, विफलता के मामलों सहित।
- डिप्लॉय करें: secrets environment variables में, HTTPS, लॉग और हेल्थ चेक के साथ।
अपने AI बिल्डर को दिए जाने वाले प्रॉम्प्ट
स्कैफ़ोल्ड:
bookings के लिए REST API बनाओ, इन रूट के साथ: GET /api/health, GET /api/bookings (पेजिनेटेड, प्रति पेज अधिकतम 50), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id। डेटा हमारे database में स्टोर करो। request body को schema library से वैलिडेट करो और अज्ञात फ़ील्ड अस्वीकार करो। JSON एरर {"error": {"code", "message"}} के रूप में लौटाओ, सही स्टेटस कोड के साथ (400, 401, 403, 404, 409)। सीक्रेट्स environment variables में रखो।
सुरक्षा:
हर bookings रूट पर लॉग इन ज़रूरी करो। हर read, update और delete पर सर्वर पर जाँचो कि booking मौजूदा उपयोगकर्ता की है; न हो तो 404 लौटाओ। request body से user ID या roles कभी स्वीकार न करो। POST /api/bookings को प्रति उपयोगकर्ता 20 प्रति मिनट पर सीमित करो। सर्वर पर एरर लॉग करो, लेकिन stack trace कभी न लौटाओ।
दस्तावेज़:
इन रूट का OpenAPI विवरण लिखो, और हर रूट के उदाहरण request और response के साथ एक छोटी README।
अपने API का टेस्ट
फ्रंटएंड के बाहर से टेस्ट करें, क्योंकि हमलावर भी यही करेंगे:
- हर रूट सही इनपुट के साथ काम करता है और दस्तावेज़ वाला आकार और कोड लौटाता है
- गायब या गलत फ़ील्ड पर स्पष्ट संदेश के साथ 400 मिलता है
- बिना token के हर सुरक्षित रूट पर 401 मिलता है
- उपयोगकर्ता A, उपयोगकर्ता B का रिकॉर्ड ID से माँगे तो 404 या 403 मिलता है
- लिस्ट पेजिनेटेड है; बहुत बड़ा
limitसीमित होता है - डुप्लिकेट या टकराने वाले create पर 409 मिलता है, 500 नहीं
- रेट लिमिट पर 429 मिलता है
- एरर रिस्पॉन्स में stack trace, SQL या secrets नहीं हैं
- CORS सिर्फ़ आपके इच्छित origins को अनुमति देता है
आम गलतियाँ
- लॉग इन जाँचना, पर मालिकाना हक नहीं। सबसे आम API छेद: कोई भी लॉग इन उपयोगकर्ता ID बदलकर कोई भी रिकॉर्ड पढ़ सकता है।
- क्लाइंट पर भरोसा। request body की कीमतें, roles और user IDs बदले जा सकते हैं।
- पूरी database rows लौटाना। Password hashes और आंतरिक फ़ील्ड लीक होते हैं। तय करें कि हर रिस्पॉन्स में क्या जाएगा।
- बिना सीमा की लिस्ट। हर रिकॉर्ड के लिए एक रिक्वेस्ट पूरे ऐप को धीमा कर सकती है।
200 OKके अंदर एरर संदेश। क्लाइंट और मॉनिटरिंग नहीं जान पाते कि विफलता हुई।- CORS सब कुछ अनुमत करने पर ऐसे API पर जो cookies इस्तेमाल करता है।
- कोई हेल्थ चेक या लॉग नहीं, इसलिए आउटेज के बारे में उपयोगकर्ताओं से पता चलता है।
लॉन्च से पहले की व्यापक जाँच के लिए, देखें AI से बने ऐप्स का सुरक्षा चेकलिस्ट।
Mythex में REST API बनाना
आप Mythex से अपने ऐप के हिस्से के रूप में या एक अलग सर्विस के रूप में API माँग सकते हैं। डॉक्स के REST API backend रेसिपी में एक स्टार्टर प्रॉम्प्ट है: अपना फ्रेमवर्क और रूट बताएं, स्पष्ट JSON एरर माँगें, सीक्रेट्स environment variables में रखें, और Dockerfile शामिल करें। Node, Python, C#, Java और अन्य में बने container backends Dockerfile के ज़रिए प्रकाशित होते हैं, और Mythex Publish से डिप्लॉय संभालता है (API backends)। एक प्रोजेक्ट वेबसाइट और API सर्वर साथ-साथ चला सकता है, और आप preview में उनके बीच बदल सकते हैं। Keys को प्रोजेक्ट secrets के रूप में रखें, और अगर API को database चाहिए तो चैट में माँगें। अपने API के साथ चलने वाले scheduled काम के लिए, देखें बैकग्राउंड जॉब कैसे चलाएं।
सवाल
REST API क्या है?
REST API वह तरीका है जिससे प्रोग्राम HTTP के ज़रिए आपके ऐप का डेटा इस्तेमाल कर सकते हैं। डेटा का हर प्रकार एक रिसोर्स होता है जिसका अपना URL होता है, जैसे /orders, और मानक मेथड उस पर काम करते हैं: पढ़ने के लिए GET, बनाने के लिए POST, अपडेट करने के लिए PATCH या PUT, और हटाने के लिए DELETE। डेटा आमतौर पर JSON में भेजा जाता है।
REST API किस भाषा में बनाना चाहिए?
वही भाषा चुनें जिसे आप या आपकी टीम संभाल सके। Express या Fastify के साथ Node.js, FastAPI के साथ Python, और C# या Java फ्रेमवर्क, सभी अच्छे काम करते हैं। रूट, स्टेटस कोड, वैलिडेशन और ऑथेंटिकेशन के डिज़ाइन नियम भाषा से ज़्यादा मायने रखते हैं।
REST API को सुरक्षित कैसे रखें?
हर गैर-सार्वजनिक रूट पर ऑथेंटिकेशन ज़रूरी करें, सर्वर पर जाँचें कि कॉलर उस खास रिकॉर्ड को देख सकता है या नहीं, सारे इनपुट वैलिडेट करें, HTTPS इस्तेमाल करें, रिक्वेस्ट की रेट लिमिट तय करें, और सीक्रेट्स को environment variables में रखें। क्लाइंट से आए ID या रोल पर कभी भरोसा न करें।
क्या REST API के लिए अलग बैकएंड चाहिए?
हमेशा नहीं। Next.js जैसे फ्रेमवर्क पेजों के साथ API रूट भी सर्व कर सकते हैं। अलग API सर्विस तब समझदारी है जब कई क्लाइंट (वेब, मोबाइल, पार्टनर) उसका उपयोग करें, या जब उसे अपनी भाषा या स्केलिंग की ज़रूरत हो।