我最近对 CouchDB 产生了兴趣,并想尝试围绕它构建一个小型应用程序。
我目前邀请系统的方式是,请求提供两个东西:一个 id、一个 API key 和一个格式。 ID 是数据库中文档的 _id,API key 是具有属性 {"valid": true/false} 的另一个文档的 _id,格式是他们想要返回的格式。如果 API key 有效,系统将以请求的格式为给定的 ID 生成显示页面。否则,它将返回 403 统计代码。
不幸的是,我找不到从显示页面提取另一个文档的方法。我刚刚开始使用 CouchDB,所以也许我缺少一些简单的东西。
最佳答案
对于 _show
函数,涉及三个部分:
- 设计文档
- 设计文档中的显示功能
- 要显示的附加文件
对于 URL 格式 /db/_design/ddoc/_show/my_show_func/otherdoc
:
- 设计文档为
_design/ddoc
- 显示函数是该设计文档中的
shows.my_show_func
- 要显示的文档的
_id
为otherdoc
这是仅有涉及的两个文档。我认为执行您所描述的操作的唯一方法是为每个 API key 提供一个设计文档。用户将查询/db/_design/API_KEY/_show/other_doc_id
。 CouchDB 很轻松。数千个具有相同或相似 _show
功能的设计文档并没有什么问题。您可以根据需要使用 HTTP COPY
方法将基本设计文档克隆到新的 API key 。然后,您可以通过删除设计文档来撤销 API key 。然而,这显然是一种独特的方法,值得三思。
最后一个考虑因素是(使用默认的 CouchDB、无反向代理、mod_security 等)如果用户可以读取一个文档,他们就可以读取整个数据库(例如从 _all_docs
查询)。 )因此显示功能只是软件的一种便利,而不是安全网关。
关于api - 验证 CouchDB 中的 API key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3612285/