gpt4 book ai didi

rest - API 休息 : 414 Request-URI too long using GET

转载 作者:行者123 更新时间:2023-12-05 06:22:37 30 4
gpt4 key购买 nike

虽然有很多与此问题相关的主题,但我仍然找不到解决此问题的方法。

我有一个可以非常具体的 GET API REST 调用,例如:

/v1/books?id=40,41,42,43,44,45,46,47...

但是,有时我会收到 414 Request-URI too long 错误,因为 ID 列表很长。

我已经阅读了与此问题相关的每个主题,当有很多参数时我们必须使用 POST 而不是 GET(而不是尝试更改 apache 中的最大限制,我同意这不是一个好的解决方案)

但我正在尝试获取书籍,而不是创建书籍! REST API 非常具体,POST 用于创建新条目。由于我使用的是 Slim Framework,如果我调用 POST 来获取书籍,它会期望使用不同的参数来创建新书。 Slim 不能指定两个不同的 POST/v1/books 因为它总是使用它找到的第一个,无论你发送的参数是什么......(我要么获取要么创建书籍,永远不会同时)

那么,有什么地方可以解决我的问题吗?我有点惊讶还没有 REST 解决方案......苦苦寻找,找不到任何东西......

提前致谢!

PS:我正在使用 cURL/PHP 使用此 GET API,其中没有 JS/AJAX。

最佳答案

But I'm trying to fetch books, not create ones! REST API is very specific that POST is for creating new entries.

不,POST 适用于各种情况。参见 It is Okay to Use POST , 作者:罗伊·T·菲尔丁 (Roy T Fielding)。

It isn’t RESTful to use POST for information retrieval when that information corresponds to a potential resource, because that usage prevents safe reusability and the network-effect of having a URI.

414 URI Too Long表示请求起始行中的目标 uri 超出了服务器的任意 长度限制。由于服务器是其自身资源的权威,因此它可以自行做出此类决定。

惯用的正确答案是创建一个新资源;也就是说你将你的信息发布到服务器,服务器创建一个新的资源和一个匹配的标识符。例如,服务器可以将您的帖子内容保存到一个随机文件名中,然后将您想要的信息和一个对该文件名进行编码的标识符发回给您,以便您以后可以获取任何更新。

POST /v1/books

id=40,41,42,43,44,45,46,47...

201 Created
Location: /v1/book-lists/9d133345-ded1-47ab-a954-a81c1d6d487f
Content-Location: /v1/book-lists/9d133345-ded1-47ab-a954-a81c1d6d487f

-- current representation of /v1/book-lists/9d133345-ded1-47ab-a954-a81c1d6d487f here --

随后可以将查看表示是否已更改的请求发送到图书列表 URI。

当然,这不是免费的。必须有人决定在他们的域应用程序协议(protocol)中需要这个,设计资源,实现查询负载的服务器端缓存,等等。

另外请注意,这实际上并不能解决问题,因为不应期望服务器支持任意长(又名无限长)的请求。它实际上只是在服务器认为对于目标 uri 太长的长度和服务器认为对于有效载荷太长的长度 (413 Payload to Large) 之间给您一些喘息的空间。

所以如果你在设计一个API,你需要考虑你想要支持哪些用例,这些用例的极端数据长度是多少,并选择一个满足它们的领域应用协议(protocol),受制于你的其他约束条件。

关于rest - API 休息 : 414 Request-URI too long using GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079166/

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