gpt4 book ai didi

rest - 在 RESTful URL 中使用动词和形容词的替代方法

转载 作者:行者123 更新时间:2023-12-05 08:23:28 25 4
gpt4 key购买 nike

我想向我的 REST API 添加操作,以在不同“商店”之间移动“资源”。

例如,假设我的资源通常通过以下 URL 访问:

/resources
/resources/{resourceId}

现在假设我想“停用”一些资源,即在概念上将其移动到另一个子文件夹。允许这样做的最直接的方法如下。

  1. “停用”资源,即使其在/resources 下不可用。从概念上讲,它将对象“移动”到“/resources/deactivated/”子文件夹:

    POST /resources/{resourceId}/deactivate   

    或者:

    POST /resources/deactivated/{resourceId}
  2. 获取所有停用的对象:

    GET /resources/deactivated      
  3. 反转“停用”操作,即在概念上将对象从“/resources/deactivated/”子文件夹移回主文件夹(“/resources').

    要么

    POST /resources/{resourceId}/reactivate    

    或者

    POST /resources/deactivated/{resourceId}/restore     

    这个 API 对我来说似乎相当直观。但它似乎违反了我在许多关于 REST API 的最佳实践文章中看到的“首选名词”规则:我使用动词和形容词而不是名词!

请注意,我可能有所有端点的参数,例如GET/resources/deactivated?createdBefore=01022017

我的 REST API 是否有更好的替代方案? IE。更 RESTful,但不那么直观?

我可以找到关于该主题的好资源:

最佳答案

首先,请记住 REST 代表Representational State Ttransfer。

一切都是关于资源及其状态activatedeactivatemove 等操作都是关于用新表示替换资源的当前状态,您不需要动词在 URL 中表达此类操作。


例如,要替换资源的状态,您可以在 PUT 请求的有效负载中发送资源的新表示:

PUT /api/resources/[id]/status HTTP/1.1
Host: example.org
Content-Type: application/json

{ "status" : "active" }

可以理解为[id]标识的资源状态替换为请求payload中发送的状态


然后您可以通过以下方式获取具有特定状态的资源:

GET /api/resources?status=active HTTP/1.1
Host: example.org
Accept: application/json

可以理解为给我一个状态为active的所有资源的表示。


例如,要将资源移动到另一个文件夹,您可以:

PUT /api/resources/[id]/folder HTTP/1.1
Host: example.org
Content-Type: application/json

{ "target" : "draft" }

可以理解为[id]标识的资源文件夹替换为请求payload中发送的文件夹

关于rest - 在 RESTful URL 中使用动词和形容词的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43356344/

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