DEV Community

Cover image for Crudlify: simple CRUD REST API's for a NoSQL database
Jbee - codehooks.io
Jbee - codehooks.io

Posted on

Crudlify: simple CRUD REST API's for a NoSQL database

In database speak, create, read, update, and delete (CRUD) are the four basic operations of persistent storage (Wikipedia).
In many application the CRUD are the baseline in your data backend, i.e. to get anything working in the front-end, you need a basic CRUD API backend.

NoSQL databases are popular for their schemaless and document oriented (JSON) way of working with data. MongoDB is perhaps the best known brand of all NoSQL document databases.

To help codehooks.io JavaScript (and Typescript) developers kick-start their data backend, we created two open source packages that automagically creates a full CRUD REST API based on a data schema definition. The first one is based on Yup, a popular, fluent schema and validation library, the second is based on JSON schema, a standard approach to create schemas for JSON.

  1. Yup schema
  2. JSON schema

A code example with Yup

The code example below shows a Yup schema that defines two objects: customer and product.

/* 
* schema.js
*/
import * as yup from 'yup';

// yup schemas per collection

// customer schema
let customer =
  yup.object().shape({
    name: yup.string().required(),
    status: yup.mixed().oneOf(['open', 'suspended', 'closed']).required(),
    balance: yup.number().required(),
    products: yup.array().of(
        yup.object({
          name: yup.string().required(),
          price: yup.number().required()
        })
      )
  })

  // product schema, any json is allowed
let product = yup.object().shape({
  json: yup.mixed()
})

export {customer, product}
Enter fullscreen mode Exit fullscreen mode

The code example below shows how the codehooks-crudlify-yup package uses the data schema to create a CRUD REST API on top of codehooks' built-in NoSQL document database.

/*
* index.js
*/
import app from 'codehooks-js'
import crudlify from 'codehooks-crudlify-yup'
import {customer, product} from './schema'

// Add CRUD routes with yup schema
crudlify(app, {customer, product})

// bind to serverless runtime
export default app.init()
Enter fullscreen mode Exit fullscreen mode

When deploying this application to the cloud, the Crudlify library will effectively create CRUD REST API endpoints for GET, POST, PUT, PATCH and DELETE.

Verb Codehooks.io route Description
GET https://{projectid}.api.codehooks.io/:space/:collection[?field=value&...] Retrieve all objects or use API query
GET https://{projectid}.api.codehooks.io/:space/:collection/:ID Retrieve object by ID
POST https://{projectid}.api.codehooks.io/:space/:collection Add object
PUT https://{projectid}.api.codehooks.io/:space/:collection/:ID Replace object by ID
PATCH https://{projectid}.api.codehooks.io/:space/:collection/:ID Update object by ID
DELETE https://{projectid}.api.codehooks.io/:space/:collection/:ID Delete object by ID

Happy CRUD API hacking!

Full source code available at GitHub

codehooks.io is a new simple backend service for JavaScript (and Typescript) developers. It has a built in NoSQL document database with a subset of the MongoDB query language. It also has a key-value store, a message queue and a CRON job scheduling system built-in.

Top comments (0)