intermediate

Fastify schema validation

Используйте JSON schemas для validation, serialization, documentation, typed contracts и early rejection of unsafe inputs.

Fastify привязывает JSON Schema к routes для validation, serialization и OpenAPI. Невалидные requests отклоняются до handler; response schemas ускоряют serialization через `fast-json-stringify`.

					const createUser = {
  schema: {
    body: {
      type: 'object',
      required: ['email'],
      properties: { email: { type: 'string', format: 'email' } },
      additionalProperties: false,
    },
    response: {
      201: {
        type: 'object',
        properties: { id: { type: 'string' } },
      },
    },
  },
};

fastify.post('/users', createUser, async (req) => {
  return { id: await service.create(req.body) };
});
				

Schemas для `body`, `querystring`, `params`, `headers`. `addSchema` — reusable $ref fragments. Type providers (`@fastify/type-provider-typebox`) связывают schemas с выводом TypeScript.

На интервью: validation + performance serialization, `additionalProperties: false` для strict contracts, schema-driven documentation.

Типовые ошибки: response schemas не совпадают с payload (runtime errors), нет shared $ref — drift, validation только body.

Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.

Чеклист:

  • Route schemas на input и output.
  • Переиспользование через addSchema и $ref.
  • Отклонение unknown properties на write endpoints.
  • Согласование schemas с TypeScript через type providers.