如何对海康威视API的结果进行分页?
我正在通过海康威视门禁系统进行集成:
/AccessControl/AcsEvent?format=json
使用 AcsEventCond。
我需要在多次请求中实现增量获取事件。
我当前的方法使用序列边界:
{
"beginSerialNo": lastSerial,
"endSerialNo": lastSerial + 29,
"maxResults": 30,
"major": 0,
"minor": 0
}
然后我收集返回的 serialNo 值,并假设它们是连续的,因此像这样检测到间隙:
$expected = range($startSerial, $maxRetrieved);
$missing = array_diff($expected, $retrieved);
但实际情况是API返回的序列号并非连续,例如:
1001, 1002, 1004, 1005
所以我的实际问题是:
当返回的 serialNo 值不连续时,继续分页/增量检索的正确做法是什么?
更具体地说:
- 下一次请求应该从
max(returned serialNo) + 1开始吗? - 还是应该完全避免基于序列号的续传,改为使用
searchResultPosition或基于时间的查询?
当ID稀疏时,客户端代码中哪种续传逻辑才是正确的?
解决方案
分页的正确方式是通过maxResults和 startIndex。你将使用一个固定的最大结果数进行循环,并不断增加startIndex,直到返回NO MATCH,表示没有更多数据。序列号在时间上会重叠,因为一旦设备达到最大事件容量,序列号就会从1 重新开始,这在之前的情形中是不同的。此外,很多序列号是内部使用的,这也是你看到间隙的原因。如果需要对事件排序,请使用eventtime。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。