根据设计REST API端点的this guide,我们不应该在URL中使用动作/动词(例如/addNewEmployee
),如果我们想要执行动作,我们应该只使用具有相应资源的HTTP动词/ noun(例如POST /employees
)。
现在,我有一个名为themes
的资源,我在它周围创建了以下端点:
GET /themes
(列出所有主题)
GET /themes/:name
(列出具有指定名称的单个主题)
我想创建另一个端点,我可以通过该端点执行操作(即切换主题),此操作将更改DB中current_theme
表中的Settings
字段值。我不确定这样做的最佳做法是REST API时尚,对消费者来说也很直观。
我可以执行此操作POST /themes/changeTheme
或PUT /themes/:name/activate
,但changeTheme
和activate
是动词。我也可以这样做PUT /settings
但从API消费者的角度看它似乎并不直观。请指导我如何处理这种情况。
答案 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
这意味着您将更改此单个主题。您可以传递一些属性并仅更改它们。