developers · Aug 12, 2025

資深工程師教你用Quire API打造雙向同步功能

AI 翻譯
· 查看英文版

Quire雙向同步架構圖,顯示Quire同外部應用程式之間嘅雙向數據流

最後更新:2026年7月20日

TL;DR

要喺Quire同另一個應用程式之間建立雙向同步,你需要一部中介伺服器,接收雙方嘅webhooks,再分別呼叫兩邊嘅API去同步變更。架構如下:Quire ↔ 你嘅應用程式 ↔ 其他應用程式。實作分四個步驟:架設webhook伺服器、將佢註冊到Quire(加為專案的追蹤者)、將佢註冊到另一個應用程式,再根據Quire API文件入面嘅活動類型嚟處理事件。兩條安全規則:為每個變更標記來源,避免無限循環;同時保留Quire任務ID同對方項目ID之間嘅對應表。Google日曆雙向同步應用程式就係一個實際運作嘅例子。

當數據分散喺兩個應用程式,每一個操作都要做多兩次,或者悄悄咁失去同步。雙向同步透過webhooks令Quire同另一個應用程式自動交換更新,解決咗呢個重複輸入嘅問題。Quire嘅Open API正正就係為咗呢種模式而設計。

工具之間各自為政嘅代價已經有據可查。根據McKinsey針對社交經濟嘅研究,知識工作者每星期有接近20%嘅時間都用喺搵內部資訊,而唔係做實際工作。一個可靠嘅同步機制可以自動消除當中一大部分嘅負擔。

Google日曆雙向同步應用程式就係一個經典例子:Quire任務同Google日曆事件無需人手對照就可以保持一致。呢篇文章會講解點樣針對任何其他應用程式嘅API建立同樣嘅模式。

Google日曆雙向同步係為Premium或以上訂閲級別而設嘅。更多資訊可以喺我哋嘅定價頁面搵到。

Quire雙向同步嘅組成部分

組件 角色
Quire應用程式 提供API憑證;註冊為專案的追蹤者以接收webhooks
中介伺服器(你嘅應用程式) 接收雙方嘅webhooks;呼叫各自嘅API去同步變更
另一個應用程式(例如Google日曆) 佢嗰邊事件嘅來源;亦係API寫入嘅目標
Quire應用程式設定入面嘅Webhook URL Quire發送活動事件POST請求嘅目的地
ID對應表 將Quire任務ID同另一個應用程式嘅項目ID互相對應
每個變更嘅來源標籤 防止更新出現無限循環

雙向同步嘅工作流程係點樣?

你可以將雙向同步想像成兩個應用程式之間嘅對話。當你喺Quire更新一個任務,佢就會通知另一個應用程式呢個變更。而當嗰個應用程式入面有嘢更新,佢又會通知返Quire。咁樣就可以令你嘅資訊喺任何地方都保持一致。

雙向同步工作流程圖,顯示Quire、中介軟件同外部應用程式之間嘅事件流向

實作步驟有邊啲?

第一步係設置你嘅Quire應用程式。你需要建立一個應用程式,先可以攞到透過API存取你Quire專案所需嘅憑證。

想了解點樣用Quire API建立自己嘅應用程式,一步一步嘅教學可以參考我哋嘅網誌文章

要實作雙向同步,你需要開發一個中介應用程式(你嘅應用程式),充當Quire同你嘅目標應用程式(例如Google日曆)之間嘅橋樑。你可以將佢想像成一個翻譯員:佢會由一方攞資訊,處理之後,再向另一方發送正確嘅指令。整個流程大致係咁:Quire ↔ 你嘅應用程式 ↔ 其他應用程式。

點樣一步步建立佢?

1. 準備一個用嚟處理事件嘅應用程式

要啟用雙向同步,你首先需要設置自己嘅伺服器應用程式,充當中介層。呢個應用程式負責接收Quire同另一個應用程式雙方嘅webhook POST請求。 你嘅伺服器應該可以:

  • 接收來自Quire同另一個應用程式嘅HTTP POST請求(webhook事件)。
  • 解析事件負載,並判斷需要採取咩行動。
  • 使用對應嘅API,按需要更新Quire或另一個應用程式嘅資料。

你可以用任何你偏好嘅技術建立呢部伺服器應用程式,例如Node.js、Python或者Ruby。喺以下區段,我哋會用Node.js嚟示範一個簡單嘅例子,講解點樣接收同處理webhook事件。 請確保你嘅伺服器可以從互聯網連接到,咁樣Quire同另一個應用程式先可以將webhook事件發送過去。

以下係一個用Express嘅簡單Node.js例子:

const express = require('express');
const app = express();
app.use(express.json());

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

2. 喺Quire設置webhook,將任務更新發送去你嘅應用程式。

接下來,你需要喺你嘅伺服器建立一條路由,接收來自Quire嘅webhook事件。

app.post('/webhook', (req, res) => {
  console.log('Received webhook event:', req.body);
  // TODO: Handle the event and update Quire or other app via API
  res.status(200).send('Event received');
});

喺呢個例子入面,webhook路由係/webhook,所以完整嘅URL會係${your-host}/webhook

複製呢個webhook URL,再貼上去Quire應用程式設定入面,咁Quire先知道要將事件通知發送去邊。

Quire應用程式設定畫面,顯示webhook URL設定欄位

除此之外,你仲需要將你嘅Quire應用程式註冊為你想同步嘅專案嘅追蹤者。呢樣可以確保你嘅應用程式收到相關更新嘅通知。

想了解點樣透過Quire API接收通知,一步一步嘅教學可以參考我哋嘅指南

3. 喺另一個應用程式設置webhook,將佢嘅更新發送去你嘅應用程式。

要將另一個應用程式嘅更新同步返Quire,你亦都需要喺你嘅伺服器建立一條路由,接收來自嗰個應用程式嘅webhook事件。呢個註冊流程同上面Quire嘅例子相似。只需要將另一個應用程式設定為將事件通知發送去你中介應用程式嘅webhook端點,並確保你嘅伺服器可以妥善處理呢啲傳入嘅事件。

4. 處理傳入嘅事件,並透過API更新Quire同另一個應用程式嘅資料。

一旦你嘅應用程式開始接收來自Quire同另一個應用程式雙方嘅webhook事件,你就需要實作邏輯去處理呢啲事件,並喺兩個平台之間同步資料。呢個通常涉及:

  • 解析事件負載,識別咗啲乜嘢變化(例如任務被建立、更新或刪除)。想了解更多事件結構嘅細節,可以參考Quire API文件 - 通知事件
  • 判斷需要作出咩API呼叫,先可以喺另一個應用程式反映呢啲變化。
  • 向Quire或另一個應用程式發送適當嘅API請求,令資料保持同步。
  • 維持Quire任務ID同你應用程式項目ID之間嘅對應,確保更新可以正確地互相連結。

透過小心處理傳入嘅事件同透過API更新資料,你嘅應用程式可以確保變化喺雙方都準確反映,維持可靠嘅雙向同步。

以下係一個用Node.js同axios嘅例子:

const axios = require('axios');

app.post('/webhook', (req, res) => {
  const { type } = req.body.data;
  // Reference of activity types: 
  // https://github.com/quire-api/quire-api/blob/master/docs/activity_types.md
  switch (type) {
    case 0: //Quire task created
      onQuireTaskCreate();
      break; 
    case 1: //Quire task deleted
      onQuireTaskDelete();
      break;
  }
  res.status(200).send('Event received');
});

// Route for handling events from another app to Quire
app.post('/anotherwebhook', async (req, res) => {
  const { isCreate, id, name, projectId } = req.body;
  if (isCreate) {
    // Create a task in the Quire project
    await axios.post(`https://quire.io/api/task/${projectId}`, { name });
    // Optionally, store the mapping between your app's id and Quire's task id
  } else {
    // Retrieve the corresponding Quire task id using your mapping logic
    const taskOid = getTaskIdByAppEventId(id, projectId);
    // Delete the task from the Quire project
    await axios.delete(`https://quire.io/api/task/${taskOid}`);
  }
  res.status(200).send('Event processed successfully');
});

呢個例子示範咗點樣處理來自另一個應用程式嘅建立同刪除事件,並將佢哋同步返Quire。記得要實作妥善嘅錯誤處理,並維持ID對應,先可以確保同步可靠。

有咩重要注意事項?

兩條安全規則可以涵蓋幾乎所有第一次實作都會踩到嘅失敗情況:

  • 追蹤每個變更嘅來源。為由你嘅同步流程觸發嘅更新做標記,當佢哋以webhook形式彈返嚟嗰陣就忽略佢哋。冇呢一步嘅話,Quire推送去另一個應用程式,另一個應用程式又觸發一個webhook返嚟,你嘅伺服器再推送多一次,循環就會無限重複落去。
  • 保持數據格式一致。喺Quire代表某種意思嘅欄位(例如Markdown格式嘅描述),可能需要經過明確轉換,先可以變成日曆事件描述、純文字問題備註,或者其他目標格式。

下一步應該點做?

Open API加上webhooks,可以將Quire同你其他工具變成一個單一嘅資料來源,而唔係兩個互相矛盾嘅版本。由最細規模、可行嘅同步開始(一種事件類型、一個方向),確認整個循環由頭到尾都行得通,之後先擴大規模。

相關文章:透過Quire API整合外部工具——以n8n作為例子——如果你想由無程式碼嘅自動化工具開始,而唔係自訂伺服器,呢篇有個實作範例。

任務管理軟件,將遠大目標拆解成下一個小步驟

常見問題

Quire同另一個應用程式之間嘅雙向同步係咩意思?

一種雙向連接,更新會兩邊互通:喺Quire嘅變化推送去另一個應用程式,而喺嗰邊嘅變化又推返嚟Quire。Google日曆雙向同步應用程式就係一個實際運作嘅例子。

要用Quire API建立雙向同步,我需要準備啲乜嘢?

一個擁有API憑證嘅Quire應用程式、一部可以從互聯網連接到並接收webhooks嘅中介伺服器,仲要有邏輯去喺兩個API之間轉譯事件。任何後端語言都可以用。

中介應用程式扮演咩角色?

佢扮演一個坐喺Quire同另一個服務之間嘅翻譯員,接收webhook事件,決定要作出咩API呼叫,並維持Quire任務ID同另一個應用程式項目ID之間嘅對應。

點樣防止無限同步循環?

追蹤每個變更嘅來源,忽略由自己同步流程觸發嘅更新。冇呢個保護機制嘅話,每個更新就會喺兩個應用程式之間無限來回反彈。

Google日曆雙向同步需要邊個Quire方案先用得?

Premium或以上。可以喺定價頁面查閱目前嘅級別限制。

Whiter
Software Engineer