intermediate
Fastify plugins
Объясняйте plugin encapsulation, decorators, hooks, registration order, dependency declaration и reusable service boundaries.
Fastify plugins инкапсулируют routes, decorators и hooks в scope. `fastify-plugin` оборачивает plugins для корректного распространения decorators и hooks и сохранения metadata через encapsulation boundaries.
async function usersPlugin(fastify) {
fastify.decorate('usersService', new UsersService());
fastify.get('/users/:id', async (req) => {
return fastify.usersService.find(req.params.id);
});
}
app.register(usersPlugin, { prefix: '/api' });
Порядок регистрации важен: зависимости через `dependencies: ['other-plugin']`. Encapsulation — child plugins не видят parent decorators, пока `fastify-plugin` намеренно не разрывает цепочку.
На интервью: encapsulation plugins vs глобальный Express middleware, `decorate` для shared services, lifecycle hooks (`onRequest`, `preHandler`, `onResponse`).
Типовые ошибки: plugins без `fastify-plugin` при необходимости shared decorators, circular plugin dependencies, неверный async boot.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- Plugin на границу фичи.
- fastify-plugin для shared decorators.
- Явные dependencies между plugins.
- prefix для URL namespacing.