தமிழ்

Next.js API Routes-ஐப் பயன்படுத்தி, உங்கள் Next.js பயன்பாட்டிலேயே சர்வர்லெஸ் பேக்கெண்டுகளை உருவாக்குவது எப்படி என்பதை அறியுங்கள். இந்த வழிகாட்டி, அடிப்படை அமைப்பிலிருந்து அங்கீகாரம், தரவு நிலைத்தன்மை மற்றும் பலவற்றைக் கையாள்வதற்கான மேம்பட்ட நுட்பங்கள் வரை அனைத்தையும் உள்ளடக்கியது.

Next.js API Routes: உங்கள் பேக்கெண்டை எளிதாக உருவாக்குதல்

Next.js அதன் சக்திவாய்ந்த அம்சங்கள் மற்றும் உள்ளுணர்வு அமைப்புடன் ஃப்ரண்ட்-எண்ட் மேம்பாட்டில் ஒரு புரட்சியை ஏற்படுத்தியுள்ளது. ஆனால் அது பேக்கெண்ட் மேம்பாட்டையும் கணிசமாக எளிதாக்க முடியும் என்பது உங்களுக்குத் தெரியுமா? Next.js API Routes உங்கள் Next.js பயன்பாட்டிலேயே சர்வர்லெஸ் API எண்ட்பாயிண்ட்களை உருவாக்க உங்களை அனுமதிக்கின்றன, பல சந்தர்ப்பங்களில் ஒரு தனி பேக்கெண்ட் சர்வரின் தேவையை நீக்குகிறது. இந்த விரிவான வழிகாட்டி, Next.js API Routes-ஐப் பயன்படுத்தி ஒரு வலுவான மற்றும் அளவிடக்கூடிய பேக்கெண்டை உருவாக்குவதற்கான செயல்முறை மூலம் உங்களை அழைத்துச் செல்லும்.

Next.js API Routes என்றால் என்ன?

API Routes என்பவை உங்கள் Next.js திட்டத்தில் /pages/api கோப்பகத்தில் நீங்கள் உருவாக்கும் சர்வர்லெஸ் செயல்பாடுகள் ஆகும். இந்த செயல்பாடுகள் உள்வரும் HTTP கோரிக்கைகளைக் கையாளுகின்றன மற்றும் பதில்களைத் தருகின்றன, ஒரு பாரம்பரிய பேக்கெண்ட் API போலவே. முக்கிய வேறுபாடு என்னவென்றால், அவை சர்வர்லெஸ் செயல்பாடுகளாகப் பயன்படுத்தப்படுகின்றன, அதாவது நீங்கள் சர்வர்களையோ அல்லது உள்கட்டமைப்பையோ நிர்வகிக்கத் தேவையில்லை.

அவற்றை உங்கள் Next.js ஃப்ரண்ட்-எண்டுடன் தடையின்றி ஒருங்கிணைக்கப்பட்ட, இலகுரக, தேவைக்கேற்ப பேக்கெண்ட் செயல்பாடுகளாக நினைத்துப் பாருங்கள்.

Next.js API Routes-ஐப் பயன்படுத்துவதன் நன்மைகள்

Next.js API Routes உடன் தொடங்குதல்

ஒரு JSON பதிலை வழங்கும் ஒரு எளிய API ரூட்டை உருவாக்குவோம். முதலில், உங்களிடம் ஒரு Next.js திட்டம் அமைக்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள். இல்லையென்றால், இதைப் பயன்படுத்தி ஒன்றை உருவாக்கவும்:

npx create-next-app my-app
cd my-app

இப்போது, /pages/api கோப்பகத்தின் உள்ளே hello.js என்ற கோப்பை உருவாக்கவும்:

// pages/api/hello.js
export default function handler(req, res) {
  res.status(200).json({ name: 'John Doe' })
}

இந்தக் குறியீடு 'John Doe' என்ற பெயரைக் கொண்ட ஒரு JSON ஆப்ஜெக்டுடன் பதிலளிக்கும் ஒரு எளிய API ரூட்டை வரையறுக்கிறது. இந்த API ரூட்டை அணுக, உங்கள் Next.js மேம்பாட்டு சேவையகத்தைத் தொடங்கவும்:

npm run dev

பின்னர், உங்கள் உலாவியைத் திறந்து http://localhost:3000/api/hello என்பதற்குச் செல்லவும். பின்வரும் JSON பதிலை நீங்கள் காண வேண்டும்:

{"name": "John Doe"}

API Route ஹேண்ட்லரைப் புரிந்துகொள்ளுதல்

உங்கள் API ரூட்டில் உள்ள handler செயல்பாடு இரண்டு வாதங்களைப் பெறுகிறது:

வெவ்வேறு வகையான கோரிக்கைகளைக் கையாள, கோரிக்கை உள்ளடக்கத்திலிருந்து தரவைப் படிக்க, பதில் தலைப்புகளை அமைக்க மற்றும் வெவ்வேறு வகையான பதில்களை அனுப்ப இந்த ஆப்ஜெக்ட்களைப் பயன்படுத்தலாம்.

வெவ்வேறு HTTP முறைகளைக் கையாளுதல்

உள்வரும் கோரிக்கையின் HTTP முறையைத் தீர்மானிக்கவும், அதற்கேற்ப வெவ்வேறு முறைகளைக் கையாளவும் req.method பண்பைப் பயன்படுத்தலாம். எடுத்துக்காட்டாக:

// pages/api/method.js
export default function handler(req, res) {
  if (req.method === 'GET') {
    // GET கோரிக்கையைக் கையாளவும்
    res.status(200).json({ message: 'This is a GET request' })
  } else if (req.method === 'POST') {
    // POST கோரிக்கையைக் கையாளவும்
    res.status(200).json({ message: 'This is a POST request' })
  } else {
    // பிற முறைகளைக் கையாளவும்
    res.status(405).json({ message: 'Method Not Allowed' })
  }
}

இந்த எடுத்துக்காட்டில், API ரூட் GET மற்றும் POST கோரிக்கைகள் இரண்டையும் கையாளுகிறது. கோரிக்கை முறை GET ஆக இருந்தால், அது "This is a GET request" என்ற செய்தியைக் கொண்ட ஒரு JSON ஆப்ஜெக்டுடன் பதிலளிக்கிறது. கோரிக்கை முறை POST ஆக இருந்தால், அது "This is a POST request" என்ற செய்தியைக் கொண்ட ஒரு JSON ஆப்ஜெக்டுடன் பதிலளிக்கிறது. கோரிக்கை முறை வேறு ஏதேனும் இருந்தால், அது 405 Method Not Allowed பிழையுடன் பதிலளிக்கிறது.

கோரிக்கை உள்ளடக்கத்திலிருந்து தரவைப் படித்தல்

POST, PUT, மற்றும் PATCH கோரிக்கைகளுக்கு, நீங்கள் பெரும்பாலும் கோரிக்கை உள்ளடக்கத்திலிருந்து தரவைப் படிக்க வேண்டும். Next.js JSON மற்றும் URL-encoded கோரிக்கை உள்ளடக்கங்களைப் பாகுபடுத்த உள்ளமைக்கப்பட்ட ஆதரவை வழங்குகிறது. ஒரு JSON கோரிக்கை உள்ளடக்கத்தைப் பாகுபடுத்த, நீங்கள் req.body பண்பைப் பயன்படுத்தலாம். எடுத்துக்காட்டாக:

// pages/api/post.js
export default async function handler(req, res) {
  if (req.method === 'POST') {
    const { name, email } = req.body

    // தரவைச் செயலாக்கவும்
    console.log('Name:', name)
    console.log('Email:', email)

    res.status(200).json({ message: 'Data received successfully' })
  } else {
    res.status(405).json({ message: 'Method Not Allowed' })
  }
}

இந்த API ரூட்டைச் சோதிக்க, Postman அல்லது curl போன்ற ஒரு கருவியைப் பயன்படுத்தி ஒரு JSON உள்ளடக்கத்துடன் POST கோரிக்கையை அனுப்பலாம்:

curl -X POST -H "Content-Type: application/json" -d '{"name": "Jane Doe", "email": "jane.doe@example.com"}' http://localhost:3000/api/post

பதில் தலைப்புகளை அமைத்தல்

பதில் தலைப்புகளை அமைக்க நீங்கள் res.setHeader() முறையைப் பயன்படுத்தலாம். இது உள்ளடக்க வகை, கேச் கட்டுப்பாடு மற்றும் பிற முக்கியமான தகவல்களை அமைக்க பயனுள்ளதாக இருக்கும். எடுத்துக்காட்டாக:

// pages/api/headers.js
export default function handler(req, res) {
  res.setHeader('Content-Type', 'application/json')
  res.setHeader('Cache-Control', 's-maxage=3600')
  res.status(200).json({ message: 'Hello, world!' })
}

இந்த எடுத்துக்காட்டில், API ரூட் Content-Type தலைப்பை application/json என அமைக்கிறது, இது பதில் ஒரு JSON ஆப்ஜெக்ட் என்பதைக் குறிக்கிறது. இது Cache-Control தலைப்பை s-maxage=3600 என அமைக்கிறது, இது உலாவி மற்றும் CDN-க்கு பதிலை 1 மணி நேரம் வரை கேச் செய்யச் சொல்கிறது.

பிழை கையாளுதல்

உங்கள் API ரூட்களில் பிழைகளை நேர்த்தியாகக் கையாள்வது முக்கியம். விதிவிலக்குகளைப் பிடிக்கவும், கிளையண்டிற்கு பொருத்தமான பிழை பதில்களை அனுப்பவும் நீங்கள் try-catch பிளாக்குகளைப் பயன்படுத்தலாம். எடுத்துக்காட்டாக:

// pages/api/error.js
export default async function handler(req, res) {
  try {
    // ஒரு பிழையை உருவகப்படுத்தவும்
    throw new Error('Something went wrong')
  } catch (error) {
    console.error(error)
    res.status(500).json({ message: 'Internal Server Error' })
  }
}

இந்த எடுத்துக்காட்டில், API ரூட் ஒரு புதிய Error ஆப்ஜெக்டை வீசுவதன் மூலம் ஒரு பிழையை உருவகப்படுத்துகிறது. catch பிளாக் பிழையைப் பிடிக்கிறது, அதை கன்சோலில் பதிவுசெய்கிறது, மற்றும் கிளையண்டிற்கு 500 Internal Server Error பதிலை அனுப்புகிறது. உற்பத்தி சூழல்களுக்கு சென்ட்ரி அல்லது டேட்டாடாக் போன்ற ஒரு வலுவான பதிவு அமைப்பைப் பயன்படுத்துவதைக் கருத்தில் கொள்ளுங்கள்.

தரவுத்தளத்துடன் இணைத்தல்

API ரூட்களுக்கான மிகவும் பொதுவான பயன்பாட்டு நிகழ்வுகளில் ஒன்று தரவுத்தளத்துடன் இணைப்பதாகும். Next.js API Routes பல்வேறு தரவுத்தளங்களுடன் தடையின்றி ஒருங்கிணைக்கப்படுகின்றன, அவற்றுள்:

ஒரு Next.js API ரூட்டில் ஒரு MongoDB தரவுத்தளத்துடன் எவ்வாறு இணைப்பது என்பதற்கான ஒரு எடுத்துக்காட்டு இங்கே:

// pages/api/mongodb.js
import { MongoClient } from 'mongodb'

const uri = process.env.MONGODB_URI
const options = {}

let client
let clientPromise

if (!process.env.MONGODB_URI) {
  throw new Error('Please add your Mongo URI to .env.local')
}

if (process.env.NODE_ENV === 'development') {
  // மேம்பாட்டு பயன்முறையில், ஒரு குளோபல் மாறியைப் பயன்படுத்தவும், அதனால் மதிப்பு
  // HMR (Hot Module Replacement) ஆல் ஏற்படும் மாட்யூல் மறுஏற்றங்களுக்கு இடையில் பாதுகாக்கப்படுகிறது.
  if (!global._mongoClientPromise) {
    client = new MongoClient(uri, options)
    global._mongoClientPromise = client.connect()
  }
  clientPromise = global._mongoClientPromise
} else {
  // உற்பத்தி பயன்முறையில், ஒரு குளோபல் மாறியைப் பயன்படுத்தாமல் இருப்பது நல்லது.
  client = new MongoClient(uri, options)
  clientPromise = client.connect()
}

// ஒரு மாட்யூல்-ஸ்கோப் செய்யப்பட்ட MongoClient ப்ராமிஸை ஏற்றுமதி செய்யவும். இதை ஒரு
// தனி மாட்யூலில் செய்வதன் மூலம், கிளையண்ட் பல செயல்பாடுகளில் பாதுகாப்பாக மீண்டும் பயன்படுத்தப்படலாம்.
// பார்க்க: https://github.com/vercel/next.js/blob/canary/examples/with-mongodb/lib/mongodb.js
export default async function handler(req, res) {
  try {
    const client = await clientPromise
    const db = client.db(process.env.MONGODB_DB)
    const collection = db.collection('users')

    const users = await collection.find({}).toArray()

    res.status(200).json({ users })
  } catch (e) {
    console.error(e)
    res.status(500).json({ message: 'Failed to fetch users' })
  }
}

இந்தக் குறியீட்டை இயக்குவதற்கு முன், நீங்கள் mongodb பேக்கேஜை நிறுவியுள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்:

npm install mongodb

நீங்கள் MONGODB_URI மற்றும் MONGODB_DB சூழல் மாறிகளையும் அமைக்க வேண்டும். இந்த மாறிகள் உங்கள் .env.local கோப்பில் (அல்லது உற்பத்திக்கு உங்கள் ஹோஸ்டிங் வழங்குநரின் சூழல் மாறி அமைப்புகளில்) வரையறுக்கப்பட வேண்டும். MONGODB_URI உங்கள் MongoDB தரவுத்தளத்திற்கான இணைப்பு சரத்தைக் கொண்டுள்ளது, மற்றும் MONGODB_DB தரவுத்தளத்தின் பெயரைக் குறிப்பிடுகிறது.

அங்கீகாரம் மற்றும் அதிகாரமளித்தல்

உங்கள் API ரூட்களைப் பாதுகாப்பது பாதுகாப்பிற்கு மிக முக்கியம். Next.js API Routes பல்வேறு அங்கீகாரம் மற்றும் அதிகாரமளித்தல் நுட்பங்களைப் பயன்படுத்தி பாதுகாக்கப்படலாம், அவற்றுள்:

JWT அங்கீகாரத்தைப் பயன்படுத்தி ஒரு API ரூட்டை எவ்வாறு பாதுகாப்பது என்பதற்கான ஒரு எடுத்துக்காட்டு இங்கே:

// pages/api/protected.js
import jwt from 'jsonwebtoken'

const secret = process.env.JWT_SECRET

export default function handler(req, res) {
  const token = req.headers.authorization?.split(' ')[1]

  if (!token) {
    return res.status(401).json({ message: 'Unauthorized' })
  }

  try {
    const decoded = jwt.verify(token, secret)
    // "decoded" ஆப்ஜெக்டில் டோக்கனில் பதிக்கப்பட்ட பயனர் தகவல் உள்ளது
    // எடுத்துக்காட்டாக: const userId = decoded.userId;

    // கோரிக்கையைத் தொடர்ந்து செயலாக்கவும்
    res.status(200).json({ message: 'Protected resource accessed successfully' })
  } catch (error) {
    return res.status(401).json({ message: 'Invalid token' })
  }
}

இந்தக் குறியீட்டை இயக்குவதற்கு முன், நீங்கள் jsonwebtoken பேக்கேஜை நிறுவியுள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்:

npm install jsonwebtoken

நீங்கள் JWT_SECRET சூழல் மாறியையும் அமைக்க வேண்டும். இது JWT-களை கையொப்பமிடவும் சரிபார்க்கவும் பயன்படுத்தப்படும் ஒரு வலுவான, தோராயமாக உருவாக்கப்பட்ட இரகசிய விசையாக இருக்க வேண்டும். இதை பாதுகாப்பாக சேமித்து, உங்கள் கிளையண்ட்-பக்க குறியீட்டில் ஒருபோதும் வெளிப்படுத்த வேண்டாம்.

மிடில்வேர்

Next.js, Express.js போலவே API ரூட்களுக்கு பாரம்பரிய மிடில்வேரை வழங்கவில்லை என்றாலும், உங்கள் API ரூட் ஹேண்ட்லர்களை மீண்டும் பயன்படுத்தக்கூடிய செயல்பாடுகளுடன் சுற்றிவிடுவதன் மூலம் இதே போன்ற செயல்பாட்டை நீங்கள் அடையலாம். இது போன்ற பணிகளைச் செய்ய உங்களை அனுமதிக்கிறது:

ஒரு எளிய பதிவு மிடில்வேரை எவ்வாறு உருவாக்குவது என்பதற்கான ஒரு எடுத்துக்காட்டு இங்கே:

// utils/middleware.js
export function withLogging(handler) {
  return async function(req, res) {
    console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`)
    return handler(req, res)
  }
}

இந்த மிடில்வேரைப் பயன்படுத்த, உங்கள் API ரூட் ஹேண்ட்லரை withLogging செயல்பாட்டுடன் சுற்றிவிடவும்:

// pages/api/logged.js
import { withLogging } from '../../utils/middleware'

async function handler(req, res) {
  res.status(200).json({ message: 'This request was logged' })
}

export default withLogging(handler)

Next.js API Routes-ஐ உருவாக்குவதற்கான சிறந்த நடைமுறைகள்

மேம்பட்ட நுட்பங்கள்

பின்னணி பணிகள்

API பதிலைத் தடுக்கக் கூடாத நீண்ட நேரம் இயங்கும் பணிகளுக்கு, பின்னணி பணிகளைப் பயன்படுத்துவதைக் கருத்தில் கொள்ளுங்கள். உங்கள் பின்னணி பணிகளை நிர்வகிக்கவும், அவற்றை ஒத்திசைவற்ற முறையில் செயலாக்கவும் BullMQ அல்லது Bree போன்ற நூலகங்களைப் பயன்படுத்தலாம்.

வெப்சாக்கெட்டுகள்

நிகழ்நேர பயன்பாடுகளுக்கு, உங்கள் Next.js API ரூட்களில் வெப்சாக்கெட்டுகளைப் பயன்படுத்தலாம். Socket.IO மற்றும் ws போன்ற நூலகங்கள் கிளையண்ட் மற்றும் சர்வருக்கு இடையில் நிலையான இணைப்புகளை ஏற்படுத்துவதை எளிதாக்குகின்றன.

GraphQL

தரவை மிகவும் நெகிழ்வான மற்றும் திறமையான முறையில் பெற உங்களுக்குத் தேவைப்பட்டால், GraphQL-ஐப் பயன்படுத்துவதைக் கருத்தில் கொள்ளுங்கள். உங்கள் Next.js பயன்பாட்டில் ஒரு GraphQL API எண்ட்பாயிண்டை உருவாக்க Apollo Server அல்லது Yoga போன்ற நூலகங்களைப் பயன்படுத்தலாம்.

முடிவுரை

Next.js API Routes உங்கள் Next.js பயன்பாட்டிலேயே சர்வர்லெஸ் பேக்கெண்டுகளை உருவாக்க ஒரு சக்திவாய்ந்த மற்றும் வசதியான வழியை வழங்குகின்றன. சர்வர்லெஸ் கட்டமைப்பின் நன்மைகளைப் பயன்படுத்துவதன் மூலம், நீங்கள் மேம்பாட்டை எளிதாக்கலாம், செயல்திறனை மேம்படுத்தலாம் மற்றும் செலவுகளைக் குறைக்கலாம். நீங்கள் ஒரு எளிய தொடர்பு படிவத்தை உருவாக்கினாலும் அல்லது ஒரு சிக்கலான இ-காமர்ஸ் தளத்தை உருவாக்கினாலும், Next.js API Routes ஒரு வலுவான மற்றும் அளவிடக்கூடிய பேக்கெண்டை எளிதாக உருவாக்க உங்களுக்கு உதவும். அடிப்படைகளைப் பற்றிய உறுதியான புரிதல் மற்றும் சிறந்த நடைமுறைகளைப் பயன்படுத்துவதன் மூலம், திறமையான, பாதுகாப்பான மற்றும் உலகளவில் அணுகக்கூடிய பயன்பாடுகளை உருவாக்க இந்த சக்திவாய்ந்த கருவியைப் பயன்படுத்தலாம்.