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

How to get the list of all users including their last login

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

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

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

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

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

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

因此,根据 List Users 操作的文档,指定 include=lastLogin 查询字符串参数将只包括每个 User 对象的 lastLogin 属性当响应中返回的结果数为 100 或更少时响应。 (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

...响应 returns 结果的第二页如下所示:

{
  "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 属性值)。