request-json-type
v0.0.2
Published
Inspirado no GraphQL(http://graphql.org/) essa biblioteca tem como objetivo criar um interface para realizar consultas aos dados da sua aplicação.
Downloads
1
Readme
request-json-type (RJT)
Inspirado no GraphQL(http://graphql.org/) essa biblioteca tem como objetivo criar um interface para realizar consultas aos dados da sua aplicação.
Para as aplicações web um dos problemas é a quantidade de endpoints criados em uma aplicação, com a biblioteca se pode realizar mais que uma consulta em uma mesma requisição, e também definir quais informações deve-se ter como resultado.
Definindo um dado/tipo
var rjt = require('request-json-type');
...
let __options__ = {
objectName: 'TipoNome',
description: 'Descrição para documentação',
fields: ['id', 'name'], // definir quais atributos do objeto
args: ['id', 'name'], // argumentos aceitos em uma requisição
filterAllow: ['id', 'name'] // atributos que serão aceitos realizar filtros
}
let resolve = async(request) => {
// Seu código
return result;
}
let MyType = rjt.CreateType(__options__, resolve);
...
resolve recebe request que é composto por:
{
Type1:{
filter: {
doc: '0123456789'
},
contains: {
name: 'ri'
},
fields: [ 'id' ],
meta: {
hi: 'hello',
...
},
args: { id: 1 }
},
Type2: ...
}
Cada tipo requisitado recebe um objeto com seguintes atributos:
- filter: objeto que contém os valores exatos para realizar algum filtro nos dados que serão fornecidos. Chave representa o atributo, e o valor da chave representa o valor procurado.
- contains: equivale ao filter, mas é uma forma de realizar algum filtro com mais flexibilidade, algo parecido com like do SQL. (
like '%VALOR%'
) - fields: atributos que o requisitor deseja.
- meta: qualquer informação passada fora do previsto.
- args: argumentos enviados pelo requisitor.
Exemplo de requisição:
{
'Type1': {
filter: { name: 'otto' },
contains: { email: '@xyz.com' },
args: { nome: 'otto' },
fields: ['id'],
hi: 'hello',
pagination: {
per_page: 20,
page: 1
}
},
'Type2': ...
}
Exemplo de request enviado para resolve:
{
'Type1':{
filter: { name: 'otto' },
contains: {},
fields: [ 'id' ],
meta: {
hi: 'hello',
pagination: {
per_page: 20,
page: 1
}
},
args: { name: 'otto' }
},
'Type2': ...
}
Definindo um esquema
...
let schema = [
MyType,
MyType2,
MyType3
]
...
Processando uma requisição
ExecRequest(schema, request)
.then((data) => {
...
})
.catch((err) => {
...
});