मराठी

Next.js API रूट्स एक्सप्लोर करा आणि तुमच्या React ॲप्लिकेशन्समध्ये फुल-स्टॅक डेव्हलपमेंट क्षमता अनलॉक करा. पॅटर्न्स, सर्वोत्तम पद्धती आणि डिप्लोयमेंट स्ट्रॅटेजीज शिका.

Next.js API रूट्स: फुल-स्टॅक डेव्हलपमेंट पॅटर्न्स

Next.js ने कार्यक्षम आणि स्केलेबल वेब ॲप्लिकेशन्स तयार करण्यासाठी एक मजबूत फ्रेमवर्क प्रदान करून React डेव्हलपमेंटमध्ये क्रांती घडवली आहे. API रूट्स हे त्याचे एक प्रमुख वैशिष्ट्य आहे, जे डेव्हलपर्सना त्यांच्या Next.js प्रोजेक्ट्समध्ये थेट बॅकएंड कार्यक्षमता तयार करण्यास सक्षम करते. हा दृष्टिकोन डेव्हलपमेंटला सुव्यवस्थित करतो, डिप्लोयमेंट सोपे करतो आणि शक्तिशाली फुल-स्टॅक क्षमता अनलॉक करतो.

Next.js API रूट्स म्हणजे काय?

Next.js API रूट्स हे सर्व्हरलेस फंक्शन्स आहेत जे थेट तुमच्या /pages/api डिरेक्टरीमध्ये लिहिले जातात. या डिरेक्टरीमधील प्रत्येक फाईल एक API एंडपॉइंट बनते, जी HTTP रिक्वेस्ट्सना आपोआप संबंधित फंक्शनकडे पाठवते. यामुळे वेगळ्या बॅकएंड सर्व्हरची गरज नाहीशी होते, ज्यामुळे तुमच्या ॲप्लिकेशनचे आर्किटेक्चर सोपे होते आणि ऑपरेशनल खर्च कमी होतो.

त्यांना तुमच्या Next.js ॲपमध्ये राहणाऱ्या लहान सर्व्हरलेस फंक्शन्सप्रमाणे समजा. ते GET, POST, PUT, DELETE सारख्या HTTP रिक्वेस्ट्सना प्रतिसाद देतात आणि डेटाबेस, बाह्य APIs आणि इतर सर्व्हर-साइड संसाधनांशी संवाद साधू शकतात. महत्त्वाचे म्हणजे, ते फक्त सर्व्हरवर चालतात, वापरकर्त्याच्या ब्राउझरमध्ये नाही, ज्यामुळे API की सारख्या संवेदनशील डेटाची सुरक्षितता सुनिश्चित होते.

API रूट्सचे मुख्य फायदे

API रूट्ससह सुरुवात करणे

Next.js मध्ये API रूट तयार करणे सोपे आहे. फक्त /pages/api डिरेक्टरीमध्ये एक नवीन फाईल तयार करा. फाईलचे नाव रूटचा मार्ग ठरवेल. उदाहरणार्थ, /pages/api/hello.js नावाची फाईल तयार केल्यास /api/hello वर ऍक्सेस करता येणारा API एंडपॉइंट तयार होईल.

उदाहरण: एक साधा ग्रीटिंग API

येथे API रूटचे एक मूलभूत उदाहरण आहे जे JSON प्रतिसाद परत करते:


// pages/api/hello.js

export default function handler(req, res) {
  res.status(200).json({ message: 'Next.js API रूट कडून नमस्कार!' });
}

हा कोड एक असिंक्रोनस फंक्शन handler परिभाषित करतो जे दोन वितर्क (arguments) स्वीकारतो:

हे फंक्शन HTTP स्टेटस कोड 200 (OK) वर सेट करते आणि एका मेसेजसह JSON प्रतिसाद परत करते.

वेगवेगळ्या HTTP मेथड्स हाताळणे

तुम्ही तुमच्या API रूटमध्ये req.method प्रॉपर्टी तपासून वेगवेगळ्या HTTP मेथड्स (GET, POST, PUT, DELETE, इत्यादी) हाताळू शकता. यामुळे तुम्हाला सहजपणे RESTful APIs तयार करता येतात.


// pages/api/todos.js

export default async function handler(req, res) {
  if (req.method === 'GET') {
    // डेटाबेसमधून सर्व todos मिळवा
    const todos = await fetchTodos();
    res.status(200).json(todos);
  } else if (req.method === 'POST') {
    // नवीन todo तयार करा
    const newTodo = await createTodo(req.body);
    res.status(201).json(newTodo);
  } else {
    // असमर्थित मेथड्स हाताळा
    res.status(405).json({ message: 'मेथडला परवानगी नाही' });
  }
}

हे उदाहरण /api/todos या काल्पनिक एंडपॉइंटसाठी GET आणि POST रिक्वेस्ट्स कशा हाताळायच्या हे दाखवते. यात असमर्थित मेथड्ससाठी एरर हँडलिंगचाही समावेश आहे.

API रूट्ससह फुल-स्टॅक डेव्हलपमेंट पॅटर्न्स

Next.js API रूट्स विविध फुल-स्टॅक डेव्हलपमेंट पॅटर्न्सना सक्षम करतात. येथे काही सामान्य उपयोग आहेत:

1. डेटा फेचिंग आणि मॅनिप्युलेशन

API रूट्सचा उपयोग डेटाबेस, बाह्य APIs किंवा इतर डेटा स्त्रोतांकडून डेटा मिळवण्यासाठी केला जाऊ शकतो. त्यांचा उपयोग डेटा मॅनिप्युलेट करण्यासाठी, जसे की रेकॉर्ड तयार करणे, अपडेट करणे किंवा डिलीट करणे यासाठीही केला जाऊ शकतो.

उदाहरण: डेटाबेसमधून युझर डेटा मिळवणे


// pages/api/users/[id].js
import { query } from '../../../lib/db';

export default async function handler(req, res) {
  const { id } = req.query;

  try {
    const results = await query(
      'SELECT * FROM users WHERE id = ?',
      [id]
    );

    if (results.length === 0) {
      return res.status(404).json({ message: 'युझर सापडला नाही' });
    }

    res.status(200).json(results[0]);
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: 'अंतर्गत सर्व्हर एरर' });
  }
}

हे उदाहरण URL मध्ये प्रदान केलेल्या युझर आयडीच्या आधारावर डेटाबेसमधून युझर डेटा मिळवते. हे डेटाबेसशी संवाद साधण्यासाठी डेटाबेस क्वेरी लायब्ररी (lib/db मध्ये असल्याचे गृहित धरले आहे) वापरते. SQL इंजेक्शनच्या धोक्यांपासून बचाव करण्यासाठी पॅरामीटराइज्ड क्वेरींचा वापर लक्षात घ्या.

2. ऑथेंटिकेशन आणि ऑथोरायझेशन

API रूट्सचा उपयोग ऑथेंटिकेशन आणि ऑथोरायझेशन लॉजिक लागू करण्यासाठी केला जाऊ शकतो. तुम्ही त्यांचा उपयोग युझर क्रेडेन्शियल्सची पडताळणी करण्यासाठी, JWT टोकन तयार करण्यासाठी आणि संवेदनशील संसाधनांचे संरक्षण करण्यासाठी करू शकता.

उदाहरण: युझर ऑथेंटिकेशन


// pages/api/login.js
import bcrypt from 'bcryptjs';
import jwt from 'jsonwebtoken';
import { query } from '../../lib/db';

export default async function handler(req, res) {
  if (req.method === 'POST') {
    const { email, password } = req.body;

    try {
      const results = await query(
        'SELECT * FROM users WHERE email = ?',
        [email]
      );

      if (results.length === 0) {
        return res.status(401).json({ message: 'अवैध क्रेडेन्शियल्स' });
      }

      const user = results[0];

      const passwordMatch = await bcrypt.compare(password, user.password);

      if (!passwordMatch) {
        return res.status(401).json({ message: 'अवैध क्रेडेन्शियल्स' });
      }

      const token = jwt.sign(
        { userId: user.id, email: user.email },
        process.env.JWT_SECRET,
        { expiresIn: '1h' }
      );

      res.status(200).json({ token });
    } catch (error) {
      console.error(error);
      res.status(500).json({ message: 'अंतर्गत सर्व्हर एरर' });
    }
  } else {
    res.status(405).json({ message: 'मेथडला परवानगी नाही' });
  }
}

हे उदाहरण प्रदान केलेला पासवर्ड डेटाबेसमध्ये संग्रहित हॅश केलेल्या पासवर्डशी तुलना करून युझरना प्रमाणित करते. जर क्रेडेन्शियल्स वैध असतील, तर ते JWT टोकन तयार करते आणि क्लायंटला परत करते. क्लायंट त्यानंतरच्या रिक्वेस्ट्सना प्रमाणित करण्यासाठी या टोकनचा वापर करू शकतो.

3. फॉर्म हँडलिंग आणि डेटा सबमिशन

API रूट्सचा उपयोग फॉर्म सबमिशन हाताळण्यासाठी आणि क्लायंटकडून पाठवलेला डेटा प्रोसेस करण्यासाठी केला जाऊ शकतो. हे संपर्क फॉर्म, नोंदणी फॉर्म आणि इतर इंटरॲक्टिव्ह घटक तयार करण्यासाठी उपयुक्त आहे.

उदाहरण: संपर्क फॉर्म सबमिशन


// pages/api/contact.js
import { sendEmail } from '../../lib/email';

export default async function handler(req, res) {
  if (req.method === 'POST') {
    const { name, email, message } = req.body;

    try {
      await sendEmail({
        to: 'admin@example.com',
        subject: 'New Contact Form Submission',
        text: `Name: ${name}\nEmail: ${email}\nMessage: ${message}`,
      });

      res.status(200).json({ message: 'ईमेल यशस्वीरित्या पाठवला' });
    } catch (error) {
      console.error(error);
      res.status(500).json({ message: 'ईमेल पाठवण्यात अयशस्वी' });
    }
  } else {
    res.status(405).json({ message: 'मेथडला परवानगी नाही' });
  }
}

हे उदाहरण प्रशासकाला ईमेल पाठवून संपर्क फॉर्म सबमिशन हाताळते. हे ईमेल पाठवण्यासाठी ईमेल पाठवणाऱ्या लायब्ररीचा (lib/email मध्ये असल्याचे गृहित धरले आहे) वापर करते. तुम्ही admin@example.com ला प्रत्यक्ष प्राप्तकर्त्याच्या ईमेल ॲड्रेसने बदलावे.

4. वेबहुक्स आणि इव्हेंट हँडलिंग

API रूट्सचा उपयोग वेबहुक्स हाताळण्यासाठी आणि बाह्य सेवांच्या इव्हेंट्सना प्रतिसाद देण्यासाठी केला जाऊ शकतो. यामुळे तुम्हाला तुमचे Next.js ॲप्लिकेशन इतर प्लॅटफॉर्मसह एकत्रित करण्यास आणि कार्ये स्वयंचलित करण्यास अनुमती मिळते.

उदाहरण: स्ट्राइप वेबहुक हाताळणे


// pages/api/stripe-webhook.js
import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

export const config = {
  api: {
    bodyParser: false, // डीफॉल्ट बॉडी पार्सिंग अक्षम करा
  },
};

async function buffer(req) {
  const chunks = [];
  for await (const chunk of req) {
    chunks.push(chunk);
  }
  return Buffer.concat(chunks).toString();
}

export default async function handler(req, res) {
  if (req.method === 'POST') {
    const sig = req.headers['stripe-signature'];

    let event;

    try {
      const buf = await buffer(req);
      event = stripe.webhooks.constructEvent(buf, sig, process.env.STRIPE_WEBHOOK_SECRET);
    } catch (err) {
      console.log(`वेबहुक एरर: ${err.message}`);
      res.status(400).send(`वेबहुक एरर: ${err.message}`);
      return;
    }

    // इव्हेंट हाताळा
    switch (event.type) {
      case 'payment_intent.succeeded':
        const paymentIntent = event.data.object;
        console.log(`${paymentIntent.amount} साठी PaymentIntent यशस्वी झाला!`);
        // नंतर यशस्वी पेमेंट इंटेन्ट हाताळण्यासाठी एक मेथड परिभाषित करा आणि कॉल करा.
        // handlePaymentIntentSucceeded(paymentIntent);
        break;
      case 'payment_method.attached':
        const paymentMethod = event.data.object;
        // नंतर PaymentMethod च्या यशस्वी अटॅचमेंटसाठी एक मेथड परिभाषित करा आणि कॉल करा.
        // handlePaymentMethodAttached(paymentMethod);
        break;
      default:
        // अनपेक्षित इव्हेंट प्रकार
        console.log(`न हाताळलेला इव्हेंट प्रकार ${event.type}.`);
    }

    // इव्हेंट मिळाल्याची पोचपावती देण्यासाठी 200 प्रतिसाद परत करा
    res.status(200).json({ received: true });
  } else {
    res.setHeader('Allow', 'POST');
    res.status(405).end('Method Not Allowed');
  }
}

हे उदाहरण स्वाक्षरीची पडताळणी करून आणि इव्हेंट डेटावर प्रक्रिया करून स्ट्राइप वेबहुक हाताळते. हे डीफॉल्ट बॉडी पार्सर अक्षम करते आणि कच्चा रिक्वेस्ट बॉडी वाचण्यासाठी कस्टम बफर फंक्शन वापरते. डीफॉल्ट बॉडी पार्सर अक्षम करणे महत्त्वाचे आहे कारण स्ट्राइपला स्वाक्षरी पडताळणीसाठी कच्च्या बॉडीची आवश्यकता असते. तुमच्या स्ट्राइप डॅशबोर्डमध्ये तुमचा स्ट्राइप वेबहुक एंडपॉइंट कॉन्फिगर करणे आणि STRIPE_WEBHOOK_SECRET एनवायरमेंट व्हेरिएबल सेट करणे लक्षात ठेवा.

API रूट्ससाठी सर्वोत्तम पद्धती

तुमच्या API रूट्सची गुणवत्ता आणि देखभालक्षमता सुनिश्चित करण्यासाठी, या सर्वोत्तम पद्धतींचे अनुसरण करा:

1. तुमचा कोड मॉड्युलराइज करा

मोठे, मोनोलिथिक API रूट्स लिहिणे टाळा. त्याऐवजी, तुमचा कोड लहान, पुन्हा वापरण्यायोग्य मॉड्यूल्समध्ये विभाजित करा. यामुळे तुमचा कोड समजण्यास, तपासण्यास आणि सांभाळण्यास सोपा होतो.

2. एरर हँडलिंग लागू करा

तुमच्या API रूट्समध्ये एरर्स योग्यरित्या हाताळा. अपवाद (exceptions) पकडण्यासाठी try...catch ब्लॉक्स वापरा आणि क्लायंटला योग्य एरर प्रतिसाद परत करा. डीबगिंग आणि मॉनिटरिंगमध्ये मदतीसाठी एरर्स लॉग करा.

3. इनपुट डेटा प्रमाणित करा

सुरक्षेतील त्रुटी टाळण्यासाठी आणि डेटाची अखंडता सुनिश्चित करण्यासाठी नेहमी क्लायंटकडून आलेला इनपुट डेटा प्रमाणित करा. प्रमाणीकरण स्कीमा परिभाषित करण्यासाठी आणि डेटा मर्यादा लागू करण्यासाठी Joi किंवा Yup सारख्या व्हॅलिडेशन लायब्ररी वापरा.

4. संवेदनशील डेटा संरक्षित करा

API की आणि डेटाबेस क्रेडेन्शियल्ससारखा संवेदनशील डेटा एनवायरमेंट व्हेरिएबल्समध्ये संग्रहित करा. संवेदनशील डेटा कधीही तुमच्या कोड रिपॉझिटरीमध्ये कमिट करू नका.

5. रेट लिमिटिंग लागू करा

रेट लिमिटिंग लागू करून तुमच्या API रूट्सचे गैरवापरापासून संरक्षण करा. हे क्लायंटने दिलेल्या वेळेत किती रिक्वेस्ट्स कराव्यात यावर मर्यादा घालते. express-rate-limit किंवा limiter सारख्या रेट लिमिटिंग लायब्ररी वापरा.

6. API की सुरक्षित करा

API की थेट क्लायंट-साइड कोडमध्ये उघड करू नका. तुमच्या API की अनधिकृत प्रवेशापासून संरक्षित करण्यासाठी नेहमी तुमच्या API रूट्सद्वारे रिक्वेस्ट्स प्रॉक्सी करा. API की तुमच्या सर्व्हरवरील एनवायरमेंट व्हेरिएबल्समध्ये सुरक्षितपणे संग्रहित करा.

7. एनवायरमेंट व्हेरिएबल्स वापरा

तुमच्या कोडमध्ये कॉन्फिगरेशन व्हॅल्यूज हार्डकोड करणे टाळा. त्याऐवजी, कॉन्फिगरेशन सेटिंग्ज संग्रहित करण्यासाठी एनवायरमेंट व्हेरिएबल्स वापरा. यामुळे वेगवेगळ्या वातावरणात (डेव्हलपमेंट, स्टेजिंग, प्रोडक्शन) तुमचे ॲप्लिकेशन व्यवस्थापित करणे सोपे होते.

8. लॉगिंग आणि मॉनिटरिंग

तुमच्या API रूट्सच्या कामगिरीचा मागोवा घेण्यासाठी लॉगिंग आणि मॉनिटरिंग लागू करा. एरर्स, चेतावणी आणि यशस्वी रिक्वेस्ट्ससारख्या महत्त्वाच्या घटना लॉग करा. रिक्वेस्ट लेटन्सी, एरर रेट्स आणि संसाधन वापरासारख्या मेट्रिक्सचा मागोवा घेण्यासाठी मॉनिटरिंग साधने वापरा. Sentry, Datadog किंवा New Relic सारख्या सेवा उपयुक्त ठरू शकतात.

डिप्लॉयमेंट संबंधित विचार

Next.js API रूट्स सर्व्हरलेस प्लॅटफॉर्मवर डिप्लोय करण्यासाठी डिझाइन केलेले आहेत. लोकप्रिय डिप्लोयमेंट पर्यायांमध्ये यांचा समावेश आहे:

API रूट्ससह तुमचे Next.js ॲप्लिकेशन डिप्लोय करताना, डिप्लोयमेंट प्लॅटफॉर्मवर तुमचे एनवायरमेंट व्हेरिएबल्स योग्यरित्या कॉन्फिगर केले आहेत याची खात्री करा. तसेच, सर्व्हरलेस फंक्शन्सच्या कोल्ड स्टार्ट वेळेचा विचार करा, जो तुमच्या API रूट्सच्या सुरुवातीच्या प्रतिसाद वेळेवर परिणाम करू शकतो. तुमचा कोड ऑप्टिमाइझ करणे आणि प्रोव्हिजन्ड कनकरन्सीसारख्या तंत्रांचा वापर केल्याने कोल्ड स्टार्ट समस्या कमी होण्यास मदत होऊ शकते.

निष्कर्ष

Next.js API रूट्स React सह फुल-स्टॅक ॲप्लिकेशन्स तयार करण्याचा एक शक्तिशाली आणि सोयीस्कर मार्ग प्रदान करतात. सर्व्हरलेस फंक्शन्सचा फायदा घेऊन, तुम्ही डेव्हलपमेंट सोपे करू शकता, ऑपरेशनल खर्च कमी करू शकता आणि ॲप्लिकेशनची कार्यक्षमता सुधारू शकता. या लेखात नमूद केलेल्या सर्वोत्तम पद्धतींचे अनुसरण करून, तुम्ही तुमच्या Next.js ॲप्लिकेशन्सना शक्ती देणारे मजबूत आणि देखभाल करण्यायोग्य API रूट्स तयार करू शकता.

तुम्ही साधा संपर्क फॉर्म तयार करत असाल किंवा एक जटिल ई-कॉमर्स प्लॅटफॉर्म, Next.js API रूट्स तुम्हाला तुमची डेव्हलपमेंट प्रक्रिया सुव्यवस्थित करण्यास आणि अपवादात्मक युझर अनुभव देण्यास मदत करू शकतात.

अधिक शिक्षण