Giter Club home page Giter Club logo

nedb-rest's Introduction

nedb-rest

REST API for NeDB database, based on express HTTP server.

The API enables client sided javascript components to access database content via HTTP RESTful calls. This can be used i.e. for HTML5 applications.

Quick start

Following code snippet starts an express server, which serves nedb api at port 8010.

npm install nedb-rest
nedb-rest

The authenticated account and password are all admin. You can edit options.json to modify it.

cp node_modules/nedb-rest/options.json ./

API schema

The module can be connected to multiple NeDB data storages, which are called collections. Each CRUD command is a combination of a HTTP method (GET, POST, PUT, DELETE), URL and HTTP-body. The following table gives a quick overview of possible commands.

URL Method Notes
/nedb GET get list of collections (= datastores)
/nedb/:collection GET search documents in a collection (uses query parameter $filter $sort)
/nedb/:collection/:id GET retrieve a single document
/nedb/:collection POST create a single document
/nedb/:collection/:id PUT update a single document
/nedb/:collection PUT update multiple documents (uses query parameter $filter)
/nedb/:collection/:id DELETE remove single a document
/nedb/:collection DELETE remove multiple documents (uses query parameter $filter)

To create a document, use a POST call and put the document into HTTP body. You can only insert one document per call. Each document must have a unique key value, which is named '_id'. If you don't define an _id, NeDB will generate a 16 character long string as _id. Please refer to NeDB documentation. On success the server will respond with status code 201, and the body contains the created document as JSON string.

Read operation are done by HTTP GET calls. You can read a single document by appending the document _id to the URL. In this case the server will respond with the document as JSON string.

HTTP GET /nedb/fruits/J1t1kMDp4PWgPfhe

You can also query multiple documents and set a $filter as parameter. In that case the response contains an array of document objects (JSON formatted). You may also get an empty array, if no document matches the filter. The result can be sorted with parameter $sort

HTTP GET /nedb/fruits?$filter={"price":{"$lt":3.00}}&$sort={"price":-1}

Updating operations are done by HTTP PUT calls. You can update a single document by appending the document key (_id) to URL. You must provide the document in HTTP body as JSON string. You cannot change key field (_id). The document will be completely overwritten with the new content.

If you don't want to update every field of the document, but only change some of them, you have to use a special NeDB syntax. There are operations $set, $unset, $inc and more, to update a field.

HTTP PUT /nedb/fruits/J1t1kMDp4PWgPfhe
{"$set":{"discount":0.12}}

You can also update multiple documents by calling a PUT command without _id. You should define a $filter, otherwise all documents are changed. Changing multiple documents makes only sense in combination with update operations like $set. Otherwise all documents of a collection will have the same content.

HTTP PUT /nedb/fruits?$filter={"name":{"$regex":"berry"}}
{"$set":{"discount":0.12}}

Documents can be deleted by HTTP DELETE calls. You can delete a single document by appending the document key (_id) to the URL.

HTTP DELETE /nedb/fruits/J1t1kMDp4PWgPfhe

If you omit the _id, you must define $filter parameter, to specify a subset of documents. Otherwise the server will respond with error status 405. This shall protect you to delete all documents by accident.

HTTP DELETE /nedb/fruits?$filter={"name":{"$regex":"berry"}}

The $filter parameter is used, to define a subset of documents of a collection. Filter may be used for reading (GET), updating (PUT) and deleting (DELETE) commands.

A filter consists of one or more conditions, which are linked with logical and/or operations. Filters are set by the $filter parameter. The string will be parsed and transformed to a NeDB filter object. Filters has format . Values may be a String, Boolean, Number, Date or Array.

For the operators $in and $nin an array must be given as value. Currently this array cannot obtain a single value. Arrays are delimited by ,. Another constraint is that an array can only contain a single type of either String of Number. The array 1,2,hello will not work.

Here is a list of valid operations. For more informations please consult NeDB documentation.

Examples:

HTTP GET /nedb/fruits?$filter={"color":"red"}

HTTP GET /nedb/fruits?$filter={"color":{"$in":["red","blue"]}}

You may sort the result of a query with "$sort" parameter. You can use it in reading (GET) operations only. The parameter may contain multiple fieldnames concatenated by commas (,). Each fieldname can be followed by keyword 1 or -1 to define sorting direction. Ascending is default direction, so you may omit it.

Examples:

HTTP GET /nedb/fruits?$sort={"price":1}

HTTP GET /nedb/fruits?$filter={"color":"red"}&$sort={"price":1}

If you append $count parameter to a query, the server returns the number of of matching documents instead of a result set. You can use this parameter in reading (GET) operations only. The server responds with a number (no JSON object or array).

Example:

HTTP GET /nedb/fruits?$filter={"name":"apple"}&$count

If you want to fetch results in several packages, you may use pagination parameters $skip and $limit. They should be used together with $sort parameter.
Parameter $skip sets the count of documents, which will be deleteted from the beginning of result set.
Parameter $limit sets maximal count of documents in the result set.
You can use this parameter in reading (GET) operations only.

Example:

HTTP GET /nedb/fruits?$filter={"name":"apple"}&$skip=1&$limit=2

If you read from collections with HTTP GET, the result will be always an array of documents, even if you use query parameter $limit=1, or only one docment matches the $filter.

If you prefer to get a single object but not an array, you must use query parameter $single instead. The NeDB database will be queried with function ´findOne´, and you will get only one document as JSON object. If your query finds no document, you will get a 404-error code, instead of an empty array.

Example:

HTTP GET /nedb/fruits?$filter={"name":"apple"}&$single

Normally, the $filter, $option, $sort and body data needs to be serialized. And response data needs to be unserialized. You can use the following tools to do these operations.

var util = require('nedb-rest/main/util');

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.