You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.7 KiB

CozoServer独立服务

server

本文叙述的是如何安装设置服务程序本身。有关如何使用 CozoDBCozoScript的信息文档

下载

独立服务的程序可以从 GitHub 发布页Gitee 发布页 下载,其中名为 cozoserver-* 的是独立服务程序,名为 cozoserver_all-* 的独立程序同时支持更多地存储引擎,比如 TiKV

启动服务程序

在终端中执行:

./cozoserver

如此执行命令会使用纯内存的非持久化存储引擎。执行 ./cozoserver -h 可查看如何启用其它引擎,以及其它参数。

若要终止程序,按下 CTRL-C 按键,或向进程发送 SIGTERM (比如通过 kill 命令)。

命令行界面

在执行时加入 -r--repl 参数可开启命令行界面REPL同时不会启动 web 服务。其它选择存储引擎的参数可一同使用。

查询 API

查询通过向 API 发送 POST 请求来完成。默认的请求地址是 http://127.0.0.1:9070/text-query 。请求必须包含 JSON 格式的正文,具体内容如下:

{
    "script": "<COZOSCRIPT QUERY STRING>",
    "params": {}
}

params 给出了查询文本中可用的变量。例如,当 params{"num": 1} 时,查询文本中可以以 $num 来代替常量 1。请善用此功能,而不是手动拼接查询字符串。

HTTP API 返回的结果永远是 JSON 格式的。如果请求成功,则返回结果的 "ok" 字段将为 true,且 "rows" 字段将含有查询结果的行,而 "headers" 将含有表头。如果查询报错,则 "ok" 字段将为 false,而错误信息会在 "message" 字段中,同时 "display" 字段会包含格式化好的友好的错误提示。

Cozo 的设计,基于其在一个受信任的环境中运行,且其所有用户也是由受信任的这种假设。因此 Cozo 没有内置认证与复杂的安全机制。如果你需要远程访问 Cozo 服务,你必须自己设置防火墙、加密和代理等,用来保护服务器上资源的安全。

由于总是会有用户不小心将服务接口暴露于外网Cozo 有一个补救措施:如果从非回传地址访问 Cozo则必须在所有请求中以 HTTP 文件头 x-cozo-auth 的形式附上访问令牌。访问令牌的内容在启动服务的终端中有提示。注意这仅仅是一个补救措施,并不是特别可靠的安全机制,是为了尽量防止一些不由于小心而造成严重后果的悲剧。

所有 API

  • POST /text-query,见上。
  • GET /export/{relations: String},导出指定表中的数据,其中 relations 是以逗号分割的表名。
  • PUT /import,向数据库导入数据。所导入的数据应以在正文中以 application/json MIME 类型传入,具体格式与 /export 返回值中的 data 字段相同。
  • POST /backup,备份数据库,需要传入 JSON 正文 {"path": <路径>}
  • POST /import-from-backup,将备份中指定存储表中的数据插入当前数据库中同名存储表。需要传入 JSON 正文 {"path": <路径>, "relations": <表名数组>}.
  • GET /,用浏览器打开这个地址,然后打开浏览器的调试工具,就可以使用一个简陋的 JS 客户端。

注意 importimport-from-backup 接口不会激活任何触发器。

编译

编译 cozoserver 需要 Rust 工具链。运行

cargo build --release -p cozoserver -F compact -F storage-rocksdb