RESTful API Legacy
此文档主要介绍 TuGrpah 的 Rest API 的调用详情。
1.简介
TuGraph 提供遵从 REST 规范的 HTTP API,以供开发者通过 HTTP 请求远程调用 TuGraph 提供的服务。
本文档描述 TuGraph 的 HTTP API 使用方式。
注意:除"登陆"、"查询"和"存储过程"外,其余接口自 2023年4月30日 起将不再提供支持,统一使用Cypher接口提供服务。
2.请求与数据格式
2.1请求
TuGraph 支持 HTTP GET/POST/PUT/DELETE 请求。其中:
- GET 请求用于只读请求,如读取点属性,边属性等操作;
- POST 请求用于创建实体,提交 Cypher,以及加载和调用存储过程;
- PUT 请求用于修改已有实体,如修改点属性,边属性等;
- DELETE 请求用于删除已有实体,如删除点,边等。
在高可用模式下,用户可以在请求的报头(request header)中设置 server_version
来保证请求的服务器有足够新的数据。
当前的 server_version
可以从服务器返回的报头中获取。
2.2.数据格式
客户端与服务端数据交互的格式是 JSON。在发送请求时,请将发送数据的请求的报头设置为 Accept:application/json, Content-Type:application/json
。
例如在创建一个点时,请求报头包含以下内容:
Accept: application/json; charset=UTF-8
Content-Type: application/json
server_version: 12
2.3.返回值
TuGraph 返回的 HTTP 状态码包含以下四种:
- 200 OK: 操作成功
- 307 Temporary Redirect: 操作被重定向,一般用于高可用模式下,把操作重定向到 master 上
- 400 Bad Request: 输入有误,例如 URI 错误,或者请求中的 JSON 参数错误
- 500 Internal Server Error: 服务器端错误
当操作成功时,返回的 JSON 中包含操作的返回值。当操作重定向时,返回的 HTTP 报头中的 location
域包含重定向目的地址。
当发生输入错误或者服务器错误时,返回的 JSON 中包含 error_message
域,其内容是错误提示。
在高可用模式下,服务器还会在报头中设置 server_version
,以告知客户端当前服务器的数据版本号。当客户端在不同的服务器之间切换时,该数据版本号可以保证客户端不会读到错误的历史数据。
2.4.URI格式
TuGraph REST API 提供以下功能:Service Root, login, info, label, index, node, relationship, cypher, cpp_plugin, 以及 python_plugin。 各功能使用的 URI 格式如下:
URI | 说明 |
---|---|
/web | web 可视化界面 |
/cypher | cypher 请求 |
/acl | 权限控制 |
/user | 用户管理 |
/login | 用户登录 |
/info | 数据库状态及提示信息 |
/task | 任务管理 |
/db | 子图操作 |
其中子图操作又分为:
URI | 说明 |
---|---|
/db | 子图的创建,删除 |
/db/{graph_name}/node | 点操作 |
/db/{graph_name}/relationship | 边操作 |
/db/{graph_name}/label | Label 相关操作 |
/db/{graph_name}/index | 索引相关操作 |
/db/{graph_name}/cypher | 子图相关 cypher 操作 |
/db/{graph_name}/cpp_plugin | C++存储过程 |
/db/{graph_name}/python_plugin | Python 存储过程 |
/db/{graph_name}/import | 在线导入 |
/db/{graph_name}/misc | 其它操作 |
3.登录
TuGraph 提供基于 JWT 的用户认证方式,可以使用 HTTP 或 HTTPS 协议进行传输。系统默认使用 HTTP 协议,如果需要使用 HTTPS,需要在 lgraph.json 配置文件中将 ssl_auth 设为 1。
3.1.登录
用户通过用户名和密码发送登录请求。登录成功会收到带有签名的令牌(Json Web Token)和判断是否为默认密码的布尔型变量,客户端储存该令牌,并且用于以后 的每次发送请求。如果登录失败会收到“Authentication failed”错误。
-
URI:
/login
-
METHOD: POST
-
REQUEST:
域名 说明 类型 user 用户名 字符串 password 密码 字符串 -
RESPONSE:
域名 说明 类型 jwt 令牌 字符串 default_password 是否为默认密码 布尔值
Example request.
• POST http://localhost:7070/login
• Accept: application/json; charset=UTF-8
• Content-Type: application/json; charset=UTF-8
Input:
{
"user":"admin",
"password":"73@TuGraph"
}
Example response.
• 200: OK
Output:
{
"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6dHJ1ZSwiaXNzIjoiZm1hLmFpIiwidXNlcl9pZCI6ImFkbWluIn0.SHaqrjKLaI4byjbEYVAH4D88dOTD_zYQ_uAvdizTMek",
"default_password": true
}
3.2.身份刷新
Token失效后,前端发起刷新token接口,后端验证token合法性。初次登录后,1小时内有效,需刷新使用。即使刷新,24小时后也会强制退出,需要重新登陆。 验证通过,生成新的token;验证失败返回状态码401。
- URI:
/refresh
- METHOD: POST
- REQUEST:
域名 说明 类型 Authorization 令牌 字符串 - RESPONSE:
域名 说明 类型 jwt 令牌 字符串
Example request.
• POST http://localhost:7070/refresh
• Accept: application/json; charset=UTF-8
• Content-Type: application/json; charset=UTF-8
Input:
{
"Authorization": "Bearer eyJhbGciOiJIUz32NiIsInR5cCI6IkpXVDJ9.eyJhZG1pbiI6dHJ1ZSwiaXNzIjoiZm1hLmFpIiwidXNlcl9pZCI6ImFkbWluIn0.SHaqrjKLaI4byj3fYVAH4D88dfTD_zYQ_uAvdizTMek"
}
Example response.
• 200: OK
Output:
{
"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6dHJ1ZSwiaXNzIjoiZm1hLmFpIiwidXNlcl9pZCI6ImFkbWluIn0.SHaqrjKLaI4byjbEYVAH4D88dOTD_zYQ_uAvdizTMek"
}
3.3.修改Token有效期
修改Token有效期,需要传输jwt,refresh_time和expire_time三个参数,其中jwt用于校验用户身份,refresh_time和expire_time等于0时,有效期为无期限,超过refresh_time时,需要调用refresh接口获取新的Token;超过expire_time时,需要重新登录。
-
URI:
/update_token_time
-
METHOD: POST
-
REQUEST:
域名 说明 类型 Authorization 令牌 字符串 refresh_time 有效时间(默认设置为0) Int64 expire_time 有效时间(默认设置为0) Int64 -
RESPONSE: 如果成功,返回代码 200。
Example request.
• POST http://localhost:7070/update_token_time
• Accept: application/json; charset=UTF-8
• Content-Type: application/json; charset=UTF-8
Input:
{
"Authorization" : "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJmbWEuYWkiLCJwYXNzd29yZCI6IjczQFR1R3JhcGgiLCJ1c2VyIjoiYWRtaW4ifQ.o_yb5veSJkuy-ieBp4MqTk-tC1grcKotgVbgNJ0TyTU",
"refresh_time":0,
"expire_time":0
}
Example response.
• 200: OK
3.4.查询Token有效期
查询Token有效期,需要传输jwt,用于校验用户身份,返回,refresh_time和expire_time,其中refresh_time表示刷新时间,超过时需要调用refresh接口获取新的Token;expire_time表示过期时间,超过时需要重新登录。
-
URI:
/get_token_time
-
METHOD: POST
-
REQUEST:
域名 说明 类型 Authorization 令牌 字符串 -
RESPONSE: 如果成功,返回"refresh_time"和"expire_time"。
Example request.
• POST http://localhost:7070/get_token_time
• Accept: application/json; charset=UTF-8
• Content-Type: application/json; charset=UTF-8
Input:
{
"Authorization" : "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJmbWEuYWkiLCJwYXNzd29yZCI6IjczQFR1R3JhcGgiLCJ1c2VyIjoiYWRtaW4ifQ.o_yb5veSJkuy-ieBp4MqTk-tC1grcKotgVbgNJ0TyTU",
}
Example response.
• 200: OK
Output:
{
"refresh_time":600,
"expire_time":3600
}
3.5.登出
用户登出,同时删除token。
- URI:
/logout
- METHOD: POST
- REQUEST:
域名 说明 类型 Authorization 令牌 字符串 - RESPONSE: 如果成功,返回代码 200。
Example request.
• POST http://localhost:7070/logout
• Accept: application/json; charset=UTF-8
• Content-Type: application/json; charset=UTF-8
Input:
{
"Authorization" : "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJmbWEuYWkiLCJwYXNzd29yZCI6IjczQFR1R3JhcGgiLCJ1c2VyIjoiYWRtaW4ifQ.o_yb5veSJkuy-ieBp4MqTk-tC1grcKotgVbgNJ0TyTU"
}
Example response.
• 200: OK
4.查询
URI 格式为
http://{host}:{port}/cypher
4.1.调用Cypher
-
URI:
/cypher
-
METHOD: POST
-
REQUEST:
域名 说明 类型 graph 数据库 字符串 cypher 查询语句 字符串 -
RESPONSE:
域名 说明 类型 result 运行结果 列表 elapsed 运行时间(秒) 浮点数 header 返回结果的表头 列表 size 结果数 整型
其中 header 是一个列表,每一元素格式如下:
域名 | 说明 | 类型 |
---|---|---|
name | 列名 | 字符串 |
type | 列数据类型,0 为标量,1 为点 id,2 为向量 |
Example request.
• POST http://localhost:7070/cypher
• Accept: application/json; charset=UTF-8
• Content-Type: application/json; charset=UTF-8
Input:
{
"graph": "default",
"script": "MATCH (n) RETURN n,n.name LIMIT 10"
}
Example response.
• 200: OK
Output:
{
"elapsed": 0.001224517822265625,
"header": [
{
"name": "n",
"type": 1
},
{
"name": "n.name",
"type": 0
}
]
"result": [
[
0,
"Rachel Kempson"
],
[
1,
"Michael Redgrave"
],
[
2,
"Vanessa Redgrave"
]
],
"size": 3
}
4.2.调用带参数的 Cypher
Cypher 支持使用参数进行查询。当调用带参数的 Cypher 查询时,TuGraph 会缓存该查询的 执行计划(execution plan),以加速后续同类查询的速度。
-
URI:
/cypher
-
METHOD: POST
-
REQUEST:
域名 说明 类型 graph 数据库 字符串 cypher 查询语句 字符串 parameters 参数 列表 -
RESPONSE:
与 调用 Cypher 相同。
Example request.
• POST http://localhost:7070/db/graph1/cypher
• Accept: application/json; charset=UTF-8
• Content-Type: application/json; charset=UTF-8
Input:
{
"graph": "default",
"script": "MATCH (n:Person {name:$param1}) RETURN n.birthyear",
"parameters": {
"$param1": "Lindsay Lohan"
}
}
Example response.
• 200: OK
Output:
{
"elapsed": 0.005886077880859375,
"header": [
{
"name": "n.birthyear",
"type": 0
}
],
"result": [
[
1986
]
],
"size": 1
}
5.存储过程
URI 格式为
http://{host}:{port}/db/{graph_name}/cpp_plugin|python_plugin
5.1.加载存储过程
TuGraph 服务启动时,如果 load_plugins 为真,则会自动加载 plugin 目录下的所有 plugin。 否则需要手动加载。此外,如果服务器运行过程中,管理员更新了 plugin 文件,也需要手动重新加载。重新加载 plugin 的调用格式为:
-
URI:
/db/{graph_name}/cpp_plugin|python_plugin
-
METHOD: POST
-
REQUEST:
域名 说明 类型 name 插件名称 字符串 description 插件说明 字符串 code_base64 插件代码 字符串,使用 base64 编码 read_only 是否为只读存储过程 布尔值 code_type 上传代码的类型,C++类型可选 zip/so/cpp,Python 为 py 字符串 -
RESPONSE: 如果成功,返回代码 200。
Example request.
• POST http://localhost:7070/db/graph1/cpp_plugin
• Accept: application/json; charset=UTF-8
• Content-Type: application/json; charset=UTF-8
Input:
{
"name" : "echo",
"description" : "A test plugin that returns the input",
"code_base64" : "{base64 encoded echo.zip}",
"read_only" : true,
"code_type" : "zip"
}
Example response.
• 200: OK
5.2.列出所有存储过程
- URI:
/db/{graph_name}/cpp_plugin|python_plugin
- METHOD: GET
- RESPONSE: 存储过程列表,其中每个元素是一个 plugin 的描述,其格式为:
域名 说明 类型 name 存储过程名 字符串 description 存储过程描述 字符串 read_only 存储过程是否只读 布尔值
Example request.
• GET http://localhost:7070/db/graph1/cpp_plugin
• Accept: application/json; charset=UTF-8