fast-compressor
v1.5.2
Published
Fast Easy Compressing Plugin for REST API
Downloads
5
Maintainers
Readme
Fast Compressor
Plugin for Fastify.js
A quick and easy solution for REST APIs that serve primarily JSON type. Call the plugin easy simplicity and have compression within your API.
Implemented compression algorithms at the moment: Brotli and Gzip. With preference being Brotli and then Gzip.
API
fastify.fastRESTcomp(clientEncoding_Header: req.headers['accept-encoding'] , JSON_Stringified_OBJ: String)
Example:
fastify.fastRESTcomp(req.headers['accept-encoding'], JSON.stringify({hello: "world"}, null, 4))
Installation
npm i fast-compressor
// Example
...asuming you have Fastify.js server ready and some basic knowledge
// To register the plugin
// Keep in mind to register this plugin on your main (root) Fastify Instance (main Fastify app).
// For more info see https://www.fastify.io/docs/latest/Reference/Encapsulation/
app.register(require('fast-compressor'))
// A example usage on a structured route
module.exports = async function (app,opts,done){
app.get('/graphql*',{
schema: { querystring: app.getSchema('/query-validator') },
attachValidation: true,
} ,async (req,res) => {
if (req.validationError) {
res.code(403).compress({err:"Missing querystring 'query'", info: "Querystring 'query' should be a GraphQl query."})
}
const query = req.query.query
let performTask = await app.graphql(query)
res.header('Content-Type','application/json')
let { data, encoding, success} = await app.fastRESTcomp(
req.headers['accept-encoding'],
JSON.stringify(performTask, null, 4)
)
if(encoding !== null){
res.header('Content-Encoding', encoding)
}
if(success !== null){
return res.send(
data
)
}
return res.send(
{hey: "nothing is compressed..."}
)
})
done()
}
As soon as the client does not have Accept-Encoding present header with 'br' or 'gzip' then nothing is compressed.
Features
- Brotli Compression
- Gzip Compression
- Ideal plugin for JSON REST APIs
- Backbone compability with clients that doesn't support Brotli or Gzip
This plugin is meant for REST APIs. Me (Z3NTL3), had issues with the '@fastify/compress' plugin even tho it was registered very above and as first on the root fastify context instance on my route it didn't compress my JSON responds to the client. Even when the treshold for compression was the same. Maybe some kind of bug but I got it fixed by writing this Plugin. So I use '@fastify/compress' module for SSR compresssion together with my own module for RAW data compression.
License
- GNU (READ)