MongoDB 有本地 REST 接口吗?
Posted
技术标签:
【中文标题】MongoDB 有本地 REST 接口吗?【英文标题】:Does MongoDB have a native REST interface? 【发布时间】:2011-11-15 05:59:42 【问题描述】:我目前正在评估 Mongo 和 CouchDB 用于存储数据点(分析)。
在我之前与 CouchDB 的交互过程中,我喜欢它基于 JSONP 的界面。我可以从纯 javascript 执行所有 CRUD 操作。 只需运行 CouchDB 并编写一些 JavaScript - 不需要服务器端组件。
将其与 Mongo 进行比较时,是否有可用的 REST 接口? 是否可以在 Mongo 中纯粹通过 javascript 进行 CRUD?
谢谢!
【问题讨论】:
【参考方案1】:MongoDB 没有成熟的 REST 接口,主要是因为服务器使用原生二进制协议来提高效率。您可以在官方documentation 中找到一些 REST 包装器(编辑:MongoDB inc 现在已删除此信息):
RESTHeart (Java 8) 是 MongoDB 生态系统的数据 REST API 服务器部分。 RESTHeart 使用基于 HAL 的标准表示格式,通过 BSON 的严格模式表示具有完整的原生 mongodb 数据支持。 它为 CRUD 和数据模型操作提供 API,内置身份验证和授权,并支持 CORS。 它很容易设置,并且有一个 docker 容器可用。 RESTHeart 也快速且轻量级(约 7 Mb 占用空间和约 200 Mb RAM peek 使用)。
Sleepy Mongoose (Python) 是用于 MongoDB 的全功能 REST 接口,可作为单独的项目使用。
Rest on Mongo 用于 node.js。旧的MongoDB Rest 不再维护。
Simple REST Interface 为了方便起见,mongod 进程包含一个简单的只读 REST 接口。对于完整的 REST 功能,我们建议使用外部工具,例如 Sleepy.Mongoose。
【讨论】:
要启用简单 REST 接口,请在 mongod 的命令行中指定--rest
,或在 mongodb.conf
中添加 rest = true
,同样要启用 JSONP 输出,您需要 --jsonp
或 jsonp = true
然后您将回调函数的名称指定为请求参数,例如 http://mymongodb.example.com/database/collection/?jsonp=myCallback
本机 --rest 功能不支持 CORS,如果您的数据库不是本地的,这会限制没有反向代理的有用性。
由于CORS问题,内置rest接口使用较少
此解决方案现已过时。请参阅@sumedhamehta 的解决方案以获取更新:***.com/questions/7386740/…【参考方案2】:
MongoDB Atlas Data API in Preview 也于 2021 年 11 月发布,通过公司的Atlas offering 与托管的 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"
'
和下面做一个聚合 -
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": "*"
]
API 和 Atlas 都提供免费层级,只需几分钟即可启动。
全面披露 - 我为 MongoDB, Inc. 工作
【讨论】:
GA 中是否会有重大的重大变化?如果我在生产中使用 Data API(预览版),它会在 GA 到来时中断吗?【参考方案3】:另一个选项(无耻插件)是DrowsyDromedary。
出于对 Mongo 的其他 REST 选项的不满,我们开发了 Drowsy。即,我们发现:
Sleepy Mongoose 并不是真正的 RESTful。这是一个不遵循 REST 约定的 hacky HTTP 接口;它不使用标准的 REST HTTP 方法,不使用 URL 来正确识别资源……我们还发现限制结果的最大数量(默认情况下受到限制)的选项相当混乱。
mongodb-rest 提供了适当的 REST 接口,但我们发现运行起来很麻烦。它会定期死机,让我们的系统管理员发疯(诚然,他几乎没有运行 node.js 服务的经验)。
内置的 REST 接口会很棒,但它是只读的,这意味着它对我们的需求几乎没有用处。
DrowsyDromedary,旨在解决上述许多问题:
-
它提供了一个传统的 REST 接口,支持标准的 HTTP 动词(GET、POST、PUT、DELETE、PATCH)。
安装和部署相当容易(从 github 克隆,安装 bundler,运行
bundle
,然后运行rackup
,然后您就可以运行了)。它也可以轻松部署在 Apache 或 nginx 下。
【讨论】:
hu 从来没有见过比这更受欢迎的?(无耻的插头)',因为 DrowsyDromedary 应该得到更多的 AAA。我喜欢并安装了“骆驼”亲和力,但它给了我很多。我目前在生产中使用它,它具有超级快速、超级开发友好的方法。爱你哈哈。这应该是最好的【参考方案4】:编辑
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()
并用作
$ curl -i http://example.com/people
HTTP/1.1 200 OK
REST 端点架构很容易在设置文件中定义。
原创
我还没有使用它,但RESTHeart 看起来像是对此的答案。
从文档来看,它看起来很容易设置和使用。
【讨论】:
【参考方案5】:由 ActibeUnits (github repo) 开发的 mongodb-rest 分支是我见过的最快且功能最丰富的 mongodb REST 接口之一。
我强烈推荐它。
【讨论】:
【参考方案6】:不是真的。为方便起见,mongod 进程包括a simple read-only REST interface。要获得完整的 REST 功能,您需要使用外部工具,例如 Sleepy.Mongoose。
【讨论】:
【参考方案7】:RESTHeart 是 MongoDB 生态系统中新的数据 REST API 服务器部分。
它为CRUD和数据模型操作提供API,内置认证和授权,并支持CORS。
它使用基于 HAL+json 的标准 representation format,通过 BSON 的严格模式表示完全支持原生 mongodb 数据格式。
setup 很容易,docker container 可用。
RESTHeart 速度快(请参阅 performance test result)且轻量级(约 7 Mb 占用空间和约 200 Mb RAM peek 使用量)。
【讨论】:
【参考方案8】:没有。但是 mongodb-rest 现在正在向前发展。
https://github.com/codecapers/mongodb-rest
【讨论】:
以上是关于MongoDB 有本地 REST 接口吗?的主要内容,如果未能解决你的问题,请参考以下文章
通过 Heroku 部署时,本地 MongoDB 将无法连接
使用Flask+MongoDB实现基于REST的接口简单操作