REST API设计端点(Action / Verb =>名词/资源)

时间:2017-10-11 00:16:09

标签: rest api resources httpverbs

根据设计REST API端点的this guide,我们不应该在URL中使用动作/动词(例如/addNewEmployee),如果我们想要执行动作,我们应该只使用具有相应资源的HTTP动词/ noun(例如POST /employees)。

现在,我有一个名为themes的资源,我在它周围创建了以下端点:

GET /themes(列出所有主题)

GET /themes/:name(列出具有指定名称的单个主题)

我想创建另一个端点,我可以通过该端点执行操作(即切换主题),此操作将更改DB中current_theme表中的Settings字段值。我不确定这样做的最佳做法是REST API时尚,对消费者来说也很直观。

我可以执行此操作POST /themes/changeThemePUT /themes/:name/activate,但changeThemeactivate是动词。我也可以这样做PUT /settings但从API消费者的角度看它似乎并不直观。请指导我如何处理这种情况。

2 个答案:

答案 0 :(得分:2)

  

根据设计REST API端点的指南,我们不应该在URL

中使用动作/动词

REST并不关心您用于标识符的拼写。这就是重点。 \D+是一个完美的标识符。

Stefan Tilkov对此进行了非常好的讨论。

  

请指导我如何处理这种情况。

考虑如何使用网站来实现这一目标。你会在一个页面的某个地方,有一堆链接,其中一个链接就像changeTheme一样。您可以单击该链接,然后显示包含表单的新页面,其中包含可用主题列表。您可以从列表中选择所需的主题,然后提交表单。该请求将转到后端,更新一些资源。 作为副作用,您的主题记录将会更改。您可能会收到一条消息,告诉您已进行了更改,并将您重定向到您开始的位置。

那个REST。

因此,您正在寻找的名词是用于导航更改主题协议的集成域中的名词;换句话说,它们是表单和表单提交收件箱。

Jim Webber将网络模型描述为1950年代的办公室;您可以通过检索表单,填写表单并将其放入收件箱来完成工作。

您想要的心理映射不是操作(非常大胆),而是请求 - 您正在发送询问某人的消息 else 采取您需要的操作。实际行动是副作用。所以"表单提交收件箱"是待定"更改主题的集合"要求。

对于那种事情使用任何本地拼写约定。

远离资源是您域名表示的想法;资源支持您的集成协议,资源名称来自集成域的语言,而不是业务域的语言。

使用POST向服务器发送请求时,

unsafe semantics几乎总是可以接受的选择。请记住,我们在这里是因为网络工作,从仅支持GET和POST的a media type开始。

答案 1 :(得分:0)

PUT /themes/:name

这意味着您将更改此单个主题。您可以传递一些属性并仅更改它们。

相关问题