添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
英俊的大葱  ·  webpack + Travis CI ...·  1 周前    · 
想旅行的松球  ·  北京·  6 月前    · 
悲伤的茄子  ·  DataGridView 類別 ...·  10 月前    · 

SeaTable Web API

如下图所示:SeaTable 中的一个表格叫做 base。一个 base 包括多个子表 (table)。一个 table 包括多个列 (column) 和行 (row)。SeaTable 中一个表格用起来就像是一个 database,这里 base 可以看成是 database 的简写。

SeaTable 服务器包含以下的组件:

  • dtable-web: 主网站,显示和管理 base 的列表。
  • dtable-server: 加载一个 base 对应的文件到内存,并提供协同功能。
  • dtable-db: 提供数据归档功能,并提供 SQL 查询结果来查询全量数据(包括归档和未归档的数据)。
  • seaf-server: 保存附件 (文件和图片)。
  • dtable 是 SeaTable 项目的早期名称, 另外早期一个 base 也叫做一个 dtable。

    API 基础

    SeaTable 中有两类 API

  • 一类是全局 API, 包括管理账号、管理 base 列表的 API,由 dtable-web 组件提供。
  • 一类是读写特定数据库 (base) 的 API,由 dtable-server / dtable-db 组件提供。
  • 两类 API 由不同的组件提供,需要使用不同的认证 token。如果你只需要操作单个 base, 我们建议只使用第二类 API,这样不需要使用用户名和密码,更加安全。

    具体的 API 认证 Token以及结构请参照下图, 以下会进行详细说明

    全局 API

    调用这一类的 API 需要一个合法的 token, 叫做 Account token, 这个 token 要包含在 HTTP 请求的头部, 如:

    curl -H 'Authorization: Bearer 24fd3c026886e3121b2ca630805ed425c272cb96' https://
    cloud.seatable.cn/api2/auth/ping/
    

    该 token 需要使用用户的登陆用户名以及密码进行获取, 全局 API 由 DTable Web 组件提供, 可以进行 Workspace管理, 用户管理, Base管理( 非Base数据管理 ),群组以及成员管理等。根据用户认证的 角色不同, 提供了不同类型的 API, 包括:

  • 普通用户 API
  • 团队管理员 API
  • 系统管理员 API
  • 获取 account token

    用账号和密码获取认证 token, 该 token 长期有效

    注: 账号 username 可以是系统给用户分配的唯一随机 ID,可以在管理后台查到,也可以用绑定的邮箱。

    curl -d "username=xxxxxxxxxxxx@auth.local&password=123456" https://cloud.seatable.cn/api2/auth-token/
    {"token": "24fd3c026886e3121b2ca630805ed425c272cb96"}
    

    如果你的用户名中包含特殊的字符,你需要用 --data-urlencode 选项.

    curl --data-urlencode username=xxxxxxxxxxxx@auth.local -d password=123456 https://cloud.seatable.cn/api2/auth-token/
    {"token":"265757b0a5aaf5d6b2e266d0c21791121ce6cdec"}
    

    读写单个 base 的 API

    读写单个 Base 的 API 由 dtable-server 和 dtable-db 组件提供。要调用其中的 API,你需要先获取 base 的access-token。一个 base 的 access-token 的有效期是 3 天。以下有两种方式获取 base 的 access -token, 两种方式都会返回相同的结果:

    通过 API Token 获取 access-token

    可以在网页 UI 里为这个 base 生成一个 API Token,该 token 长期有效,然后调用 dtable-server 提供的 API 可以获取操作该 base 的 access-token,使用 access-token 可以对 base 的相关 API 进行访问,生成 API Token 的菜单位置如下:

    假设这里生成的一个 API Token 是 “8g971000df0d6fbntc59580766329a5b37adfh“, 调用以下 API 即可

    curl -H 'Accept: application/json; charset=utf-8; indent=4' -H 'Authorization: Bearer 8g971000df0d6fbntc59580766329a5b37adfh' "https://cloud.seatable.cn/api/v2.1/dtable/app-access-token/"
    

    通过 Account Token 获取 access-token

    假设通过上述全局 API 的 account token 获取方式,获得 的account token为 “jwiefpvwd6fbntc59580766329a5b37adfh“, base的名称叫做“CommonSurvey“, 所在的工作区的 workspace的id 为255, 请求下列 API即可:

    curl -H 'Accept: application/json; charset=utf-8; indent=4' -H 'Authorization: Bearer jwiefpvwd6fbntc59580766329a5b37adfh'https://cloud.seatable.cn/api/v2.1/workspace/255/dtable/CommonSurvey/access-token/"
    

    以上两种方式都会返回以下结果:

    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjkyMjYxNzEsImR0YWJsZV91dWlkIjoiYjFjYWViNjFjZThmNDhiOWFlY2ZkNDZkNDI5OGM2MmQiLCJ1c2VybmFtZSI6IjEyM0BxcS5jb20iLCJwZXJtaXNzaW9uIjoiciIsImFwcF9uYW1lIjoicnR5dSJ9.pUn_HtrNwISji0nOe0_-0b5JyXN0yEIwzhdIaju-8VE", "dtable_uuid": "b1caeb61-ce8f-48b9-aecf-d46d4298c62d", "dtable_server": 'https://dtable-server.seatable.cn/', "dtable-db": 'https://dtable-db.seatable.cn/' "dtable_socket: 'https://cloud.seatable.cn/',

    用以上的信息你就能调用 dtable-server 和 dtable-db 提供的 API 了, 这一部分的 API 由 dtable_server / dtable-db 提供, 因此服务器地址可以参照使用上述返回的具体内容

    API列表

    Restful API

    SeaTable Restful API:这是 restful 形式编写的 API 说明,采用英文书写, 不限于编程语言。我们在文档中提供了 一个 API 请求的详细说明, 包括但不限于请求方式, 请求体, 返回的数据结构等。

    Python API

    SeaTable Python API:这是我们封装好了 Python 库来方便你调用上述的 API。而且 Python 脚本还可以直接上传到 SeaTable 服务器上运行,不需要你单独的找一台机器来部署。

    上述 Restful API 文档是基于 国外的云服务编制而成, 此外还有一些 功能以及 API 是在中国国内使用, 而在国外用不到的, 此处列举出来:

    需要注意的问题

    上述 API 文档是基于 SeaTable 的 国外服务基础上编制而成, 其请求的域名 与 SeaTable 开发者/私有部署版类似即

  • dtable-web: API 请求域名 https://cloud.seatable.io , 地址 是 域名 + “/api/v2.1/....“
  • dtable-server: API 请求域名 https://cloud.seatable.io/dtable-server/, 地址 是 域名 + “/api/v1/....“
  • dtable-db: API 请求域名 https://cloud.seatable.io/dtable-db/, 地址 是 域名 + “/api/v1/....“
  • 开发者版或者私有部署版,以上的 “cloud.seatable.io“ 可以使用 你自己的服务器的域名来代替。

    以下是 国内 SeaTable 的国内云服务, 请求的域名与上述稍有不同, 用户在参照 API 文档时测试国内版本的时候需要进行注意

    国内云服务 (https://cloud.seatable.cn/ )

    SeaTable 国内云服务请求域名如下:

  • dtable-web: https://cloud.seatable.cn/ , 请求方式 域名 + “/api/v2.1/.....“ 的方式, 如 以下 API 查看 用户管理的 base 的信息:
  • curl --request GET \
         --url https://cloud.seatable.cn/api/v2.1/user-admin-dtables/ \
         --header 'accept: application/json' \
         --header 'authorization: Bearer foue8r4729393766tfhfkjhwseur93uuf23'
    
  • dtable-server: 由于国内的 dtable-server 服务器采用的是集群部署的模式, 因此对于每个 base 提供服务的 服务器的域名有一些区别, 具体的方式可以通过上述获取 access-token 时的返回结果来查看 “dtable_server“ 字段的信息。 不过格式大致为 https://dtable-server-04.seatable.cn/ , 或者 https://dtable-server-03.seatable.cn/ 等, 即 dtable-server-\<机器编号>, 请求方式是 域名 + “/api/v1/....“ 的方式, 如以下 API 来列出表格的行:
  • curl --request GET \
         --url https://dtable-server-03.seatable.cn/api/v1/dtables/base_uuid/rows/?table_name=Table1 \
         --header 'accept: application/json' \
         --header 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDU4MjM3NjcsImR0YWJsZV91dWlkIjoiN2Q5ZjJjMWQtZjE3MC00ZDg5LWJlNmQtNjZjMGM2MTM2N2RhIiwidXNlcm5hbWUiOiJhZWE5ZTgwN2JjZmQ0ZjM0ODFkNjAyOTRkZjc0ZjZlZUBhdXRoLmxvY2FsIiwiaWRfaW5fb3JnIjoiIiwidXNlcl9kZXBhcnRtZW50X2lkc19tYXAiOnsiY3VycmVudF91c2VyX2RlcGFydG1lbnRfaWRzIjpbXSwiY3VycmVudF91c2VyX2RlcGFydG1lbnRfYW5kX3N1Yl9pZHMiOltdfSwicGVybWlzc2lvbiI6InJ3In0.31qwCMWOmqdOXnm0MZJ5KK5DIGvBl4U6OaJUdLMA91g'
    
  • dtable-db:类似于上述 dtable-server, 具体的请求域名依然可以通过获取 access-token 的方式进行获取, 查看 “dtable_db“ 字段的信息。 域名 为 “https://dtable-db.seatable.cn/ “, 请求方式是 域名 + “/api/v1/...“ 的方式, 如以下 API 使用 SQL 来查询表格信息:
  • curl --request POST \
         --url https://dtable-db.seatable.cn/api/v1/query/base_uuid/ \
         --header 'accept: application/json' \
         --header 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDU4MjM3NjcsImR0YWJsZV91dWlkIjoiN2Q5ZjJjMWQtZjE3MC00ZDg5LWJlNmQtNjZjMGM2MTM2N2RhIiwidXNlcm5hbWUiOiJhZWE5ZTgwN2JjZmQ0ZjM0ODFkNjAyOTRkZjc0ZjZlZUBhdXRoLmxvY2FsIiwiaWRfaW5fb3JnIjoiIiwidXNlcl9kZXBhcnRtZW50X2lkc19tYXAiOnsiY3VycmVudF91c2VyX2RlcGFydG1lbnRfaWRzIjpbXSwiY3VycmVudF91c2VyX2RlcGFydG1lbnRfYW5kX3N1Yl9pZHMiOltdfSwicGVybWlzc2lvbiI6InJ3In0.31qwCMWOmqdOXnm0MZJ5KK5DIGvBl4U6OaJUdLMA91g' \
         --header 'content-type: application/json' \
         --data '
      "convert_keys": true,
      "sql": "select * from Table1"
            

    Last modified by seatable, 3 days ago