0.7.4 • Published 8 years ago

composedql v0.7.4

Weekly downloads
14
License
MIT
Repository
github
Last release
8 years ago

ComposedQL

NPM Build Status Coverage

ComposedQL is a query language that aims URI friendly queries for RESTful APIs.

Use Cases

  • Composing data queries with efficient way
  • Selecting only a subset of data
  • Filtering sensitive information
  • Creating authZ compatible API endpoints
  • Improving caching and routing

Design Goals

  • URI friendly queries
  • High performance query parsing
  • Exchangeable and human readable/writable structure

Specification

(work in progress)

  • Fields represent object properties, resources or functions.
    • Examples:
      • foo - field
      • ~foo - resource
      • foo() - function
  • Commas are separators for fields or function arguments
    • Examples;
      • foo,bar - fields
      • ~foo(bar,baz) - resource fields
      • foo(bar,baz) - function arguments
  • Dots are accessors for accessing nested fields or field functions
    • Examples;
      • foo.bar - nested field
      • ~foo(bar.baz) - nested resource field
      • foo.bar() - field function
      • foo(bar).baz(qux) - function chain
      • ~foo(bar).baz(qux) - resource field chain

Notes

This repository provides composed query language parser and specifications.

Installation

npm install composedql

Usage

var cql = require('composedql');

parse

Parses given composed query

cql.parse('user,location.city');
[ { name: 'user',
    type: 'field',
    source: 'user' },
  { name: 'location',
    type: 'field',
    source: 'location.city',
    properties: [ { name: 'city', type: 'property' } ] } ]
cql.parse('user,~photo(profile,cover),~post(id,text).from(today)');
[ { name: 'user',
    type: 'field',
    source: 'user' },
  { name: 'photo',
    type: 'resource',
    source: '~photo(profile,cover)',
    fields:
     [ { name: 'profile',
         type: 'field',
         source: 'profile' },
       { name: 'cover',
         type: 'field',
         source: 'cover' } ] },
  { name: 'post',
    type: 'resource',
    source: '~post(id,text).from(today)',
    fields:
     [ { name: 'id',
         type: 'field',
         source: 'id' },
       { name: 'text',
         type: 'field',
         source: 'text' } ],
    properties:
     [ { name: 'from',
         type: 'function',
         args:
          [ { name: 'today',
              type: 'arg',
              source: 'today' } ] } ] } ]

License

Licensed under The MIT License (MIT)
For the full copyright and license information, please view the LICENSE.txt file.

0.7.4

8 years ago

0.7.3

9 years ago

0.7.2

9 years ago

0.7.1

10 years ago

0.7.0

10 years ago

0.6.0

10 years ago

0.5.0

10 years ago

0.4.0

10 years ago

0.3.0

10 years ago

0.2.0

10 years ago

0.1.0

10 years ago