我正在使用 cURL 和 PHP 来访问 Salesforce API,并且其中大部分都在工作。
当您请求大量记录时,Salesforce 会将数据分成 2000 块。
基本上,我有三个不同的大 JSON 块和记录数组,我想知道将它们组合成一个大对象的最佳方法是什么。
当有更多数据时,对象看起来像这样。
它为您提供了一个 nextRecordsUrl,您可以点击它来获取下一个块:
Array
(
[totalSize] => 5000
[done] =>
[nextRecordsUrl] => /services/data/v20.0/query/somelongurlstring
[records] => Array
(
[0] => Array
(
[attributes] => Array
(
[type] => Custom_Type__c
[url] => sobjects/Custom_Type__c/thetypeid
)
[Requested_Prop__c] => someid
)
[1] => Array
( [...]
我的 curl 代码似乎正在运行 - 基本上是这样的:
curl_setopt($ch2, CURLOPT_URL, "https://my.instance.salesforce.com/services/data/v20.0/query/?q=" . urlencode($_GET["q"]));
curl_setopt($ch2, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Authorization: Bearer $token"));
curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1);
$isDone = false;
while(!$isDone) {
$qresponse = curl_exec($ch2);
echo "<pre>";
$theJson = json_decode($qresponse, true);
echo print_r($theJson);
echo "</pre>";
$isDone = $theJson["done"] == true;
if(!$isDone)
curl_setopt($ch2, CURLOPT_URL, "https://my.instance.salesforce.com" . $theJson["nextRecordsUrl"]);
}
curl_close($ch2);
问题是输出实际上是多个json对象。
我认为最简单的方法可能是简单地遍历记录并将它们附加到我在 PHP 中创建的某个 json 对象,但我担心的只是如果这些获取请求变得非常大可能需要的内存量。
有没有“正确的方法”来做到这一点?
小唯快跑啊