gpt4 book ai didi

json - Rest uri设计用于更改资源状态

转载 作者:行者123 更新时间:2023-12-03 15:20:28 26 4
gpt4 key购买 nike

我有一个可以在URI /resources/{resource_identifier}处访问的资源,并且它具有我希望可访问的'status'属性。我想到了一些选择,这将是“最好的”或“最RESTful的”?

选项一将操作追加到URI上,并使客户端POST进入这些URI

/resources/{resource_identifier}/void    
/resources/{resource_identifier}/open
/resources/{resource_identifier}/close


不过这看起来很笨拙。



选项二在URI中使用查询参数,并使客户端 PATCH

/resources/{resource_identifier}?transition=void
/resources/{resource_identifier}?transition=open
/resources/{resource_identifier}?transition=close




选项三使用请求的有效负载并让客户端 PUT

/resources/{resource_identifier}


有效负载选项:

{ ..., "status" :"void" }
{ ..., "status" :"open" }
{ ..., "status" :"close" }




也许还有其他东西?

最佳答案

第一种选择显然不是REST。您在URI中有“操作”,并且正在使用POST,它是用来创建新资源的,您显然不会尝试这样做。

现在只看URI格式。选项2越来越好,但是具有这种性质的查询字符串更适合读取数据。真的没有什么可以阻止您这样做。选项三具有最佳的URI格式,它仅引用您要在请求中引用的资源。

如果我们现在考虑请求的方法。在我的书中,这很简单,我认为状态只是该资源的一个字段,因此,如果您仅进行部分更新,则需要修补资源,因此PATCH是使用的方法。如果没有机会,“状态”是唯一的属性,那么更改状态将完全更改资源,因此PUT是可以接受的;但我怀疑情况确实如此。

就目前而言,第三个选项的URI结合PATCH的使用可能是最佳选择。

PATCH /resources/{resource_identifier}

{ "status" :"close" }


当然,您也可以将其与通过自己的URI公开特定属性的概念结合起来,就好像它们本身就是资源一样。坦白说,我不喜欢这样,因为它感觉很奇怪,并且一次只能用于一个属性。不过,如果这是您要使用的内容,则可能会出现以下内容:

PUT /resources/{resource_identifier}/status

close




请记住,没有“正确”的REST方法,只是“不错”的方法。这是一种风格,而不是规则集。

我也建议您认为,一般而言,能够采用多种格式是一项理想的功能。这样,第一种选择往往更易于使用。您可以像示例中那样使用JSON,或将其交换为XML <status>close</ status>或简单键值对 status=closed等。

关于json - Rest uri设计用于更改资源状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18233632/

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