Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nemtsov/koa-json-mask
Middleware allowing the client to filter the response to only what they need, reducing the amount of traffic over the wire.
https://github.com/nemtsov/koa-json-mask
Last synced: 3 months ago
JSON representation
Middleware allowing the client to filter the response to only what they need, reducing the amount of traffic over the wire.
- Host: GitHub
- URL: https://github.com/nemtsov/koa-json-mask
- Owner: nemtsov
- License: mit
- Created: 2014-01-19T03:31:36.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2020-10-30T21:28:45.000Z (about 4 years ago)
- Last Synced: 2024-07-06T10:23:04.725Z (4 months ago)
- Language: JavaScript
- Size: 8.79 KB
- Stars: 22
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-koa - koa-json-mask - 该中间件允许客户端只过滤他们需要的响应,减少线路上的流量。 ![](https://img.shields.io/github/stars/nemtsov/koa-json-mask.svg?style=social&label=Star) ![](https://img.shields.io/npm/dm/koa-json-mask.svg?style=flat-square) (仓库 / 中间件)
README
# koa-json-mask
Middleware allowing the client to mask / filter the response to only what they need,
reducing the amount of traffic over the wire using the `?fields=foo,bar,baz`
querystring parameter.If you've used the Google APIs, provided a `?fields=` query-string to get a
[Partial Response](https://developers.google.com/+/api/#partial-responses),
and wanted to do the same for your own server, you can do so with this
middleware.The difference between `koa-json-filter` and `koa-json-mask` is that this middleware
supports filtering parts deep within objects. If you only need to be able to
filter top-level params of objects in the response use `filter`, and if you need
more power user `mask`._Underneath, this middleware uses [json-mask](https://github.com/nemtsov/json-mask).
Use it directly without this middleware if you need more flexibility._## Installation
```
$ npm install koa-json-mask
```In order to use this plugin with the previous version of Koa using generator functions, please use version `0.3.2`
```
$ npm install [email protected]
```## Options
* `name` querystring param name defaulting to "fields"
## Example
### Object responses
Script:
```js
const Koa = require('koa');
const mask = require('koa-json-mask');const app = new Koa();
app.use(mask());
app.use(async ctx => {
ctx.body = {
name: 'tobi',
packages: 5,
friends: ['abby', 'loki', 'jane'],
location: {
id: '342',
name: 'London'
}
};
});app.listen(3000);
console.log('app listening on port 3000');
```Response:
```
$ GET /?fields=name,location/name
{
"name": "tobi",
"location": {
"name": "London"
}
}
```### Array responses
Script:
```js
const Koa = require('koa');
const mask = require('koa-json-mask');const app = new Koa();
app.use(mask());
app.use(async ctx => {
ctx.body = [
{
name: 'tobi',
packages: 5,
friends: ['abby', 'loki', 'jane'],
location: {
id: '342',
name: 'London'
}
},
{
name: 'loki',
packages: 2,
friends: ['loki', 'jane'],
location: {
id: '62',
name: 'New York'
}
}
];
});app.listen(3000);
console.log('app listening on port 3000');
```Response:
```
$ GET /?fields=name,location/name
[
{
"name": "tobi",
"location": {
"name": "London"
}
},
{
"name": "loki",
"location": {
"name": "New York"
}
}
]
```## Syntax
The syntax is loosely based on XPath:
* `a,b,c` comma-separated list will select multiple fields
* `a/b/c` path will select a field from its parent
* `a(b,c)` sub-selection will select many fields from a parent
* `a/*/c` the star `*` wildcard will select all items in a field## More examples
For more examples, take a look at the
[examples section of the json-mask README](https://github.com/nemtsov/json-mask/#examples).# License
MIT