0.0.24 • Published 4 years ago

rsl v0.0.24

Weekly downloads
1
License
MIT
Repository
-
Last release
4 years ago

RSL - REST Service Language

Introduction

REST Service Language is a JavaScript library for easily creating REST services based on entities. RSL generates all routes and the corresponding database schema. Also RSL provides you functionality for filtering and expanding data in your requests.

Documentation

Installation

You can easily install RSL using npm or yarn:

npm install --save rsl
yarn add rsl

Since RSL is currently a NodeJS-only package there aren't other options for installing.

Setup

To getting started with RSL you can directly import it:

const RSL = require('rsl');

With that you could create a new app object:

const app = new RSL({
    client: 'sqlite3',
    connection: {
        filename: "./mydb.sqlite"
    }
});

The object passed to the RSL constructor is a configuration object for Knex.js. See their documentation for further instructions how to configure different database clients.

To start the server you need to call listen on the app object with the port and a callback function as parameters:

app.listen(6586, () => console.log('Server is running'));

Defining a type

A type is defined by an RSL definition:

type User {
    name: String
    email: String
    birthday: Date
}

Possible types are for attributes are:

  • String (max. 255 characters)
  • Float
  • Integer
  • Date
  • Text
  • Boolean

You can also reference custom types:

type User {
    name: String
    email: String
    birthday: Date
}

type Message {
    body: Text
    from: User
    to: User
}

To pass the RSL definition to the app use the following code snippet:

const example = `
type User {
    name: String
    email: String
    birthday: Date
}

type Message {
    body: Text
    from: User
    to: User
}
`;

app.define(example);

That needs to be done before the listen function is called.

To have an array as type just add square brackets around the inner type:

type Car {
    color: [String]
}

Routes

Given this example definition...

type User {
    name: String
    email: String
    birthday: Date
}

...the following routes are generated:

GET /user - All users are returned
GET /user/:id - A specific user is returned
POST /user - Create a new user
PUT /user/:id - Update a specific user
DELETE /user/:id - A user is deleted

To prefix a url to the routes you can use the route keyword in the definition:

route /api/v1.0

type User {
    name: String
    email: String
    birthday: Date
}

Only use one route statement per definition!

Static content

To serve also static content, you can call the static function on the app object.

app.static({
    path: path.resolve(__dirname, 'public'),
    route: '/'
});

The path option is the absolute path to the root folder. The route option defines where the content should be served to.

Filter results

When calling a GET route without id you can pass a filtering option via query parameter.

Example:

GET /api/user?filter=id=1

If you want to pass multiple seperate them with a ,.

It is currently not possible to filter for expanded data or array data.

Expanding results

When calling any GET route you can pass a expanding option via query parameters. All named attributes with a custom type will then be expanded into full objects instead of returning the id of the corresponding object. You can also add multiple attributes by seperating with a ,.

Example:

GET /api/message?expand=to,from
0.0.24

4 years ago

0.0.23

5 years ago

0.0.22

5 years ago

0.0.21

5 years ago

0.0.20

5 years ago

0.0.19

5 years ago

0.0.18

5 years ago

0.0.17

5 years ago

0.0.16

5 years ago

0.0.15

5 years ago

0.0.14

5 years ago

0.0.13

5 years ago

0.0.12

5 years ago

0.0.11

5 years ago

0.0.10

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago