跳至主要内容

API v2 概覽

client.v2 用來存取 v2 表面:90 個資源類,是根據 Plane 的 api_v2 OpenAPI 文件生成的。客戶端上的 v1 資源 保持不變(參見 API v1)。

有兩種進入方式,而且無論走哪種方式,都是同樣的資源:

  1. 扁平路徑。 每個資源都是一個屬性,每個 id 都是一個引數。
  2. 已載入的行。 一行被載入之後,就是它的子項所在的地方。參見 已載入的行。

扁平路徑​

一個資源掛在名稱空間中,位置由它的 URL 決定,並且把 URL 中命名的那些 id 當作位置在前的引數接收, 順序與路徑一致:

import { PlaneClient } from "@hoyasumii/plane";

const client = new PlaneClient({ baseUrl: "https://api.plane.so", apiKey: "..." });

// GET /workspaces/acme/projects/ENG/states/
await client.v2.workspaces.projects.states.list("acme", "ENG");

// GET /workspaces/acme/projects/ENG/work-items/wi-1/comments/
await client.v2.workspaces.projects.workItems.comments.list("acme", "ENG", "wi-1");

// GET /workspaces/acme/teamspaces/
await client.v2.workspaces.teamspaces.list("acme");

v2.workspaces 和 v2.workspaces.projects 是兩個根。每個資源都恰好位於一條屬性路徑上,也就是它的 URL 所命名的那條路徑:工作區級別的資源在 v2.workspaces 下,專案級別的資源在 v2.workspaces.projects 下。

project 既接受專案的 UUID,也接受它可讀的識別符號("ENG")。一個工作項目可以透過它的人類可讀鍵,用 retrieveByIdentifier 來查詢。沒有任何 v2 方法會接受 workspaceSlug 或 project 選項物件:路徑 id 是 位置引數,且始終排在最前,順序與 URL 一致,其他一切都放在末尾的 params 物件中。

// ENG-123,不需要先知道它屬於哪個專案。
const item = await client.v2.workspaces.workItems.retrieveByIdentifier("acme", "ENG-123");
console.log(item.name);

標準方法​

大多數資源都會暴露一部分相同的動詞,每個動詞的路徑 id 都排在最前:

方法作用
list(...ids, params?)一頁資料(分頁)
iterate(...ids, params?)一個幫你翻頁的非同步迭代器
retrieve(...ids, id, params?)一行資料
create(...ids, data, params?)新建一行
update(...ids, id, data, params?)部分更新
upsert(...ids, data, params?)建立,或者更新擁有相同 external_source/external_id 的那一行
delete(...ids, id)刪除該行
archive / unarchive用於專案和工作項目
bulkCreate / bulkUpdate / bulkDelete批次操作(成員關係與批次寫入)
findByName 及其他 findBy*按人類可讀鍵查詢唯一一行(查詢)

接受 fields 的讀取和寫入方法,會把返回型別縮小到你要求的那些欄位上(欄位投影)。 expand 會內聯相關物件,order_by 會針對該操作自身的排序方式進行校驗。

生成的資料​

v2.FIELDS、v2.EXPAND 和 v2.ORDER_BY 是完整的「操作 id → 允許值」對映表,編碼器就是拿它們來做校驗的 (例如 v2.FIELDS["states_list"] 列出了 states.list 接受的每一個欄位)。v2.OPENAPI_VERSION 是 SDK 據以生成的 api_v2 文件版本號。以上這些,加上兩個上限 v2.BULK_MAX_ITEMS 和 v2.BRIDGE_MAX_IDS,都被 匯出了,這樣你就可以列舉合法的值,而不必去猜。

import { v2 } from "@hoyasumii/plane";

console.log(v2.OPENAPI_VERSION, v2.FIELDS["states_list"]);