里斯特 - 获取vspost

问题描述 投票:0回答:1

我想设计一个API调用,按照静止原则。

LLET假设我想获取用户信息,其中用户识别使用IDS。

通过一个获取方法,呼叫会看起来: /用户?id = xxxxx,yyyyy,....

问题是:当发送的用户列表太大时会发生什么?达到URI尺寸限制。

通过帖子方法,呼叫看起来像: /users

请求主体看起来像:

{ "users": [XXXXX, YYYYY] }

据我所知,GET方法仅应用于读取数据,并发布方法来创建新资源。
我应该如何正确设计?
    

据我所知,GET方法仅应用于读取数据,并发布方法来创建新资源。

这是不对的。
python rest post get
1个回答
1
投票
均为
RFC9110

。 总结:

GET是一个有效的仅阅读请求,以接收资源当前表示的副本 post不受限制(“根据资源自己的特定语义封闭在请求中的表示表示”)。 仅在某些其他方法适合某些方法的情况下使用时才成为一个问题 -

Fielding,2009年
  • 在您的情况下,潜在的张力是:
  • GET
当您的资源标识符开始遇到URI长度限制时,请停止理想地不适合 - (从RFC 9110开始,URI
的最小支持长度为8000八十千位)。

那时,我们需要放弃使用GET

的好处,并恢复为使用编码为主体的识别信息。

但问题是关于设计的。您将如何创建一个应该能够的API:阅读所有用户,阅读用户列表以及创建新用户。所有尊重休息原则
想想您将如何使用网页进行操作。

如果我们有大量用户,并且希望客户希望能够遍历列表,那么我们可能会引入大量页面资源,并具有第一个/上一个/上/下一个/最后的链接关系以允许您要浏览这些页面。

如果我们想支持有关条目任意收集的查询,我们可能会有一个表格可以从用户那里收集信息,然后将这些信息与URI模板结合在一起,以将该信息运送到服务器。


为了支持任意长的用户列表(太笨拙而无法在URI中使用),我们会使用类似的表格,但是使用邮政方法而不是GET方法;因此,该请求的目标资源将通过表单操作确定,即有效载荷中包含的客户的信息。

3A)由于HTTP的缓存无效规则,我们可能希望使用可缓存页面的标识符,因为搜索仅有效地读取,并且不应使以前的缓存响应无效。 因此,这可能是针对此特定相互作用的URI
3b)如果请求确实确实具有大数据集,则您可能需要在响应中引入分页 - 实际上是在服务器上“创建”新的资源,这是该特定查询的结果集,这些问题本身会链接一起以轻松分页。

3C)如果表示形式很大(因为您不需要分页;或者因为页面确实很大),则范围请求可能很有用。

    “创建”服务器上的新资源再次是:提交表单。 例如,如果您的排序订单将最新的订单放在前面添加的最新订单,则最合理的候选URI将是在创建新资源时将更改的资源。 (HTTP中的缓存无限无限灵活;如果通过表单提交更改了许多资源,则某些客户的页面将不在日期,这太糟糕了。)
  1. 您需要与RFC 3986和RFC 9110一致的资源标识符;如果您将自己限制在URI模板描述的拼写(请参阅RFC 6570)。

    在路径与查询中编码信息中对信息进行编码是一个权衡问题:使用路径段对于相对分辨率很方便;使用查询部分很方便HTML表单。 Beyond,您有很多自由,就像您在编程语言中选择变量名称一样 - 机器不在乎,因此请使用额外的自由度,使您关心的人类更容易事大约
  2. POST
  3. Is

    fine
  4. ;运营商审查您的访问日志将能够轻松解释标识符。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.