Ograniczanie częstotliwości żądań i obsługa błędów API
Chroń handlery tras Next.js za pomocą ograniczania częstotliwości żądań i zwracaj spójne, dobrze ustrukturyzowane odpowiedzi błędów z właściwymi kodami statusu HTTP.
Ograniczanie częstotliwości żądań i obsługa błędów API to bezpłatna lekcja Next.js 15 Fullstack Web Apps na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Next.js 15 Fullstack Web Apps, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Next.js 15 Fullstack Web Apps zawiera 4 lekcji w sumie.
Dlaczego warto ograniczać częstotliwość żądań
Publiczne trasy API są narażone na nadużycia: logowanie metodą brute force, scraping i przypadkowe zalewanie żądaniami. Ograniczanie częstotliwości ustala maksymalną liczbę żądań, które klient może wykonać w danym przedziale czasu, chroniąc backend i limity zewnętrznych usług.
Identyfikowanie klienta
Potrzebujesz klucza, aby zliczać żądania dla każdego klienta. Typowe opcje to adres IP, klucz API lub identyfikator uwierzytelnionego użytkownika. W handlerach tras odczytaj adres IP z nagłówków ustawianych przez platformę.
export async function GET(req) {
const ip = req.headers.get('x-forwarded-for') ?? 'unknown';
return Response.json({ ip });
}Licznik stałego okna
Najprostszy algorytm zlicza żądania dla każdego klucza w stałym przedziale czasu. Gdy liczba żądań przekroczy limit, odrzucaj kolejne aż do zresetowania okna.
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;
}Wypróbowanie limitera
Uruchom lokalnie logikę stałego okna, aby zobaczyć, jak najpierw zezwala ona na żądania, a następnie je blokuje.
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));
}Pamięć lokalna a rozproszona
Magazyn w pamięci jest resetowany przy każdym zimnym starcie i nie jest współdzielony między instancjami serverless. W rzeczywistych wdrożeniach używaj współdzielonego magazynu, takiego jak Redis (np. Upstash), aby limity były spójne wszędzie.
Zwracanie 429
Gdy klient przekroczy limit, odpowiedz kodem HTTP 429 Too Many Requests i nagłówkiem Retry-After, informującym, kiedy można spróbować ponownie.
export async function POST(req) {
if (!allowed) {
return new Response('Rate limit exceeded', {
status: 429,
headers: { 'Retry-After': '60' },
});
}
return Response.json({ ok: true });
}Spójny format błędów
Klientom łatwiej analizować błędy, gdy każda awaria ma taki sam format JSON. Ustandaryzuj niewielką otoczkę odpowiedzi.
function apiError(message, status, code) {
return Response.json(
{ error: { message, code } },
{ status }
);
}Mapowanie błędów na kody statusu
Wybierz status odpowiedni do przyczyny:
400nieprawidłowe dane wejściowe401brak uwierzytelnienia403brak autoryzacji404nie znaleziono429przekroczony limit częstotliwości500błąd serwera
Przechwytywanie nieoczekiwanych błędów
Umieść logikę handlera w try/catch, aby nieobsłużony wyjątek został zamieniony na kontrolowany błąd 500, zamiast ujawniać ślad stosu.
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 });
}
}Wielokrotnego użytku wrapper
Wydziel powtarzalny kod do funkcji wyższego rzędu, która stosuje ograniczanie częstotliwości i przechwytywanie błędów do dowolnego handlera.
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); }
};
}Nigdy nie ujawniaj szczegółów wewnętrznych
W środowisku produkcyjnym nigdy nie wysyłaj klientowi surowych komunikatów błędów, śladów stosu ani szczegółów SQL. Rejestruj je po stronie serwera i zwracaj ogólny komunikat ze stabilnym kodem błędu.
Szybkie sprawdzenie
Jaki kod statusu HTTP i jaki nagłówek najlepiej sygnalizują przekroczenie przez klienta limitu częstotliwości?
Podsumowanie
Zabezpieczyłeś trasy API:
- Identyfikowałeś klientów i zliczałeś żądania za pomocą limitera stałego okna.
- Zwracałeś
429zRetry-After, preferując Redis do obsługi rozproszonych limitów. - Ustandaryzowałeś otoczkę błędów JSON i mapowałeś przyczyny na kody statusu.
- Przechwytywałeś wyjątki i unikałeś ujawniania szczegółów wewnętrznych.
Ucz się TypeScript dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 12
- Lekcje
- 48
Często zadawane pytania
Czy lekcja „Ograniczanie częstotliwości żądań i obsługa błędów API” jest bezpłatna?
Tak — pełny tekst „Ograniczanie częstotliwości żądań i obsługa błędów API” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Next.js 15 Fullstack Web Apps, przejdź na CoddyKit PRO. Kurs Next.js 15 Fullstack Web Apps zawiera 4 lekcji w sumie.
Co nauczysz się w „Ograniczanie częstotliwości żądań i obsługa błędów API”?
Chroń handlery tras Next.js za pomocą ograniczania częstotliwości żądań i zwracaj spójne, dobrze ustrukturyzowane odpowiedzi błędów z właściwymi kodami statusu HTTP. Ćwiczysz Next.js 15 Fullstack Web Apps z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Next.js 15 Fullstack Web Apps?
Nie wymagamy żadnego doświadczenia. Next.js 15 Fullstack Web Apps w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Ograniczanie częstotliwości żądań i obsługa błędów API”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Next.js 15 Fullstack Web Apps?
Tak. Każda lekcja Next.js 15 Fullstack Web Apps zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tworzenie procedur obsługi tras API
- Walidacja żądań i bezpieczeństwo
- Integracja usług zewnętrznych
- Ograniczanie częstotliwości żądań i obsługa błędów API