45

I am currently evaluating Mongo and CouchDB for storing data points (analytics).

During my earlier interaction with CouchDB, I loved its JSONP based interface. I could perform all CRUD operations from purely JavaScript. Just run CouchDB and write some JavaScript - no server side component needed.

When comparing this to Mongo, is there any REST interface available? Is it possible to do CRUD purely from javascript in Mongo?

Thanks!

Henke
  • 4,445
  • 3
  • 31
  • 44
Mayank Jain
  • 2,995
  • 2
  • 23
  • 19

8 Answers8

52

There is no full-blown REST interface to MongoDB, mainly because the server uses native binary protocol for efficiency. You can find few REST wrappers in official documentation (edit: MongoDB inc has now deleted this information):

  • RESTHeart (Java 8) is a the data REST API server part of the MongoDB ecosystem. RESTHeart uses a standard representation format based on HAL with full native mongodb data support via the strict mode representation of BSON. It provides API for CRUD and data model operations, built-in authentication and authorization and it supports CORS. It is easy to setup and a docker container is available. RESTHeart is also fast and lightweight (~7 Mb footprint and ~200 Mb RAM peek usage).
  • Sleepy Mongoose (Python) is a full featured REST interface for MongoDB which is available as a separate project.
  • Simple REST Interface The mongod process includes a simple read-only REST interface for convenience. For full REST capabilities we recommend using an external tool such as Sleepy.Mongoose.
mikemaccana
  • 110,530
  • 99
  • 389
  • 494
Tomasz Nurkiewicz
  • 334,321
  • 69
  • 703
  • 674
  • 6
    To enable Simple REST Interface specify `--rest` on the command line to mongod, or add `rest = true` within `mongodb.conf`, also to enable JSONP output you need `--jsonp` or `jsonp = true` and then you specify the name of the callback function as a request parameter like this `http://mymongodb.example.com/database/collection/?jsonp=myCallback` – gb96 Jan 29 '13 at 06:08
  • 3
    the native --rest feature does not support CORS which limits the usefulness without a reverse proxy if your db is not local. – John Morales Feb 20 '15 at 18:45
  • 1
    built-in rest interface has less use because of CORS issue – Chao May 23 '15 at 11:27
  • 3
    This solution is now outdated. Please see @sumedhamehta's solution for an update: https://stackoverflow.com/questions/7386740/does-mongodb-have-a-native-rest-interface/70369916#70369916 – deriamis Jan 04 '22 at 22:07
24

The MongoDB Atlas Data API in Preview was also released in November 2021 to use with a hosted MongoDB instance through the company's Atlas offering. It lets you send complex queries and aggregations to MongoDB over a standard HTTPS interface, though it isn't currently recommended for direct client-side access.

For instance, once a cluster is created and the Data API is enabled for it, the following request can be used to insert a document -

  curl --request POST \
  'https://data.mongodb-api.com/app/<Unique ID>/endpoint/data/beta/action/insertOne' \
  --header 'Content-Type: application/json' \
  --header 'Access-Control-Request-Headers: *' \
  --header 'api-key: <Data API Key>' \
  --data-raw '{
      "dataSource": "Cluster0",
      "database": "todo",
      "collection": "tasks",
      "document": {
        "status": "open",
        "text": "Do the dishes"
      }
  }'

and the following to do an aggregation -

curl --location --request POST 'https://data.mongodb-api.com/app/<Unique ID>/endpoint/v1/beta/action/aggregate' \
--header 'Content-Type: application/json' \
--header 'Access-Control-Request-Headers: *' \
--header 'api-key:<Data API Key>' \
--data-raw '{
    "collection":"movies",
    "database":"sample_mflix",
    "dataSource": "Cluster0",
    "pipeline": [
  {
    "$search": {
      "index": "default",
      "text": {
        "query": "Brad Pitt",
        "path": {
          "wilcard": "*"
        }
      }
    }
  }
]
}

Both the API and Atlas offer free tiers and only take a few minutes to spin up.

Full disclosure - I work for MongoDB, Inc.

sumedhamehta
  • 256
  • 2
  • 6
  • Will there be any major breaking changes in GA? If I use the Data API(preview) in production, will it break when the GA comes? – Jey Raj Feb 04 '22 at 20:22
9

Another option (shameless plug) is DrowsyDromedary.

We developed Drowsy out of frustration with the other REST options for Mongo. Namely, we found that:

Sleepy Mongoose is not really RESTful. It's a hacky HTTP interface that does not follow REST conventions; it doesn't use the standard REST HTTP methods, it doesn't use URLs to properly identify resources... We also found the options for limiting the maximum number of results (which is limited by default) rather confusing.

mongodb-rest offers a proper REST interface, but we found it to be a pain in the ass to run. It would die regularly, and drove our sysadmin insane (who admittedly has little experience running node.js services).

The built-in REST interface would have been great, but it being read-only means it's mostly useless for our needs.

DrowsyDromedary, was developed to address many of the above issues:

  1. It provides a conventional REST interface, with support for the standard HTTP verbs (GET, POST, PUT, DELETE, PATCH).
  2. It's fairly easy to install and deploy (clone from github, install bundler, run bundle, and then rackup, and you're running). It can also be easily deployed under Apache or nginx.
Matt Zukowski
  • 4,469
  • 4
  • 37
  • 38
  • hu never seen a ?(shameless plug)' most well wantedthan this, since __DrowsyDromedary__ deserves more AAA's. I liked and installed just of the 'Camel' affinity, but it paid me much. I currently used it on production, and it have a super fast , super dev friendly approach. love u LOL. this should be the best – parmigiana Jan 01 '21 at 15:16
5

Edit

Python Eve is a fantastic solution for this. I have found it very easy to use and highly configurable.

Eve is an open source Python REST API framework designed for human beings. It allows to effortlessly build and deploy highly customizable, fully featured RESTful Web Services.

Eve is powered by Flask, Redis, Cerberus, Events and offers support for both MongoDB and SQL backends [*].

The codebase is thoroughly tested under Python 2.6, 2.7, 3.3, 3.4 and PyPy.

It is as simple to get started as:

from eve import Eve

app = Eve()
app.run()

and to use as

$ curl -i http://example.com/people
  HTTP/1.1 200 OK

REST endpoint schemas are easily defined in a settings file.

Original

I haven't used it yet, but RESTHeart looks like an answer to this.

From the documentation it looks easy to set up and use.

Harry
  • 3,312
  • 4
  • 34
  • 39
2

mongodb-rest's fork by ActibeUnits (github repo) is one of the fastest and most feature rich rest interface to mongodb that I've seen.

I would highly recommend it.

Mayank Jain
  • 2,995
  • 2
  • 23
  • 19
1

RESTHeart is a the new data REST API server part of the MongoDB ecosystem.

It provides API for CRUD and data model operations, built-in authentication and authorization and supports CORS.

It uses a standard representation format based on HAL+json with full support of the native mongodb data format via the strict mode representation of BSON.

It is easy to setup and a docker container is available.

RESTHeart is fast (see performance test result) and lightweight (~7 Mb footprint and ~200 Mb RAM peek usage).

Andrea Di Cesare
  • 1,125
  • 6
  • 11
1

Not really. The mongod process includes a simple read-only REST interface for convenience. For full REST capabilities you need to use an external tool such as Sleepy.Mongoose.

Thilo
  • 257,207
  • 101
  • 511
  • 656
0

No. But mongodb-rest is moving forward now.

https://github.com/codecapers/mongodb-rest

Ashley Davis
  • 9,896
  • 7
  • 69
  • 87