Skip to content

CouchDB - cURL 与 Futon

CouchDB 基于 RESTful HTTP API 构建,这意味着您可以使用标准的 HTTP 方法与其交互。主要有三种方法可以做到这一点:使用命令行工具(如 cURL)、基于 Web 的界面 Fauxton 或应用程序级别的 SDK。

cURL 是一个强大的命令行工具,用于发出 HTTP 请求。它非常适合脚本编写、测试和快速交互。您在使用 CouchDB 时最常用的标志有:

  • -X <METHOD>:指定 HTTP 方法,例如 GET、POST、PUT、DELETE。
  • -H <HEADER>:设置请求头,例如 -H 'Content-Type: application/json'。
  • -d <DATA>:在请求体中发送数据,例如 JSON 对象。
  • -u <user:password>:提供基本 HTTP 身份验证的凭据。

您可以向 CouchDB 实例的根目录发送 GET 请求,以验证它是否正在运行并获取基本信息。

$ curl -X GET http://127.0.0.1:5984/ -u admin:secret
{
"couchdb": "Welcome",
"version": "3.3.2",
"git_sha": "...",
"uuid": "...",
"features": [
"partitioned",
"reshard",
"scheduler"
],
"vendor": {
"name": "The Apache Software Foundation"
}
}

此响应确认服务器正在运行并提供版本详细信息。请注意,确切的版本、git_sha 和 uuid 会根据您的安装而有所不同。

Fauxton 是 CouchDB (2.0+) 现代的官方 Web UI,取代了传统的 Futon 工具。它是管理 CouchDB 实例最用户友好的方式。

您可以通过导航到 http://127.0.0.1:5984/_utils/ 来访问 Fauxton。

Fauxton 的主要功能包括:

  • 数据库管理: 创建、查看和删除数据库。
  • 文档管理: 一个功能齐全的 JSON 编辑器,用于创建、读取、更新和删除文档 (CRUD)。
  • 查询和索引: 内置界面用于创建和运行 Mango Queries,以及管理 MapReduce Views。
  • 复制: 一个可视化工具,用于设置、监控和管理数据库之间的复制。
  • 系统状态: 查看活动任务、日志和配置设置。

对于大多数日常管理任务,Fauxton 提供了一个强大且直观的图形界面。

在构建应用程序时,直接进行 cURL 或 HTTP 调用既繁琐又容易出错。最佳实践是使用特定语言的软件开发工具包 (SDK) 或客户端库。这些库提供了 HTTP API 的便捷抽象。

使用 SDK 的好处包括:

  • 更清晰、更易读的代码。
  • 正确处理连接和身份验证。
  • 用于常见操作(例如,创建文档、获取视图)的辅助函数。
  • 更好的错误处理和类型安全(在强类型语言中)。

这是一个概念性代码片段,展示了如何使用 nano(CouchDB 的官方 Node.js 库)创建数据库和文档。这演示了代码变得多么简单。

// 运行此示例需要 Node.js 和 'nano' 包。
// 设置:npm init -y && npm install nano
const nano = require('nano')('http://admin:secret@127.0.0.1:5984');
async function initializeAppDb() {
const dbName = 'my-app-db';
try {
// Create the database (ignores error if it already exists)
await nano.db.create(dbName);
console.log(`Database '${dbName}' created or already exists.`);
// Select the database to use
const db = nano.use(dbName);
// Create a new document
const userProfile = {
type: 'user',
name: 'Alice Wonder',
email: 'alice.wonder@example.com'
};
const response = await db.insert(userProfile);
console.log('Document created successfully:', response);
} catch (error) {
console.error('An error occurred:', error.message);
}
}
initializeAppDb();

这种方法对于任何实际应用程序来说都更健壮、更易维护且可扩展。