REST API 设计端点 (Action/Verb => Noun/Resource )
REST API Designing Endpoints (Action/Verb => Noun/Resource )
根据 this guide 设计 REST API 端点,如果我们想在 URL(例如 /addNewEmployee
)中使用 action/verbs执行一个动作,我们应该只使用带有相应 resource/noun 的 HTTP 动词(例如 POST /employees
)。
现在,我有一个名为 themes
的资源,我围绕它创建了以下端点:
GET /themes
(列出所有主题)
GET /themes/:name
(列出具有给定名称的单个主题)
我想创建另一个端点,通过它我可以执行一个操作(即切换主题),这个操作将更改数据库中 Settings
table 中的 current_theme
字段值。我不确定这样做的最佳做法是 REST API 时尚并且对消费者来说也很直观。
我可以做到 POST /themes/changeTheme
或 PUT /themes/:name/activate
但同样 changeTheme
和 activate
是动词。我也可以这样做 PUT /settings
,但从 API 消费者的角度来看,这似乎并不直观。请指导我在这种情况下应该如何进行。
According to this guide of designing REST API endpoints, we should never use action/verbs in URL
REST 不关心您使用什么拼写作为标识符。这是重点的一部分。 /e25928c5-7b4e-44b8-be83-24ed9c9f8d3b
是一个完美的精细标识符。
Stefan Tilkov 对此进行了非常好的演讲。
Please guide me how should I proceed in such scenario.
想一想如何使用 网站。你会在某个页面上的某个地方,有一堆 links,其中一个有一个标签,比如 changeTheme。您将单击 link,然后会看到一个包含表单的新页面,其中包含可用主题列表。您将从列表中选择您想要的主题,然后提交表格。该请求将转到后端,更新一些资源。 副作用,您的主题记录将被更改。您可能会收到一条消息,告诉您已进行更改,并将您重定向回开始的位置。
这就是 REST。
因此,您正在寻找的 名词 是您用于导航更改主题协议的 集成域 中的名词;换句话说,它们是表单和表单提交收件箱。
Jim Webber 将网络模型描述为 1950 年代的办公室;您可以通过检索表格、填写表格并将其放入收件箱来完成工作。
您想要的心理映射不是 action(太大胆了),而是 request——您正在发送要求某人 else 采取您需要的操作的消息。实际作用是副作用。所以“表单提交收件箱”是待处理的“更改主题”请求的集合。
对于此类事情,请使用当地的拼写约定。
远离资源代表您的域的想法;资源支持您的集成协议,并且资源的名称来自您的集成域的语言,而不是您的业务域的语言。
POST is almost always an acceptable choice for sending requests with unsafe semantics to the server. Remember, we're here because the web worked, starting from a media type 仅支持 GET 和 POST.
PUT /themes/:name
这意味着您将更改此单个主题。您可以传递一些属性并仅更改它们。
我知道这是一个老问题,但我只是想对此添加一些内容。
I wanted to create another endpoint through which I can perform an action (i.e. switch theme), this action will change current_theme field value in Settings table in DB. I'm not sure what would be the best practice to do this is REST API fashion and also be intuitive for the consumer.
如果您仔细阅读 粗体 部分,它会更改 Settings
资源中的某些内容 (current_theme
),而不是 Theme
本身.
在我看来,Theme
不用担心是不是active
主题。
考虑到这一点,我将其设计为:
PUT /settings/current-theme
{"themeId": "<some-id>"}
而且我认为它足够直观。
PUT
说是更新,
/settings/current-theme
表示它正在更新 Settings
资源的 currentTheme
属性,并且
Body
为属性提供新值
当然你可以PUT /settings/:id/current-theme
如果你select来自其他资源池的资源。
根据 this guide 设计 REST API 端点,如果我们想在 URL(例如 /addNewEmployee
)中使用 action/verbs执行一个动作,我们应该只使用带有相应 resource/noun 的 HTTP 动词(例如 POST /employees
)。
现在,我有一个名为 themes
的资源,我围绕它创建了以下端点:
GET /themes
(列出所有主题)
GET /themes/:name
(列出具有给定名称的单个主题)
我想创建另一个端点,通过它我可以执行一个操作(即切换主题),这个操作将更改数据库中 Settings
table 中的 current_theme
字段值。我不确定这样做的最佳做法是 REST API 时尚并且对消费者来说也很直观。
我可以做到 POST /themes/changeTheme
或 PUT /themes/:name/activate
但同样 changeTheme
和 activate
是动词。我也可以这样做 PUT /settings
,但从 API 消费者的角度来看,这似乎并不直观。请指导我在这种情况下应该如何进行。
According to this guide of designing REST API endpoints, we should never use action/verbs in URL
REST 不关心您使用什么拼写作为标识符。这是重点的一部分。 /e25928c5-7b4e-44b8-be83-24ed9c9f8d3b
是一个完美的精细标识符。
Stefan Tilkov 对此进行了非常好的演讲。
Please guide me how should I proceed in such scenario.
想一想如何使用 网站。你会在某个页面上的某个地方,有一堆 links,其中一个有一个标签,比如 changeTheme。您将单击 link,然后会看到一个包含表单的新页面,其中包含可用主题列表。您将从列表中选择您想要的主题,然后提交表格。该请求将转到后端,更新一些资源。 副作用,您的主题记录将被更改。您可能会收到一条消息,告诉您已进行更改,并将您重定向回开始的位置。
这就是 REST。
因此,您正在寻找的 名词 是您用于导航更改主题协议的 集成域 中的名词;换句话说,它们是表单和表单提交收件箱。
Jim Webber 将网络模型描述为 1950 年代的办公室;您可以通过检索表格、填写表格并将其放入收件箱来完成工作。
您想要的心理映射不是 action(太大胆了),而是 request——您正在发送要求某人 else 采取您需要的操作的消息。实际作用是副作用。所以“表单提交收件箱”是待处理的“更改主题”请求的集合。
对于此类事情,请使用当地的拼写约定。
远离资源代表您的域的想法;资源支持您的集成协议,并且资源的名称来自您的集成域的语言,而不是您的业务域的语言。
POST is almost always an acceptable choice for sending requests with unsafe semantics to the server. Remember, we're here because the web worked, starting from a media type 仅支持 GET 和 POST.
PUT /themes/:name
这意味着您将更改此单个主题。您可以传递一些属性并仅更改它们。
我知道这是一个老问题,但我只是想对此添加一些内容。
I wanted to create another endpoint through which I can perform an action (i.e. switch theme), this action will change current_theme field value in Settings table in DB. I'm not sure what would be the best practice to do this is REST API fashion and also be intuitive for the consumer.
如果您仔细阅读 粗体 部分,它会更改 Settings
资源中的某些内容 (current_theme
),而不是 Theme
本身.
在我看来,Theme
不用担心是不是active
主题。
考虑到这一点,我将其设计为:
PUT /settings/current-theme
{"themeId": "<some-id>"}
而且我认为它足够直观。
PUT
说是更新,/settings/current-theme
表示它正在更新Settings
资源的currentTheme
属性,并且Body
为属性提供新值
当然你可以PUT /settings/:id/current-theme
如果你select来自其他资源池的资源。