1

我们需要找到startDate小于今天日期且endDate大于今天日期的用户的所有课程。我们正在使用 API

/d2l/api/lp/{ver}/enrollments/myenrollments/?orgUnitTypeId=3

在一个特殊情况下,我有超过 18000 门课程针对一位用户。服务无法一次性返回 18000 条记录,我一次只能获取 100 条记录,所以我需要使用书签字段以 100 条记录为一组获取数据。Bookmark 是我们获取的最后 100 条记录的 courseId,用于获取下一组 100 条记录。

/d2l/api/lp/{ver}/enrollments/myenrollments/?orgUnitTypeId=3&bookmark=12528

我需要重复循环 180 次,结果是"Request time out" error. 我需要根据startDateand过滤记录endDate,没有提到可以根据startDateor对数据进行排序的排序标准endDate。谁能帮我找出对这些数据进行排序的方法,或者告诉任何其他可以进行此类排序的 API?

注:18000条记录全部有属性"IsActive":true

4

1 回答 1

0

您可以尝试通过组织单位列表获取用户,而不是按用户获取组织单位列表。您可以尝试使用/d2l/api/lp/{ver}/orgstructure/{orgUnitId}/descendants/?ouTypeId={courseOfferingType}来检索来自用户注册的最高共同祖先的课程提供 ID 的整个列表。然后,您可以循环/d2l/api/lp/{ver}/courses/{orgUnitId}以获取每个组织单位的课程提供信息,以根据日期预先过滤并删除您不关心的所有课程提供。然后,对于剩下的那些,您可以检查用户在每一个中的注册情况,以确定用户与您的较小集合中的哪一个匹配。

这肯定会导致对服务的调用更多,而不是更少,所以我可以看到它只有两个优点:

  • 应该能够立即获得所需的全部起始课程集,而不是在页面中重新获得(尽管将来此调用完全有可能变成寻呼调用,并且“获取所有组织单位一次”目前已弃用的性质)。

  • 如果您需要为多个用户执行整个用例,您可以一次获取组织结构数据,将其缓存,然后仅对数据子集上的用户进行查询。

同时,我认为请求增强注册调用以提供更好的过滤(活动/非活动、开始日期、结束日期等)是完全合理的:我怀疑这样的请求可能比一个请求让客户端控制分页(即每个页面框架中的响应数)。

于 2012-09-07T12:55:56.733 回答