# RESTful API > 此文档主要介绍 TuGrpah 的 Rest API 的调用详情。 ## 1.简介 TuGraph 提供遵从 REST 规范的 HTTP API,以供开发者通过 HTTP 请求远程调用 TuGraph 提供的服务。 本文档描述 TuGraph 的 HTTP API 使用方式。 ## 2.请求与响应格式 TuGraph HTTP Server 接收json格式的请求,经过鉴权后开始提取请求中的字段,根据定义好的接口逻辑处理请求,并返回json格式的响应。 ### 2.1.标准响应格式 每一个响应都以标准响应格式返回,格式如下: | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |--------------|-------------|------------| | errorCode | 业务级错误码 | int类型 | 是 | | success | 请求是否成功 | int类型 | 是 | | errorMessage | 业务级错误信息 | 字符串类型 | 是 | | data | 请求成功时返回的响应信息 | json字符串 | 是 | ### 2.2请求类型 #### 2.2.1. 用户登陆 用户在登陆请求中携带用户名和密码发送到服务端。登录成功会收到带有签名的令牌(Json Web Token)和判断是否为默认密码的布尔型变量,客户端储存该令牌,在后续的请求中将令牌加入请求头的Authorization域中。如果登录失败会收到“Authentication failed”错误。 - **URI**: /login - **METHOD**: POST - **REQUEST**: | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |------|-------|------------| | userName | 用户名 | 字符串类型 | 是 | | password | 用户密码 | 字符串类型 | 是 | - **RESPONSE**: 如果成功,返回的响应信息中success为00,data中包含令牌 | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |------|-------|------------| | authorization | 令牌 | 字符串类型 | 是 | | default_password | 默认密码 | 布尔类型 | 是 | **Example request.** ``` {"userName" : "test", "password" : "123456"} ``` #### 2.2.2. 用户登出 用户登出,同时删除已经认证的token,用户后续发送请求时,需要重新登陆,并获取新的token。 - **URI**: /logout - **METHOD**: POST - **REQUEST**: http request header中携带调用login接口时返回的token,body中没有参数 - **RESPONSE**: 如果成功,返回的响应信息中success为00,data为空 #### 2.2.3. 身份刷新 已下发的token失效后,需要调用本接口重新认证。后端验证token合法性。token在初次登录后,1小时内有效,过期需要刷新 - **URI**: /refresh - **METHOD**: POST - **REQUEST**: http request header中携带调用login接口时返回的token,body中没有参数 - **RESPONSE**: 如果成功,返回的响应信息中success为00,data中包含令牌 | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |------|-------|------------| | authorization | 令牌 | 字符串类型 | 是 | #### 2.2.4. 调用cypher 用户对TuGraph的增删改查请求需要调用cypher接口,并通过标准的cypher查询语言发起 - **URI**: /cypher - **METHOD**: POST - **REQUEST**: | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |----------|-------|------------| | graph | 查询的子图名称 | 字符串类型 | 是 | | script | cypher语句 | 字符串类型 | 是 | - **RESPONSE**: 如果成功,返回的响应信息中success为00,data中包含查询结果 | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |------|---------|------------| | result | 查询结果 | json字符串 | 是 | **Example request.** ``` {"script" : "Match (n) return n", "graph" : "default"} ``` #### 2.2.5. 上传文件 接口用于将本地文件上传至TuGraph所在机器。可以上传文本文件,二进制文件,可以上传大文件,也可以上传小文件,对于大文件,客户端在上传时应该对文件做切分,每个文件分片不大于1MB,参数Begin-Pos和Size对应本次分片在完整文件中的偏移量与分片大小。参数需要放在http请求的报文头,请求内容对应文件分片内容。本接口请求头不止有token参数 - **URI**: /upload_file - **METHOD**: POST - **REQUEST**: | header参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |-------------|------------------|------------| | File-Name | 文件名称 | 字符串类型 | 是 | | Begin-Pos | 开始位置在文件内的偏移 | 可以转成size_t类型的字符串 | 是 | | Size | 本次请求文件分片大小 | 可以转成size_t类型的字符串 | 是 | - **RESPONSE**: 如果成功,返回的响应信息中success为00 #### 2.2.6. 检查文件 本接口用于检查已上传文件正确性,如果成功通过检查,再次上传同一文件时,直接返回成功 - **URI**: /check_file - **METHOD**: POST - **REQUEST**: | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |----------------|---------------|-------------| | fileName | 文件名称 | 字符串类型 | 是 | | checkSum | 文件对应md5值 | 可以转成int类型的字符串 | flag为"1"时必填 | | fileSize | 文件长度(以字节计算) | 可以转成int类型的字符串 | flag为"2"时必填 | | flag | 标记位,flag为1时校验md5。flag为2时校验文件长度 | 可以转成int类型的字符串 | 是 | - **RESPONSE**: 如果成功,返回的响应信息中success为00 | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |------|--------|------------| | pass | 检查成功为true,否则为false | bool类型 | 是 | **Example request.** ``` {"fileName" : "test.csv", "checkSum" : "$MD5", "flag" : “1”} ``` #### 2.2.7. 清理缓存文件 admin用户可以删除所有用户上传的文件,其他用户可以删除自己的上传的文件,可以删除指定名称的文件,指定用户上传的文件,也可以删除所有文件 - **URI**: /clear_cache - **METHOD**: POST - **REQUEST**: | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |-------------|---------------|-------------| | fileName | 文件名称 | 字符串类型 | flag为"0"时必填 | | userName | 用户名称 | 字符串类型 | flag为"1"时必填 | | flag | 标记位,flag为0时删除fileName指定文件, flag为1时删除userName指定用户已经上传的所有文件,flag为2时删除所有用户上传的文件 | 可以转成int类型的字符串 | 是 | - **RESPONSE**: 如果成功,返回中success为00 **Example request.** ``` {"fileName" : "test.csv", "userName" : "test", "flag" : “1”} ``` #### 2.2.8. 导入schema 本接口可以根据用户指定的schema信息创建schema模型,schema的详细格式信息请参考data-import.md - **URI**: /import_schema - **METHOD**: POST - **REQUEST**: | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |------------|---------------|-------------| | graph | 子图名称 | 字符串 | 是 | | description | schema描述信息 | json字符串 | 是 | - **RESPONSE**: 如果成功,返回中success为00 **Example request.** ``` { "graph": "test_graph", "description": { "schema": [{ "label": "Person", "type": "VERTEX", "primary": "name", "properties": [{ "name": "name", "type": "STRING" }, { "name": "birthyear", "type": "INT16", "optional": true }, { "name": "phone", "type": "INT16", "unique": true, "index": true }] }, { "label": "City", "type": "VERTEX", "primary": "name", "properties": [{ "name": "name", "type": "STRING" }] }, { "label": "Film", "type": "VERTEX", "primary": "title", "properties": [{ "name": "title", "type": "STRING" }] }, { "label": "HAS_CHILD", "type": "EDGE" }, { "label": "MARRIED", "type": "EDGE" }, { "label": "BORN_IN", "type": "EDGE", "properties": [{ "name": "weight", "type": "FLOAT", "optional": true }] }, { "label": "DIRECTED", "type": "EDGE" }, { "label": "WROTE_MUSIC_FOR", "type": "EDGE" }, { "label": "ACTED_IN", "type": "EDGE", "properties": [{ "name": "charactername", "type": "STRING" }] }, { "label": "PLAY_IN", "type": "EDGE", "properties": [{ "name": "role", "type": "STRING", "optional": true }], "constraints": [ ["Person", "Film"] ] }] } } ``` #### 2.2.9. 导入数据 本接口允许用户指定已经通过上传,校验的文件作为数据文件,按照schema参数描述的配置信息,导入到graph参数指定的子图中。导入过程是异步的,server在接收到导入请求后,返回一个任务id - **URI**: /import_data - **METHOD**: POST - **REQUEST**: | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |-------|---------|----| | graph | 子图名称 | 字符串类型 | 是 | | schema | 导入schema描述 | json字符串 | 是 | | delimiter | 分隔符 | 字符串类型 | 是 | | continueOnError | 单行数据出错是否跳过错误并继续 | boolean类型 | 否 | | skipPackages | 跳过的包个数 | 可以转成int类型的字符串 | 否 | | taskId | 任务id,用于重启出错的任务 | 字符串类型 | 否 | | flag | 标记位,flag为1时导入成功将删除数据文件 | 可以转成int类型的字符串 | 否 | | other | 其他参数 | 可以转成int类型的字符串 | 否 | - **RESPONSE**: 如果成功,返回的响应信息中success为00 | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |------|--------|------------| | taskId | 任务编号 | 字符串类型 | 是 | **Example request.** ``` { "graph": "default", //导入的子图名称 "delimiter": ",", //数据分隔符 "continueOnError": true, //遇到错误时是否跳过错误数据并继续导入 "skipPackages": “0”, //跳过的包个数 "flag" : "1", "schema": { "files": [{ "DST_ID": "Film", //终点label类型 "SRC_ID": "Person", //起点label类型 "columns": [ //数据格式说明 "SRC_ID", //起点id "DST_ID", //终点id "SKIP", //表示跳过此列数据 "charactername" //属性名称 ], "format": "CSV", //数据文件格式类型,支持csv和json "path": "acted_in.csv", //数据文件名称 "header": 0, //数据从第几行开始 "label": "ACTED_IN" //边的类型 }] } } ``` #### 2.2.10. 导入进度查询 本接口用于查询导入任务的执行进度 - **URI**: /import_progress - **METHOD**: POST - **REQUEST**: | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |----------------------|---------|----| | taskId | import_data接口返回的任务id | 字符串类型 | 是 | - **RESPONSE**: 如果成功,返回的响应信息中success为00 | body参数 | 参数说明 | 参数类型 | 是否必填 | | ------- |---------|------------------|---------| | success | 是否成功导入 | boolean类型 | 是 | | reason | 导入失败原因 | 字符串类型 | success为false时必填 | | progress | 当前导入进度 | 可以转成double类型的字符串 | 是 | **Example request.** ``` {"taskId" : "$taskId"} ```