什么是RESTful端点来触发不更改状态的非CRUD操作?

时间:2019-07-26 12:49:24

标签: rest api-design restful-url

我有一个box资源,该资源具有基本的CRUD端点。 现在,我将介绍一个新操作来打开box资源所代表的物理框。

box资源没有状态/属性isOpened,因为在我们的情况下这没有意义。 box表示形式并不关心物理盒子的状态。

新操作将联系物理箱并使用其API打开它。

对于此操作,端点最有意义的是什么? 我可以随时打开框,而无需API进行任何进一步的操作。

GET /boxes/1/open有意义吗?因为某种原因让我觉得不对。

1 个答案:

答案 0 :(得分:0)

  

GET / boxes / 1 / open有意义吗?

可能不是。 GET表示可以推测性地获取资源。考虑一下蜘蛛通过您的API进行爬网,并尝试GET的每个链接以查看其作用。

如果我们在网络上进行此操作,则将使用POST,因此必须可以。

POST /boxes/1可能是正确的答案。如果打开包装盒来更改/boxes/1资源的表示形式,那么POST /boxes/1很有用,因为缓存无效化语义。但是,如果表示形式不变,那么您可能希望将请求发送到完全不同的地方。

POST /6a5cb697-81b8-4206-b1af-2d62254b7dc3可以;但您可能希望使用更具可读性的拼写。您当然可以使用/boxes/1/open;之所以有用,是因为使用相对引用可以方便地访问层次结构同一部分中的其他资源。

PUTPATCH是远程创作工具。 “使您对资源的表示与我对资源的表示相匹配”。给定您描述的约束,这意味着PUT /boxes/1PATCH /boxes/1是正确的。从理论上讲,您可以创建一个新资源并对其进行PUT / PATCH,但我认为这样做并不会带来太多优势。

有些人会抱怨/boxes/1/open是“错误的”,因为open是一个“动词”。就机器而言,两者之间确实没有区别

/boxes/1/open
/boxes/1/6a5cb697-81b8-4206-b1af-2d62254b7dc3
/boxes/1/bike-shed-paint-color