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.