Eesti

Avastage Next.js API marsruudid ja looge täislahendusega Reacti rakendusi. Õppige mustreid, parimaid praktikaid ja juurutusstrateegiaid.

Next.js API marsruudid: täislahenduse arendusmustrid

Next.js on revolutsioneerinud Reacti arendust, pakkudes tugevat raamistikku jõudluspõhiste ja skaleeritavate veebirakenduste loomiseks. Üks selle peamisi funktsioone on API marsruudid, mis võimaldavad arendajatel luua tagarakendi funktsionaalsust otse oma Next.js projektides. See lähenemine muudab arenduse sujuvamaks, lihtsustab juurutamist ja avab võimsad täislahenduse võimalused.

Mis on Next.js API marsruudid?

Next.js API marsruudid on serverivabad funktsioonid, mis on kirjutatud otse teie /pages/api kausta. Iga fail selles kaustas muutub API lõpp-punktiks, suunates HTTP-päringud automaatselt vastavale funktsioonile. See välistab vajaduse eraldi tagarakendi serveri järele, lihtsustades teie rakenduse arhitektuuri ja vähendades operatiivkulusid.

Mõelge neist kui miniatuursetest serverivabadest funktsioonidest, mis elavad teie Next.js rakenduse sees. Nad vastavad HTTP-päringutele nagu GET, POST, PUT, DELETE ja saavad suhelda andmebaaside, väliste API-de ja muude serveripoolsete ressurssidega. Oluline on see, et need töötavad ainult serveris, mitte kasutaja brauseris, tagades tundlike andmete, näiteks API-võtmete, turvalisuse.

API marsruutide peamised eelised

API marsruutidega alustamine

API marsruudi loomine Next.js-is on lihtne. Looge lihtsalt uus fail /pages/api kausta. Failinimi määrab marsruudi tee. Näiteks faili nimega /pages/api/hello.js loomine loob API lõpp-punkti, mis on kättesaadav aadressil /api/hello.

Näide: lihtne tervituse API

Siin on põhiline näide API marsruudist, mis tagastab JSON-vastuse:


// pages/api/hello.js

export default function handler(req, res) {
  res.status(200).json({ message: 'Tere Next.js API marsruudilt!' });
}

See kood defineerib asünkroonse funktsiooni handler, mis saab kaks argumenti:

Funktsioon määrab HTTP olekukoodiks 200 (OK) ja tagastab sõnumiga JSON-vastuse.

Erinevate HTTP-meetodite käsitlemine

Saate oma API marsruudis käsitleda erinevaid HTTP-meetodeid (GET, POST, PUT, DELETE jne), kontrollides req.method omadust. See võimaldab teil hõlpsasti luua RESTful API-sid.


// pages/api/todos.js

export default async function handler(req, res) {
  if (req.method === 'GET') {
    // Hangi kõik ülesanded andmebaasist
    const todos = await fetchTodos();
    res.status(200).json(todos);
  } else if (req.method === 'POST') {
    // Loo uus ülesanne
    const newTodo = await createTodo(req.body);
    res.status(201).json(newTodo);
  } else {
    // Käsitle toetamata meetodeid
    res.status(405).json({ message: 'Meetod pole lubatud' });
  }
}

See näide demonstreerib, kuidas käsitleda GET- ja POST-päringuid hüpoteetilise /api/todos lõpp-punkti jaoks. See sisaldab ka veatöötlust toetamata meetodite jaoks.

Täislahenduse arendusmustrid API marsruutidega

Next.js API marsruudid võimaldavad erinevaid täislahenduse arendusmustreid. Siin on mõned levinumad kasutusjuhud:

1. Andmete pärimine ja manipuleerimine

API marsruute saab kasutada andmete pärimiseks andmebaasidest, välistest API-dest või muudest andmeallikatest. Neid saab kasutada ka andmete manipuleerimiseks, näiteks kirjete loomiseks, värskendamiseks või kustutamiseks.

Näide: kasutajaandmete pärimine andmebaasist


// 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: 'Kasutajat ei leitud' });
    }

    res.status(200).json(results[0]);
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: 'Sisemine serveri viga' });
  }
}

See näide pärib kasutaja andmed andmebaasist URL-is antud kasutaja ID alusel. See kasutab andmebaasiga suhtlemiseks andmebaasi päringuteeki (eeldatavasti asukohas lib/db). Pange tähele parameetritega päringute kasutamist SQL-i süstimise haavatavuste vältimiseks.

2. Autentimine ja autoriseerimine

API marsruute saab kasutada autentimise ja autoriseerimise loogika rakendamiseks. Saate neid kasutada kasutaja sisselogimisandmete kontrollimiseks, JWT-märkide genereerimiseks ja tundlike ressursside kaitsmiseks.

Näide: kasutaja autentimine


// 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: 'Valed sisselogimisandmed' });
      }

      const user = results[0];

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

      if (!passwordMatch) {
        return res.status(401).json({ message: 'Valed sisselogimisandmed' });
      }

      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: 'Sisemine serveri viga' });
    }
  } else {
    res.status(405).json({ message: 'Meetod pole lubatud' });
  }
}

See näide autendib kasutajaid, võrreldes esitatud parooli andmebaasis salvestatud räsitud parooliga. Kui sisselogimisandmed on kehtivad, genereerib see JWT-märgi ja tagastab selle kliendile. Klient saab seejärel seda märki kasutada järgnevate päringute autentimiseks.

3. Vormide käsitlemine ja andmete edastamine

API marsruute saab kasutada vormide edastamise käsitlemiseks ja kliendilt saadetud andmete töötlemiseks. See on kasulik kontaktivormide, registreerimisvormide ja muude interaktiivsete elementide loomiseks.

Näide: kontaktivormi edastamine


// 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: 'Uus kontaktivormi saadetis',
        text: `Nimi: ${name}\nE-post: ${email}\nSõnum: ${message}`,
      });

      res.status(200).json({ message: 'E-kiri edukalt saadetud' });
    } catch (error) {
      console.error(error);
      res.status(500).json({ message: 'E-kirja saatmine ebaõnnestus' });
    }
  } else {
    res.status(405).json({ message: 'Meetod pole lubatud' });
  }
}

See näide käsitleb kontaktivormi edastamist, saates administraatorile e-kirja. See kasutab e-kirja saatmiseks e-kirjade saatmise teeki (eeldatavasti asukohas lib/email). Peaksite asendama admin@example.com tegeliku saaja e-posti aadressiga.

4. Veebikonksud ja sündmuste käsitlemine

API marsruute saab kasutada veebikonksude käsitlemiseks ja välistest teenustest tulevatele sündmustele reageerimiseks. See võimaldab teil integreerida oma Next.js rakenduse teiste platvormidega ja automatiseerida ülesandeid.

Näide: Stripe'i veebikonksu käsitlemine


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

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

export const config = {
  api: {
    bodyParser: false, // Keela vaikimisi keha parsimine
  },
};

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(`Veebikonksu viga: ${err.message}`);
      res.status(400).send(`Veebikonksu viga: ${err.message}`);
      return;
    }

    // Käsitle sündmust
    switch (event.type) {
      case 'payment_intent.succeeded':
        const paymentIntent = event.data.object;
        console.log(`Maksekavatsus summas ${paymentIntent.amount} oli edukas!`);
        // Seejärel defineerige ja kutsuge välja meetod eduka maksekavatsuse käsitlemiseks.
        // handlePaymentIntentSucceeded(paymentIntent);
        break;
      case 'payment_method.attached':
        const paymentMethod = event.data.object;
        // Seejärel defineerige ja kutsuge välja meetod eduka makseviisi lisamise käsitlemiseks.
        // handlePaymentMethodAttached(paymentMethod);
        break;
      default:
        // Ootamatu sündmuse tüüp
        console.log(`Käsitlemata sündmuse tüüp ${event.type}.`);
    }

    // Tagastage 200 vastus sündmuse kättesaamise kinnitamiseks
    res.status(200).json({ received: true });
  } else {
    res.setHeader('Allow', 'POST');
    res.status(405).end('Meetod pole lubatud');
  }
}

See näide käsitleb Stripe'i veebikonksu, kontrollides allkirja ja töödeldes sündmuse andmeid. See keelab vaikimisi keha parseri ja kasutab toore päringu keha lugemiseks kohandatud puhverfunktsiooni. Vaikimisi keha parseri keelamine on ülioluline, sest Stripe nõuab allkirja kontrollimiseks toorest keha. Ärge unustage konfigureerida oma Stripe'i veebikonksu lõpp-punkti Stripe'i armatuurlaual ja seadistada keskkonnamuutuja STRIPE_WEBHOOK_SECRET.

API marsruutide parimad praktikad

Oma API marsruutide kvaliteedi ja hooldatavuse tagamiseks järgige neid parimaid praktikaid:

1. Moduleerige oma koodi

Vältige suurte, monoliitsete API marsruutide kirjutamist. Selle asemel jaotage oma kood väiksemateks, korduvkasutatavateks mooduliteks. See muudab teie koodi lihtsamini mõistetavaks, testitavaks ja hooldatavaks.

2. Rakendage veatöötlust

Käsitlege vigu oma API marsruutides nõuetekohaselt. Kasutage erandite püüdmiseks try...catch plokke ja tagastage kliendile asjakohased veavastused. Logige vigu, et aidata silumisel ja jälgimisel.

3. Valideerige sisendandmeid

Valideerige alati kliendilt saadud sisendandmeid, et vältida turvaauke ja tagada andmete terviklikkus. Kasutage valideerimisteeke nagu Joi või Yup, et defineerida valideerimisskeeme ja jõustada andmepiiranguid.

4. Kaitske tundlikke andmeid

Salvestage tundlikke andmeid, nagu API-võtmed ja andmebaasi sisselogimisandmed, keskkonnamuutujatesse. Ärge kunagi lisage tundlikke andmeid oma koodihoidlasse.

5. Rakendage päringute piiramist (Rate Limiting)

Kaitske oma API marsruute kuritarvitamise eest, rakendades päringute piiramist. See piirab päringute arvu, mida klient saab teatud aja jooksul teha. Kasutage päringute piiramise teeke nagu express-rate-limit või limiter.

6. Turvake API-võtmed

Ärge paljastage API-võtmeid otse kliendipoolses koodis. Suunake päringud alati läbi oma API marsruutide, et kaitsta oma API-võtmeid volitamata juurdepääsu eest. Salvestage API-võtmed turvaliselt oma serveri keskkonnamuutujatesse.

7. Kasutage keskkonnamuutujaid

Vältige konfiguratsiooniväärtuste otse koodi kirjutamist. Selle asemel kasutage konfiguratsiooniseadete salvestamiseks keskkonnamuutujaid. See muudab teie rakenduse haldamise erinevates keskkondades (arendus, testimine, tootmine) lihtsamaks.

8. Logimine ja jälgimine

Rakendage logimist ja jälgimist, et jälgida oma API marsruutide jõudlust. Logige olulisi sündmusi, nagu vead, hoiatused ja edukad päringud. Kasutage jälgimisvahendeid, et jälgida mõõdikuid nagu päringu latentsusaeg, veamäärad ja ressursikasutus. Teenused nagu Sentry, Datadog või New Relic võivad olla abiks.

Juurutamise kaalutlused

Next.js API marsruudid on mõeldud juurutamiseks serverivabadel platvormidel. Populaarsed juurutamisvõimalused hõlmavad:

Kui juurutate oma Next.js rakendust koos API marsruutidega, veenduge, et teie keskkonnamuutujad oleksid juurutusplatvormil õigesti konfigureeritud. Samuti arvestage serverivabade funktsioonide külmkäivituse ajaga, mis võib mõjutada teie API marsruutide esialgset vastamisaega. Koodi optimeerimine ja tehnikate, nagu provisioned concurrency, kasutamine võib aidata külmkäivituse probleeme leevendada.

Kokkuvõte

Next.js API marsruudid pakuvad võimsat ja mugavat viisi täislahendusega rakenduste loomiseks Reactiga. Kasutades serverivabasid funktsioone, saate lihtsustada arendust, vähendada operatiivkulusid ja parandada rakenduse jõudlust. Järgides selles artiklis kirjeldatud parimaid praktikaid, saate luua tugevaid ja hooldatavaid API marsruute, mis toidavad teie Next.js rakendusi.

Olenemata sellest, kas loote lihtsat kontaktivormi või keerulist e-kaubanduse platvormi, aitavad Next.js API marsruudid teil arendusprotsessi sujuvamaks muuta ja pakkuda erakordseid kasutajakogemusi.

Lisalugemist