4.12.0-beta.3 • Published 3 years ago

fastify-openapi-validator v4.12.0-beta.3

Weekly downloads
5
License
MIT
Repository
-
Last release
3 years ago

🦋 fastify-openapi-validator

npm.io npm.io npm.io All Contributors Coverage Status Codacy Badge npm.io Gitpod Ready-to-Code npm.io

An OpenApi validator for Fastify that automatically validates API _requests using an OpenAPI 3 specification.

Install

npm install fastify-openapi-validator@4.12.0-beta.2

Usage

Code

const OpenApiValidator = require('fastify-openapi-validator');
app.use(
  OpenApiValidator.middleware({
    apiSpec: './openapi.yml',
    // additional options
  }),
);

Options

{
  apiSpec: OpenAPIV3.Document | string;
  validateRequests?: boolean | ValidateRequestOpts;
  validateSecurity?: boolean | ValidateSecurityOpts;
  ignorePaths?: RegExp | Function;
  coerceTypes?: boolean | 'array';
  unknownFormats?: true | string[] | 'ignore';
  formats?: Format[];
  $refParser?: {
    mode: 'bundle' | 'dereference';
  };
  validateFormats?: false | 'fast' | 'full';
}

See detailed documentation

Note: some options including validateResponses, operationHandlers are not yet supported for Fastify

Example

// 1. require the module
const openApiValidator = require('fastify-openapi-validator');
const { Pets } = require('./services');
const pets = new Pets();

function plugin(instance, options, next) {
  // 2. configure the validator (see options)
  instance.register(openApiValidator, {
    apiSpec: './openapi.yml',
  });

  // 3. define routes
  instance.get('/v1/pets', (request, reply) => {
    return pets.findAll(request.query);
  });

  instance.get('/v1/pets/:id', (request, reply) => {
    const pet = pets.findById(request.params.id);
    if (!pet) reply.code(404).send({ msg: 'not found' });
    return pet;
  });

  // 4. set an error handler and error shape
  instance.setErrorHandler(function (error, request, reply) {
    const code = error.status ?? 500;
    const errors = error.errors;
    const message = error.message;
    reply.code(code).send({
      message,
      errors,
    });
  });

  next();
}

module.exports = plugin;

Related Projects

License

MIT