You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Delphi REST库访问Todoist API?

解决Delphi调用Todoist Sync API的问题

原curl命令

curl https://api.todoist.com/sync/v9/sync \
    -H "Authorization: Bearer 0123456789abcdef0123456789abcdef01234567" \
    -d sync_token=* \
    -d resource_types='["projects"]'

原代码的问题分析

  • BaseURL错误:注释中的URL少了末尾的c,正确地址应为https://api.todoist.com/sync/v9/sync
  • 请求方法错误:curl的-d参数表示发送POST表单数据,原代码误用了GET方法
  • Authorization Header错误:Header名称应为Authorization而非X-Authorization,且Bearer后不需要加双引号,格式应为Bearer 你的token
  • 缺少必要参数:未添加sync_token和resource_types这两个必填的POST参数

修正后的Delphi代码

procedure TForm3.Button1Click(Sender: TObject);
var
  Strtoken: string;
  ResponseJSON: TJSONObject;
  ProjectsArray: TJSONArray;
  I: Integer;
begin
  Strtoken := 'XXXXXXXXXXXXXXXXXXXX'; // 替换为你的Todoist Token

  // 配置RESTClient
  RESTClient1.BaseURL := 'https://api.todoist.com/sync/v9/sync';

  // 配置RESTRequest
  RESTRequest1.Method := TRESTRequestMethod.rmPOST; // 改为POST方法
  RESTRequest1.Accept := 'application/json';
  RESTRequest1.Params.Clear;

  // 添加Authorization Header
  with RESTRequest1.Params.AddItem do
  begin
    Name := 'Authorization';
    Value := 'Bearer ' + Strtoken;
    Kind := pkHTTPHEADER;
  end;

  // 添加POST表单参数
  with RESTRequest1.Params.AddItem do
  begin
    Name := 'sync_token';
    Value := '*';
    Kind := pkPOSTFIELD;
  end;

  with RESTRequest1.Params.AddItem do
  begin
    Name := 'resource_types';
    Value := '["projects"]';
    Kind := pkPOSTFIELD;
  end;

  try
    // 执行请求
    RESTRequest1.Execute;

    // 解析JSON响应
    ResponseJSON := RESTResponse1.JSONValue as TJSONObject;
    if ResponseJSON.TryGetValue<TJSONArray>('projects', ProjectsArray) then
    begin
      memo1.Lines.Clear;
      // 遍历projects数组并显示内容
      for I := 0 to ProjectsArray.Count - 1 do
      begin
        memo1.Lines.Add(ProjectsArray.Items[I].ToString);
      end;
    end;
  except
    on E: Exception do
    begin
      memo1.Lines.Add('请求出错: ' + E.Message);
    end;
  end;
end;

关键说明

  • 确保RESTClient1、RESTRequest1、RESTResponse1三个组件已正确拖放至窗体并关联(RESTRequest的Client属性指向RESTClient,Response属性指向RESTResponse)
  • 解析JSON时,projects是响应中返回的数组字段,可根据需求提取具体字段(比如name、id等)
  • 添加异常捕获便于排查请求过程中的错误

内容的提问来源于stack exchange,提问作者Lucy Hutchinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:48:37