如何获取所有用户的列表,包括他们的上次登录



我有一个仪表板要为我的组织做,关于员工使用 smartsheet 许可证的情况。 通常,获取此类信息的请求如下(根据文档):

https://api.smartsheet.com/2.0/users?include=lastLogin

但是,此请求每页显示 100 个结果。我想要的只是得到所有的结果。

文档指示必须向请求添加另一个参数才能获得结果的完整列表。请求变为:

https://api.smartsheet.com/2.0/users?include=lastLogin&includeAll=true 

它有效,但是我只获取没有上次登录的整个用户列表,这使我回到了我的问题:如何获取所有用户的列表,包括他们的上次登录?

因此,根据 List Users 操作的文档,当响应中返回的结果数为 100 或更少时,指定include=lastLogin查询字符串参数将仅包含响应中每个User对象的lastLogin属性。(FWIW,我怀疑 Smartsheet 实现了这种行为,因为如果单个 API 请求试图为数百或数千个用户获取lastLogin值,这将不利于 API 性能。

不过好消息 - 你仍然可以获得你想要的信息 - 它只是需要你付出一些额外的努力(和代码)。您需要为每个结果页面提交单独的 API 请求(即,包括include=lastLogin查询字符串参数和page查询字符串参数,以指定要通过每个请求检索的结果的页码),然后将所有响应的结果合并到写入仪表板的单个列表中。初始List Users响应中totalPages属性的值将告诉您有多少个页面(默认情况下每个页面 100 个用户,如果您希望为每个User对象包含lastLogin属性,这是您一次可以请求的最大用户数)——即,您需要发出多少请求才能获得所有用户lastLogin属性每。

例如,您的第一个请求是:

GET https://api.smartsheet.com/2.0/users?include=lastLogin

。让我们假设响应如下所示:

{
"pageNumber": 1,
"pageSize": 100,
"totalPages": 3,
"totalCount": 100,
"data": [
...
]
}

此响应将包含前 100 个用户 - 但响应告诉您它只是三个可用结果页面的第一页(即响应中totalPages属性的值为3) - 因此您需要再发出两个请求才能检索完整的用户集。

因此,接下来您发出第二个请求,这次包括page参数以指定您想要第 2 页:

GET https://api.smartsheet.com/2.0/users?include=lastLogin&page=2

。响应返回结果的第二页,如下所示:

{
"pageNumber": 2,
"pageSize": 100,
"totalPages": 3,
"totalCount": 100,
"data": [
...
]
}

此响应将包含接下来的 100 个用户(即三个可用页面的第二页),您需要再发出一个请求才能检索完整的用户集。

最后,您发出第三个请求,这次包括page参数以指定您想要第 3 页:

GET https://api.smartsheet.com/2.0/users?include=lastLogin&page=3

。响应包含结果的第三页(在本例中为最后一页),如下所示(其中totalCount属性的值是指示响应中的用户数的数值>= 1 和 <= 100):

{
"pageNumber": 3,
"pageSize": 100,
"totalPages": 3,
"totalCount": 52,
"data": [
...
]
}

现在,由于响应中pageNumber属性的值等于响应中totalPages属性的值,因此您知道这是最后一组用户,并且不需要再发出任何请求。

在 3 个请求之间,您现在已经检索了完整的用户集(以及每个用户的lastLogin属性值)。

最新更新