当前位置: 首页 > 知识库问答 >
问题:

如何为非CRUD“命令”(如激活和停用资源)设计REST API?

胡锋
2023-03-14

在我决定问这个问题之前,我找了很久才找到答案,但没有找到满意的答案。(例如,最好的SOAP/REST/RPC web API的示例?为什么您喜欢它们?它们有什么问题?)

问题其实很简单。我有一个名为Account的对象/资源。我的REST API支持所有带有GET、POST、PUT和DELETE的CRUD,并且已经有了正确的错误处理、状态代码等。

另外,我想公开一个API(“命令”)来激活和停用选定的帐户资源。即使“isactive”是帐户的属性,我也不想仅仅使用整个帐户的CRUD更新。

我知道很容易违反REST原则,用这样的设计来做RPC风格的设计是这样的:

PUT/api/account/:accountID/active

PUT/api/account/:accountID/deactivate

那么这个用例的最佳解决方案是什么呢?

你的解决方案是什么?

共有1个答案

巫朝明
2023-03-14

为你想要修改的特性找一个名词怎么样--在这个例子中是'status'。这将成为父实体的子资源。因此,对于您的情况,我将为URI建模如下:

/api/accounts/{accountId}/status

如果“update”语义是幂等的,那么PUT将是最合适的,否则它将需要是一个POST(例如,如果涉及非CES并且被服务无效)。实际有效载荷将包括新状态的描述符。

注意,我将'accounts'复数化了,因为你可以有多个,但是status是单数的,因为你的accounts只能有一个状态。

 类似资料:
  • 介绍 Vant 是基于有赞 Zan Design System 视觉规范实现的组件库,在这里可以下载 Vant 的设计资源。 设计稿 组件设计稿(Sketch) 包含 Sketch 格式的色彩规范、字体规范、组件设计规范。 色彩规范 字体规范 组件规范 下载 图标设计稿(Sketch) 包含 Sketch 格式的图标库资源。 下载 Axure 元件库 Axure 元件库,由社区的 @axure-t

  • 我为侧栏导航制作了这种样式 我制作了一个长方体,并使用“变换”将其隐藏在左侧,以获得弯曲的边界效果。 悬停时,激活ect 边框按钮- 有什么东西可以添加到主div中,以同时激活每个子元素中的悬停效果吗? 现在,只有当我将鼠标悬停在每个单独的元素上时,它才会工作。 任何帮助都非常感谢:)

  • 多亏了来自NickFroty的youtube教程,我能够在php中创建一个合适的注册系统,我已经能够将他的代码从mysql转换为mysqli,并且能够在用户注册后通过电子邮件发送激活链接。 下面的代码将在数据库中插入注册详细信息,并在用户注册后将消息和激活链接发送到用户的电子邮件。 但是我现在有个问题。如果我点击链接,它会将用户导航到页面。 我的问题是:在用户点击激活链接后,它如何激活用户的帐户?

  • 我目前正在创建一个有三个菜单选项卡的应用程序,每个选项卡都由带有菜单标题和内容的手风琴表示。当前,当点击标题时,内容div相对于框中的任何内容出现。我想点击每一个菜单标题,并使该菜单的内容div单独出现,触发该特定div的活动状态。 我创建的切换手风琴功能打开了所有的内容窗口。当单击任何菜单标题时,将显示所有内容。 这是我的功能,简化了: 尽管我的每个按钮类都有独特的名称,但点击那个类仍然会触发所

  • 问题内容: 我在Windows 8上,使用Anaconda 1.7.5 64bit。 我创建了一个新的Anaconda环境 来自。 效果很好(有一个带有新python发行版的文件夹)。康达告诉我输入 激活环境,但是返回: 如何激活环境?我究竟做错了什么? 问题答案: 如果发生这种情况,则需要为您的环境设置PATH(以便从环境和Windows上的Scripts \中获取正确的Python)。 假设您

  • 问题内容: 我必须为输出JSON的API构建一个angularjs客户端,如下所示: 我该如何映射到此?如果使用,我会将整个Blob作为一个对象使用,可用于读取,但无法对其进行调用。如果我使用,那将是行不通的。 有什么干净的方法可以做到这一点吗?还是应该回到使用状态? 问题答案: 您有两种选择。如果可以更改服务器输出,则可以将元信息(计数,下一个,上一个)添加为标头值,而不是将它们添加到响应正文中