0.0.2 • Published 6 years ago

request-json-type v0.0.2

Weekly downloads
4
License
MIT
Repository
github
Last release
6 years ago

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) => {
    ...
});