Delphi 10.3.2中如何用REST调用Shopify API并处理分页
在Delphi 10.3.2中使用TNetHTTPClient实现Shopify REST API的Token认证与分页
一、替换URL认证为Token Header认证
直接通过TNetHTTPClient的CustomHeaders添加Shopify要求的X-Shopify-Access-Token,即可替代原URL中的账号密码认证方式,示例代码如下:
var HttpClient: TNetHTTPClient; Response: IHTTPResponse; CurrentPageUrl: string; begin HttpClient := TNetHTTPClient.Create(nil); try // 设置Shopify访问令牌Header HttpClient.CustomHeaders['X-Shopify-Access-Token'] := '你的实际访问令牌'; // 初始化请求URL(移除原URL中的api:password@部分) CurrentPageUrl := 'https://mystore.myshopify.com/admin/api/2023-07/products.json?created_at_min=2022-01-01T00:00:00&status=any&limit=250'; repeat // 发送GET请求获取当前页数据 Response := HttpClient.Get(CurrentPageUrl); // 处理当前页产品数据:解析Response.ContentAsString中的JSON内容 // 这里添加你的JSON解析与业务逻辑代码 // 从响应Header中提取下一页URL CurrentPageUrl := ExtractNextShopifyPageUrl(Response.Headers['Link']); until CurrentPageUrl.IsEmpty; finally HttpClient.Free; end; end;
二、解析Shopify分页的Link Header
Shopify通过响应的Link Header返回分页信息,格式示例:
实现一个辅助函数提取rel="next"对应的URL:
function ExtractNextShopifyPageUrl(const LinkHeader: string): string; var HeaderSegments: TArray<string>; Segment: string; TempUrl: string; begin Result := ''; if LinkHeader.IsEmpty then Exit; // 分割Link Header中的多个条目 HeaderSegments := LinkHeader.Split([',']); for Segment in HeaderSegments do begin Segment := Segment.Trim; // 提取URL部分 if Segment.StartsWith('<') then TempUrl := Segment.Substring(1, Segment.IndexOf('>') - 1); // 判断是否为下一页链接 if Segment.Contains('rel="next"') then begin Result := TempUrl; Break; end; end; end;
三、关键注意事项
- 可以显式设置
ContentType确保兼容性:HttpClient.ContentType := 'application/json'; - 添加异常捕获逻辑,处理HTTP错误(如401认证失败、429请求频率超限等)
- 保持API版本与令牌权限匹配,示例中使用的是2023-07版本,需与你的Shopify配置一致
内容的提问来源于stack exchange,提问作者Lucy Hutchinson
相关产品推荐
相关产品推荐

