如何使用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
相关产品推荐
相关产品推荐

