MongoDB是否具有本机REST接口?

May*_*ain 28 javascript api rest mongodb

我目前正在评估Mongo和CouchDB存储数据点(分析).

在我早期与CouchDB的互动中,我喜欢它的基于JSONP的界面.我可以从纯JavaScript执行所有CRUD操作.只需运行CouchDB并编写一些JavaScript - 无需服务器端组件.

将它与Mongo进行比较时,是否有可用的REST接口?是否有可能纯粹从Mongo的javascript做CRUD?

谢谢!

Tom*_*icz 39

MongoDB没有完整的REST接口,主要是因为服务器使用本机二进制协议来提高效率.您可以在官方文档中找到几个REST包装器:

  • RESTHeart(Java 8)是MongoDB生态系统的数据REST API服务器部分.RESTHeart使用基于HAL的标准表示格式,通过BSON的严格模式表示支持完整的本机mongodb数据.它为CRUD和数据模型操作提供API,内置身份验证和授权,并且它支持CORS.它易于安装,并且可以使用码头集装箱.RESTHeart也快速而轻巧(大约700 Mb的占用空间和大约200 Mb的RAM使用率).

  • Sleepy Mongoose(Python)是MongoDB的全功能REST接口,可作为单独的项目使用.

  • MongoDB Rest(Node.js)是MongoDBalpha REST接口,它使用MongoDB Node Native驱动程序.

  • 简单的REST接口为方便起见,mongod进程包括一个简单的只读REST接口.对于完整的REST功能,我们建议使用Sleepy.Mongoose等外部工具.

  • 要启用简单REST接口,请在命令行中指定`--rest`到mongod,或在`mongodb.conf`中添加`rest = true`,同时为了启用JSONP输出,你需要`-jsonp`或`jsonp = true`然后你将回调函数的名称指定为请求参数,例如`http://mymongodb.example.com/database/collection/?jsonp = myCallback` (4认同)
  • 如果您的数据库不是本地数据库,则本机--restrest功能不支持CORS,如果没有反向代理,则会限制实用性. (3认同)
  • 这个解决方案现在已经过时了。请参阅@sumedhamehta的解决方案进行更新:/sf/ask/517071831/#70369916 (3认同)

sum*_*hta 23

预览版 MongoDB Atlas Data API也于 2021 年 11 月发布,可通过该公司的Atlas 产品与托管 MongoDB 实例一起使用。它允许您通过标准 HTTPS 接口向 MongoDB 发送复杂的查询和聚合,但目前不建议直接进行客户端访问。

例如,一旦创建了集群并为其启用了数据 API,就可以使用以下请求来插入文档 -

  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"
      }
  }'
Run Code Online (Sandbox Code Playgroud)

以及以下进行聚合 -

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": "*"
        }
      }
    }
  }
]
}
Run Code Online (Sandbox Code Playgroud)

API 和 Atlas 都提供免费套餐,只需几分钟即可启动。

全面披露 - 我在 MongoDB, Inc. 工作。


Mat*_*ski 7

另一种选择(无耻插头)是DrowsyDromedary.

我们开发了Drowsy,因为对Mongo的其他REST选项感到沮丧.即,我们发现:

困倦的猫鼬并不是真正的RESTful.这是一个hacky HTTP接口,不遵循REST约定; 它不使用标准的REST HTTP方法,它不使用URL来正确识别资源......我们还发现限制最大结果数(默认情况下受限制)的选项相当混乱.

mongodb-rest提供了一个合适的REST接口,但是我们发现它很难运行.它会经常死亡,并驱使我们的系统管理员疯狂(谁承认运行node.js服务的经验很少).

内置REST接口将是巨大的,但它被只读意味着它是对我们的需求大多是无用的.

DrowsyDromedary是为解决上述许多问题而开发的:

  1. 它提供了传统的REST接口,支持标准的HTTP动词(GET,POST,PUT,DELETE,PATCH).
  2. 安装和部署相当容易(从github克隆,安装捆绑器,运行bundle,然后rackup运行).它也可以在Apache或nginx下轻松部署.


Har*_*rry 5

编辑

Python Eve是一个很棒的解决方案.我发现它非常易于使用且具有高度可配置性.

Eve是一个专为人类设计的开源Python REST API框架.它允许毫不费力地构建和部署高度可定制的,功能齐全的RESTful Web服务.

Eve由Flask,Redis,Cerberus,Events提供支持,并支持MongoDB和SQL后端[*].

代码库在Python 2.6,2.7,3.3,3.4和PyPy下经过全面测试.

入门很简单:

from eve import Eve

app = Eve()
app.run()
Run Code Online (Sandbox Code Playgroud)

并用作

$ curl -i http://example.com/people
  HTTP/1.1 200 OK
Run Code Online (Sandbox Code Playgroud)

REST端点模式可以在设置文件中轻松定义.

原版的

我还没有使用它,但RESTHeart看起来像是对此的回答.

从文档中可以轻松设置和使用.