RESTful JSON API
CouchDB 通过提供一个 API 来从数据库中获取数据。这个 API 可以通过 HTTP GET 和 POST 请求访问,并且使用 JSON 以 JavaScript 对象的形式返回数据。这使执行数据库操作非常容易,并且与应用程序用什么语言开发无关。您可以将 JavaScript 框架和 Ajax 请求对象一起使用,比如 Prototype、JQuery 或 ExtJS — 没有必要在您的 Web 应用程序中使用服务器端语言。
为了保持简洁并且展示由 API 发出的原始 JSON 响应,我们在本文中使用命令行工具 curl。这允许您发出 GET、POST、PUT 和 DELETE 请求,并演示从 Web 服务器(在这个例子中是安装在本地的 CouchDB 服务器)接收到的原始 HTTP 响应。
请求 curl http://127.0.0.1:5984/ 返回以下响应:{"couchdb":"Welcome","version":"0.8.1-incubating"}。这个简单的 API 调用是一个简单的 GET 请求, 其响应通知我们所安装的 CouchDB 的版本。为了显式地定义所发出的请求的类型,我们将使用 curl 的 -X 参数,就像在以下请求中一样:curl -X GET http://127.0.0.1:5984/_all_dbs。这将返回以下结果:[]。
在这个例子中,我们请求了一个特别的 CouchDB 视图的 URI,该视图返回包含 CouchDB 服务器上的所有数据库的一个列表。如果我们实际创建了数据库,就会返回一个数据库名数组。但是在这个例子中,仅返回一个空 JavaScript 数组。现在我们创建一些数据库,下一次运行该请求的时候,将看到不同的结果:curl -X PUT http://127.0.0.1:5984/fruit。
收到的响应是:{"ok":true}。然后我们发出第二个请求:curl -X PUT http://127.0.0.1:5984/vegetables。收到的响应和前面的一样。现在,我们将再次请求一个数据库列表:curl -X GET http://127.0.0.1:5984/_all_dbs。这次,我们获得比以前更好的结果:["fruit","vegetables"]。
当我们创建了这些数据库之后,返回属性 “ok” 并带有布尔值 true。这表明操作是成功的。但是,如果出现异常,应该怎么办?为了让 CouchDB 服务器出现问题,我们创建一个与现有数据库同名的数据库:curl -X PUT http://127.0.0.1:5984/fruit.
这次,我们得到的响应如下所示:{"error":"database_already_exists","reason":"Database \"fruit\" already exists."}。
如您所见,CouchDB 尝试创建该数据库,但在这个过程中遇到一个错误。最后,它返回属性 “error” 和错误代码的值(在本例中为 “database_already_exists”)。当然,在现实的应用程序中,我们将检查从 CouchDB 服务器返回的所有响应,看看是否存在错误属性,并根据所发现的错误代码显示一条友好的错误消息。
假如我们不再需要 vegetables 数据库并希望删除它。要在 CouchDB 删除数据库,仅需发出一个 DELETE HTTP 请求,并将该数据库的名称附加到基 URI 中,如下所示:curl -X DELETE http://127.0.0.1:5984/vegetables。这将得到一个成功的响应,其结果和前面执行的 PUT 请求一样。现在我们使用 curl -X GET http://127.0.0.1:5984/_all_dbs 获取一个数据库列表。这将得到以下响应:["fruit"]。
如果数据库中没有任何数据,那会出现什么情况呢?清单 2 中的请求创建一个称为 “apple” 的文档。
清单 2. 创建一个称为 apple 的文档
curl -X PUT http://127.0.0.1:5984/fruit/apple \-H "Content-Type: application/json" -d {}
服务器会做出如下响应:{"ok":true,"id":"apple","rev":"1801185866"}。
现在已经创建了一个文档,我们尝试从数据库获取它:curl -X GET http://127.0.0.1:5984/fruit/apple。CouchDB 将做出如下响应:{"_id":"apple","_rev":"1801185866"}。
我们发出的最后一个 API 调用将获取关于特定数据库的信息 — 在这个例子中,为 fruit 数据库:curl -X GET http://127.0.0.1:5984/fruit。来自服务器的响应告诉我们关于该数据库的一些有趣信息:
清单 3. 来自服务器的响应
{"db_name":"fruit","doc_count":1,"doc_del_count":0,"update_seq":1,"compact_running":false,"disk_size":14263}
在这个小节中,我们探索了 CouchDB 通过 RESTful JSON API 接口提供的几个不同 API 方法。在现实中,我们不会亲自编写这些 HTTP 请求,而是由我们选择的编程语言或脚本语言完成它们。
CouchDB 还包含一个称为 Futon 的 Web 应用程序,可将它用作一个 CouchDB 管理工具,它使您能够轻松维护数据库、文档和文档修改。如果您已经将 CouchDB 安装到本地机器的默认端口 5984,则可以通过将浏览器指向以下地址来访问 Futon:http://127.0.0.1:5984/_utils/。图 1 显示了实际使用中的 Futon。
图 1. 实际使用中的 CouchDB Futon 实用工具
CouchDB 提供的 RESTful API 可能会让以前使用关系数据库管理系统的人员望而生畏,但它为与数据库进行交互提供了一种独特的高度可访问的方法。传统的数据库系统通常要求使用某些 SQL 客户机建立一个数据库连接,然后该连接接收一系列 SQL 语句,以获取数据和执行 Create、Update、Delete (CRUD) 操作。借助 RESTful JSON API,用户可以使用任何支持 HTTP 协议的软件连接到 CouchDB。事实上,许多现代的编程语言和脚本语言都以某种形式提供 HTTP 协议的接口,这意味着 CouchDB 几乎可以用于任何开发项目。
结束语
Apache CouchDB 项目还处于早期发展阶段。CouchDB 是一款正在测试中的软件。CouchDB 在 Web 应用程序、iPhone 应用程序和 Facebook 应用程序中越来越流行。到目前为止,强大的 wiki、博客、讨论论坛和文档管理软件都致力于改善关系数据库,让它们能够更高效地储存文档形式的数据。然而,随着 CouchDB 的发行版越来越稳定,CouchDB 数据库越来越受到这些类型的软件的青睐,从而避免了文档修订管理和不断变化的模式需求带来的烦恼。
总体而言,到目前为止用户对 CouchDB 的反馈都是正面的,尽管很多人觉得有必要在博客和论坛上讨论哪种数据库更好 — 关系型或面向文档型。不过,CouchDB 从来没有打算取代关系数据库,也不期望成为数据库开发的新标准。当然,在很多场景中,CouchDB 的简单性使其不能与 DB2 和 Oracle 相媲美。不过在很多其他场景中,数据库的简单性确实是必要的,传统的 RDBMS 产品被过度吹捧了,并且耗费的资源太多。
文章来源于领测软件测试网 https://www.ltesting.net/