RESTAPI设计端点(动作/动词=>;名词/资源)

RESTAPI设计端点(动作/动词=>;名词/资源),rest,api,resources,httpverbs,Rest,Api,Resources,Httpverbs,根据REST API端点的设计原则,我们不应该在URL中使用动作/动词(例如/addNewEmployee),如果我们想执行动作,我们应该只使用HTTP动词和相应的资源/名词(例如POST/employees) 现在,我有了一个名为themes的资源,我围绕它创建了以下端点: GET/themes(列出所有主题) GET/themes/:name(列出具有给定名称的单个主题) 我想创建另一个端点,通过它我可以执行操作(即切换主题),此操作将更改数据库中设置表中的当前主题字段值。我不确定做这件事的

根据REST API端点的设计原则,我们不应该在URL中使用动作/动词(例如
/addNewEmployee
),如果我们想执行动作,我们应该只使用HTTP动词和相应的资源/名词(例如
POST/employees

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

GET/themes
(列出所有主题)

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

我想创建另一个端点,通过它我可以执行操作(即切换主题),此操作将更改数据库中
设置
表中的
当前主题
字段值。我不确定做这件事的最佳实践是什么,这是RESTAPI的时尚,对消费者来说也是直观的

我可以这样做
POST/themes/changeTheme
PUT/themes/:name/activate
但同样
changeTheme
activate
是动词。我也可以这样做
PUT/settings
,但从API消费者的角度来看,这似乎并不直观。请指导我在这种情况下应该如何进行

根据本RESTAPI端点设计指南,我们不应该在URL中使用动作/动词

REST不关心标识符的拼写。这是问题的一部分<代码>/e25928c5-7b4e-44b8-be83-24ed9c9f8d3b
是一个完美的精细标识符

在这个问题上谈得很好

请指导我在这种情况下应该如何进行

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

这就是休息

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

吉姆·韦伯(Jim Webber)将网络模型描述为20世纪50年代的办公室模型;您可以通过检索表单、填写表单并将其放入收件箱来完成工作

你想要的心理映射不是一个动作(太粗体了),而是一个请求——你正在发送一条信息,要求其他人采取你需要的动作。实际行动是副作用。因此,“表单提交收件箱”是挂起的“更改主题”请求的集合

不管当地的拼写习惯是什么,你都可以使用

不要认为资源是你的领域的代表;这些资源支持您的集成协议,并且这些资源的名称来自集成域的语言,而不是业务域的语言

对于向服务器发送请求,几乎总是可以接受的选择。记住,我们在这里是因为web工作,从只支持GET和POST开始

PUT /themes/:name

这意味着你将改变这个单一的主题。您可以传递一些属性,并且只更改它们

PUT/themes/:name
也可能意味着更改主题本身。我建议使用
PUT/active theme/:name
PUT/themes/:name
作为不同的端点。