Pyyntörajoitukset ja API-virheiden käsittely
Suojatkaa Next.js:n route handlerit pyyntörajoituksilla ja palauttakaa yhdenmukaisia, hyvin jäsenneltyjä virhevastauksia oikeilla HTTP-tilakoodeilla.
Pyyntörajoitukset ja API-virheiden käsittely on ilmainen Next.js 15 -täyden pinon verkkosovellukset-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Next.js 15 -täyden pinon verkkosovellukset-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Next.js 15 -täyden pinon verkkosovellukset-kurssilla on yhteensä 4 oppituntia.
Miksi nopeusrajoitus
Julkiset API-reitit ovat alttiita väärinkäytölle: kirjautumisten brute force -yrityksille, tietojen keräämiselle ja vahingossa syntyville tulville. Nopeusrajoitus rajoittaa, kuinka monta pyyntöä asiakas voi tehdä tietyssä ajanjaksossa, ja suojaa taustajärjestelmää sekä ulkoisten palveluiden kiintiöitä.
Asiakkaan tunnistaminen
Tarvitsette avaimen, jonka avulla pyynnöt voidaan laskea asiakaskohtaisesti. Yleisiä vaihtoehtoja ovat IP-osoite, API-avain tai todennetun käyttäjän tunnus. Lukekaa Route Handlereissa IP-osoite alustan asettamista otsakkeista.
export async function GET(req) {
const ip = req.headers.get('x-forwarded-for') ?? 'unknown';
return Response.json({ ip });
}Kiinteän aikaikkunan laskuri
Yksinkertaisin algoritmi laskee avainta kohti tehdyt pyynnöt kiinteän aikaikkunan aikana. Kun määrä ylittää rajan, hylätkää uudet pyynnöt aikaikkunan nollautumiseen asti.
function fixedWindow(store, key, limit, windowMs) {
const now = Date.now();
const entry = store[key] || { count: 0, reset: now + windowMs };
if (now > entry.reset) { entry.count = 0; entry.reset = now + windowMs; }
entry.count++;
store[key] = entry;
return entry.count <= limit;
}Rajoittimen kokeileminen
Suorittakaa kiinteän aikaikkunan logiikka paikallisesti nähdäksenne, kuinka se ensin sallii pyynnöt ja sitten estää ne.
function fixedWindow(store, key, limit, windowMs) {
const now = Date.now();
const entry = store[key] || { count: 0, reset: now + windowMs };
if (now > entry.reset) { entry.count = 0; entry.reset = now + windowMs; }
entry.count++;
store[key] = entry;
return entry.count <= limit;
}
const store = {};
for (let i = 0; i < 4; i++) {
console.log(i, fixedWindow(store, 'ip1', 3, 1000));
}Muistinsisäinen ja hajautettu tallennus
Muistinsisäinen tallennus nollautuu jokaisen cold startin yhteydessä, eikä sitä jaeta serverless-instanssien kesken. Käyttäkää tuotannossa jaettua tallennusta, kuten Redis (esimerkiksi Upstash), jotta rajoitukset ovat yhdenmukaiset kaikkialla.
429-vastauksen palauttaminen
Kun asiakas ylittää rajan, palauttakaa HTTP-vastaus 429 Too Many Requests sekä Retry-After-otsake, joka kertoo, milloin asiakas voi yrittää uudelleen.
export async function POST(req) {
if (!allowed) {
return new Response('Rate limit exceeded', {
status: 429,
headers: { 'Retry-After': '60' },
});
}
return Response.json({ ok: true });
}Yhdenmukainen virherakenne
Asiakkaat jäsentävät virheet helpommin, kun jokaisella virheellä on sama JSON-rakenne. Käyttäkää yhdenmukaista pientä envelope-rakennetta.
function apiError(message, status, code) {
return Response.json(
{ error: { message, code } },
{ status }
);
}Virheiden yhdistäminen statuskoodeihin
Valitkaa syytä vastaava statuskoodi:
400virheelliset syötetiedot401ei todennettu403ei valtuutettu404ei löydy429nopeusrajoitus ylitetty500palvelinvirhe
Odottamattomien virheiden käsittely
Ympäröikää käsittelijän logiikka try/catch-rakenteella, jotta käsittelemätön poikkeus muuttuu hallituksi 500-vastaukseksi eikä paljasta pinonjäljitystä.
export async function GET() {
try {
const data = await loadData();
return Response.json(data);
} catch (e) {
console.error(e);
return Response.json({ error: { message: 'Internal error' } }, { status: 500 });
}
}Uudelleenkäytettävä wrapper
Siirtäkää toistuva pohjakoodi korkeamman asteen funktioon, joka lisää nopeusrajoituksen ja virheenkäsittelyn mille tahansa käsittelijälle.
function withGuards(handler) {
return async (req) => {
if (!checkLimit(req)) return apiError('Too many requests', 429);
try { return await handler(req); }
catch { return apiError('Internal error', 500); }
};
}Älkää koskaan paljastako sisäisiä tietoja
Älkää lähettäkö tuotannossa asiakkaalle raakoja virheilmoituksia, pinonjäljityksiä tai SQL-tietoja. Kirjatkaa ne palvelimella ja palauttakaa yleinen viesti sekä pysyvä virhekoodi.
Pikakysymys
Mikä HTTP-statuskoodi ja otsake ilmaisevat parhaiten, että asiakas on ylittänyt nopeusrajoituksen?
Kertaus
Vahvistitte API-reittienne suojausta:
- Tunnistitte asiakkaat ja laskitte pyynnöt kiinteän aikaikkunan rajoittimella.
- Palautitte
429-vastauksen jaRetry-After-otsakkeen ja suositte Redis-tallennusta hajautettuihin rajoituksiin. - Yhdenmukaistitte JSON-virherakenteen ja yhdistitte syyt statuskoodeihin.
- Käsittelitte poikkeukset ja vältitte sisäisten tietojen vuotamisen.
Opi TypeScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Pyyntörajoitukset ja API-virheiden käsittely” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Next.js 15 -täyden pinon verkkosovellukset-oppimispolun 3 oppituntia, myös oppitunnin “Pyyntörajoitukset ja API-virheiden käsittely”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Next.js 15 -täyden pinon verkkosovellukset-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Pyyntörajoitukset ja API-virheiden käsittely”?
Suojatkaa Next.js:n route handlerit pyyntörajoituksilla ja palauttakaa yhdenmukaisia, hyvin jäsenneltyjä virhevastauksia oikeilla HTTP-tilakoodeilla. Harjoittelet Next.js 15 -täyden pinon verkkosovellukset-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Next.js 15 -täyden pinon verkkosovellukset-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Next.js 15 -täyden pinon verkkosovellukset-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Pyyntörajoitukset ja API-virheiden käsittely”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Next.js 15 -täyden pinon verkkosovellukset-oppitunnilla?
Kyllä. Jokainen Next.js 15 -täyden pinon verkkosovellukset-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- API-reittikäsittelijöiden rakentaminen
- Pyyntöjen validointi ja tietoturva
- Ulkoisten palvelujen integrointi
- Pyyntörajoitukset ja API-virheiden käsittely