gpt4 book ai didi

powershell - 从 rest API : Best practice 获取页面结果

转载 作者:行者123 更新时间:2023-12-02 23:57:03 24 4
gpt4 key购买 nike

对 rest API 来说还很陌生,到目前为止只做了一些相当基本的查询来获得我需要的东西。

编写一个新的 PowerShell 脚本,使用 rest 提取所有设备:

$url = "https://my-site.com/internal/api"

然后查询所有设备并将这些结果分配给一个变量,这样我就可以稍后在整个脚本的不同点上使用该变量做一些事情:

$devices = Invoke-RestMethod -uri "$url/devices" -UseDefaultCredentials -Method Get -ContentType "application/json"

有上万条结果,我想做的是能够在所有返回的页面中搜索结果。

到目前为止,我已经知道我可以做这样的事情来将所有结果放在一页中:

$devicespagetest = Invoke-RestMethod -uri "$url/devices?pagesize=99999" -UseDefaultCredentials -Method Get -ContentType "application/json"

这是不好的做法吗?

有没有更有效或更编程的方式来实现这一点,而不是像我上面那样做?

我实际上不确定我们使用的是哪种 Rest API,但我知道我们没有将它与 Jira 或 Confluence 集成。

最佳答案

你调用的API是你自己开发的吗?

编辑:刚刚看到您在标签中调用了 WordPress API。 WordPress offers pagination links ,并通过自定义 header 提供有用的分页信息。

通常,REST API 在通过查询参数(例如:“offset”和“max”)返回资源列表时提供分页支持。 offset 参数指示应跳过多少结果,而 max(或您的情况下的页面大小)确定您要获取的最大结果。

例如,http://myapi.com/persons?_offset=0&_max=20代表列表中的前 20 个人。在 HATEOAS 的上下文中约束,建议提供 HTTP 链接响应 header ,以便客户端知道如何使用“上一个”、“第一个”、“下一个”和“最后一个”关系(在 RFC 5988 中标准化)浏览页面。

例如:

GET /persons?_offset=30&_max=10 HTTP/1.1
Host: myapi.com
Accept: application/json

结果如下:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 934
Link: <http://myapi.com/persons?_offset=0&_max=10>; rel="first"
Link: <http://myapi.com/persons?_offset=20&_max=10>; rel="previous"
Link: <http://myapi.com/persons?_offset=40&_max=10>; rel="next"
{body}

为了保护请求整个列表资源的客户端的服务器(即不指定分页参数),建议使用以下方法。当客户端请求列表资源(例如 http://myapi.com/persons )时,服务器会将客户端重定向到前 X(例如 10)个项目。

对应的HTTP session 如下所示:

GET /persons HTTP/1.1
Host: myapi.com
Accept: application/json

结果如下:

HTTP/1.1 303 See Other
Location: http://myapi.com/persons?_offset=0&_max=10

接下来,客户端遵循重定向:

GET /persons?_offset=0&_max=10 HTTP/1.1
Host: myapi.com
Accept: application/json

这会产生以下响应:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 850
Link: <http://myapi.com/persons?_offset=40&_max=10>; rel="next"
Link: <http://myapi.com/persons?_offset=120&_max=10>; rel="last"
{body}

请注意,但是在您需要 CORS (Cross Origin Resource Sharing) 的环境中,重定向可能会导致问题。在这种情况下,由 GET/persons 检索到的部分列表的表示可以简单地指示检索到的人数以及总共有多少人(可选)。

如果您的 API 提供此类导航链接,最好使用它们并使用 Invoke-RESTMethod 实现循环并为您的搜索动态构建索引,而不是一次获取 10000 个结果,这会给您的服务器带来不必要的压力。但是在不了解您的用例的情况下,很难给您适当的建议。

关于powershell - 从 rest API : Best practice 获取页面结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42617049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com