- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设您有一个 Person 资源,它的一部分表示包括一个 Location 值,该值可以具有诸如“在家”、“在学校”和“在工作”之类的值。您将如何轻松地展示“回家”、“上类”、“上学”等事件?为了便于讨论,让我们规定这些事件需要时间,因此它们是异步执行的,并且有多种方式可能导致它们失败(没有可用的交通工具,旅行中的交通工具故障,其他不可抗力等) .此外,Person 资源还有其他属性和影响这些属性的相关操作(例如,属性=能量级别,操作=饮食/ sleep /锻炼)。
选项 1 :在 Person 资源上重载 POST,提供一个输入参数,指示您希望该人做什么(例如 action=go-to-school)。从 POST 返回 202 并在 Person 的表示中公开 activity-in-progress 状态属性,客户端可以 GET 以观察进度和成功/失败。
好处:保持简单。
缺点:相当于隧道。发生的 Action 隐藏在有效负载中,而不是在 URI、动词、 header 等中可见。此资源上的 POST 动词没有单一的语义含义。
选项 2 :使用 PUT 将 Person 的位置设置为您希望他们拥有的状态。从 PUT 返回 202 并通过 GET 公开正在进行的事件属性以进行状态轮询。
好处:我不确定我看到了什么。
缺点:真的,这只是与另一个动词的隧道。此外,它在某些情况下不起作用( sleep 和进食都会增加能量水平,因此将能量水平设置为更高的值对于您希望资源执行的操作而言是模棱两可的)。
选项 3 :公开一个对 Person 对象进行操作的通用 Controller 资源。例如,创建一个 PersonActivityManager 资源,该资源接受 POST 请求,其参数标识目标 Person 和请求的操作。 POST 可以返回一个 PersonActivity 资源来表示正在进行的事件,客户端可以通过 GET 来监控进度和成功/失败。
好处:通过将事件及其状态与 Person 资源分开,看起来更简洁。
缺点:现在我们已将隧道移至 PersonActivityManager 资源。
选项 4 :
为每个支持的操作建立单独的 Controller 资源,例如一个 ToWorkTransporter 资源,它接受带有标识 Person 的参数(或 URI 元素)的 POST 请求,以及一个 ToHomeTransporter、一个 ToSchoolTransporter、一个 MealServer、一个 Sleeper 和一个 Exerciser。这些中的每一个都从它们的 POST 方法中返回一个适当的任务监控资源(通勤、用餐、 sleep 、锻炼),客户端可以通过 GET 对其进行监控。
好处:好的,我们终于消除了隧道。每个 POST 只意味着一件事。
缺点:现在讨论了很多资源(也许我们可以将传输器组合成一个接受目标参数的传输器)。其中一些在语义上非常做作(Sleeper?)。它可能更 RESTful,但它实用吗?
最佳答案
好的,我已经研究和思考了大约一个星期。由于没有其他人回答,我将发布我所学的结果。
蒂姆·布雷,在 RESTful Casuistry ,谈论 PUT-ing 状态字段与 POST-ing 到 Controller , Controller 将执行影响该状态的操作。他使用了一个虚拟机的例子,以及如何以 RESTful 方式暴露“重启按钮”的功能。他说
"If I want to update some fields in an existing resource, I’m inclined to think about PUT. But that doesn’t work because it’s supposed to be idempotent, and rebooting a server sure isn’t. Well, OK, do it with POST I guess; no biggie.
But you’re not really changing a state, you’re requesting a specific set of actions to happen, as a result of which the state may or may not attain the desired value. In fact, when you hit the deploy switch, the state changes to deploying and then after some unpredictable amount of time to deployed. And the reboot operation is the classic case of a box with a big red switch on the side; the problem is how to push the switch.
So, the more I think of it, the more I think that these resources are like buttons, with only one defined operation: push. People have been whining about “write-only resources” but I don’t have a problem with that because it seems accurate. The reboot and halt buttons don’t really have any state, so you shouldn’t expect anything useful from a GET."
"we only use PUT when the update action is idempotent and the representation is complete. I think we should define an additional resource whenever we think that resource might be useful to others in isolation, and make use of the GET/PUT methods for that resource, but I don’t think we should define new resources just for the sake of avoiding POST."
关于rest - RESTfully 公开对资源的操作 - 重载 POST、PUT 和 Controller 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9719693/
例如 Form1 frm1 = new Form1(); TextBox tb = new TextBox(); frm1.Controls.Add(tb); 现在我不能说 f
我有一个日期过滤器,我已经在我的 View 中公开了它。我想让界面更加用户友好并加强它的外观。我不想选择日期,而是从以下选项中进行选择。 最后一天 上周 去年 全部 然后,这将过滤日期字段。这可能吗?
如何向用户公开我的用户控件组件之一的 ActualWidth 属性? 我找到了很多关于如何通过创建新的依赖属性和绑定(bind)来公开普通属性的示例,但没有关于如何公开像 ActualWidth 这样
Github 最近推出了项目功能。 当项目处于 repo 级别时,如果 repo 本身是公开的,那么任何人都可以访问这些项目。 但是,组织级别的项目仅对组织成员可见。 例如,https://githu
我想要从我的网络服务器访问 JavaScript 文件。 以便任何人都可以在其网站中访问和引用它。 e-g 假设 abcxyzserver.com 是我的网络服务器。 www.abcxyzserv
尝试使用curl命令上传到blob存储 curl --upload-file --url "https://.blob.core.windows.net//" 但不断收到“HTTP/1.1 404
我正在尝试获取 Canvas 的上下文,显然我收到错误Uncaught TypeError: Cannot call method 'getContext' of null 显然我在它初始化之前就得到
我正在对设置 HA 集群的解决方案进行故障排除。虽然我知道应用程序执行故障转移和故障回复所需的端口,但不知何故 dockerized 解决方案不起作用。我怀疑有一些我还不知道的端口。 目前,我的 EX
我试图在能够使用 Helm 运行的k8集群中设置Prometheus。当我使用外部IP将Prometheus-Server作为LoadBalancer服务公开时,访问仪表板。 当我尝试将此服务配置为C
我知道关于这个主题也有类似的问题,但我不完全确定他们正在解决同样的问题。所以要明确的是... 我有一个现有的类库,其中包含用于类型、业务逻辑和数据访问的命名空间。逻辑和数据访问命名空间中的类是静态的,
尝试使用curl命令上传到blob存储 curl --upload-file --url "https://.blob.core.windows.net//" 但不断收到“HTTP/1.1 404
1.)执行以下命令生成一个随机数,用于后面的步骤 NUMBER=$[ ( $RANDOM % 1000 ) + 1 ] echo $NUMBER 注意:将句子 your random number 替
类似这样的问题有很多,但仍然无法得到我真正想要的,而且它们都有一些与我不同的地方,那就是:我有一个 UserControl: 在名为UCProject 的类库项目中单独构建; UCProject 项目
我有一个这样的基类: public class BaseModalCommand { protected object m_commandArgument; protected i
给定以下 JQuery 插件。是否可以将变量“元素”公开给插件外部的 javascript?如果是这样,这是怎么做到的?对于此插件外部的 javascript,访问“元素”的语法是什么? (funct
我有两个使用 jhipster 创建的微服务。 (ms1 和 ms2) 我使用 AuthorizedFeignClient 在两个微服务之间进行通信。 ms1 有一些 DTO 类,用作 REST AP
我正在使用错误跟踪软件来报告网络浏览器中发生的任何错误,但我的生产站点上的代码已缩小。因此,调试几乎是不可能的(变量名被更改等)。 我想将完整的源映射文件投入生产,以便我可以调试这些错误,但在这样做时
我在 Kotlin 公开库中可以找到的所有 Material 都假定该表具有一个主标识列,因此在大多数示例中显示的实体继承了 IntEntity 抽象类。例如: class UserLocation(
我有一个类 (Capsule),它有很多 protected 方法 (30+)。这个想法是允许开发人员扩展此类并在类 (ImADev) 中使用 protected 方法,但将其留给开发人员将它们公开为
Tomcat 日志位置是: /apache/apache-tomcat-8.0.15/logs 允许通过浏览器访问这些日志的标准方法是什么? 为此启用 Tomcat 目录列表标准吗? 最佳答案 我曾在
我是一名优秀的程序员,十分优秀!