← Wszystkie artykuły i nowości

Programowanie

Fastify: walidacja JSON i test błędnego żądania

Schemat wejścia, ograniczenie odpowiedzi i test bez otwierania portu. Przykład pokazuje również odrzucone dane.

MerMiko2 min czytania

Walidacja to granica aplikacji

Dane klienta sprawdzaj przed logiką zapisującą je w bazie. Schemat określa kształt danych, ale nie zastępuje autoryzacji, limitów ani kontroli reguł biznesowych. Dla pól tekstowych ustal długości, a dla liczb sensowny zakres. Nie buduj schematu z kodu przesłanego przez użytkownika.

Zdefiniuj wejście i wyjście

Poniższy kod zakłada projekt Node.js z Fastify oraz modułami ES. Dostosuj wersję Node do używanego wydania frameworka. Schemat odpowiedzi określa, które pola mają zostać zwrócone.

import Fastify from "fastify";
const app = Fastify();
app.post("/notes", {
  schema: {
    body: {
      type: "object",
      required: ["text"],
      properties: {
        text: { type: "string", minLength: 1, maxLength: 500 }
      }
    },
    response: {
      201: { type: "object", properties: { ok: { type: "boolean" } } }
    }
  }
}, async (request, reply) => {
  return reply.code(201).send({ ok: true });
});

Ten przykład nie zapisuje notatki. W rzeczywistej aplikacji przed zapisem sprawdź tożsamość użytkownika i prawo do operacji. Domyślne opcje walidatora mogą modyfikować wartości wejściowe; ustal, czy chcesz konwersji typów lub usuwania dodatkowych pól, i przetestuj wybraną politykę.

Sprawdź niepoprawne dane

const result = await app.inject({
  method: "POST",
  url: "/notes",
  payload: { text: "" }
});
if (result.statusCode !== 400) throw new Error("Expected 400");
await app.close();

Dodaj przypadek prawidłowy, brak pola oraz zbyt długi tekst. inject pozwala przejść przez obsługę trasy bez publicznego nasłuchu. Nie porównuj tylko identycznego tekstu komunikatu błędu; ważne są status i to, że logika zapisu nie została uruchomiona.

Nie wykonuj kosztownego I/O w schemacie

Sprawdzenie użytkownika w bazie lub wywołanie zewnętrznego API umieść w odpowiednim hooku po walidacji struktury. Osobno ogranicz wielkość body, liczbę żądań i czas operacji. Nie zwracaj klientowi surowych wyjątków, sekretów ani parametrów połączenia z bazą.

Źródła i dokumentacja

Odnośniki do źródeł pozwalają sprawdzić daty, dostępność oraz pełny kontekst informacji.

Czytaj dalej

Biblioteka poradników Najnowsze wiadomości