NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

什么时候 POSTing 状态合适?

  • 2009-04-23
  • 本文字数:1292 字

    阅读完需:约 4 分钟

一篇文章中, Tim Bray,审视了 Sun Cloud API 的第一版公众草稿所收到的反馈。 对于其中一些反馈他在文中作出了回应,对于如何对交互进行建模,例如以 RESTful 的方式创建一个 VM 集群,进行了探索。

他展示了在设计 Sun Cloud API 范畴中的几个场景,并问到用 POSTing 状态来建模这样的交互是否是一种合适的策略。

但你不是真正的在改变状态,你是在请求一系列特定动作的执行,作为其结果,该状态是否能获得期望的值皆有可能。实际上,当你触发部署开关,状态变为了部署中,在不可预知的一段时间之后,又改变为已部署。而重启操作这一经典例子,就是在机器旁边有一个红色的大开关,问题是如何按这个开关。

所以啊,我越想越觉得,这些资源就像是按钮,只有唯一定义的操作:按下。人们对于“只写资源”牢骚满腹,但我却觉得不存在什么问题,因为这非常准确。重启和停止按钮实际上没有任何状态,所以你不应该期待 GET 操作能得到什么有用的东西。

Bill de hóra 在 对这篇文章的回应中提供了例子,来说明 PUT 和 POST 两者何时相对于另一方来说更为合适。

什么时候 PUT 与 POST 的比较才真正有影响?据我所知,当你的资源代表着一个集合时,它是有影响的,而这也很普遍-文件夹,专辑列表,订阅种子,收集物,博客,标签云,订单,购物车-任何基于列表的结构。

他同时还展现了关于整个讨论更加实用的方面,并建议将 POSTting 表单作为一种可能的解决方案。

另一方面,很多很多人不会,不想,(有时候也不能)去关心 REST/HTTP/AtomPub 的秘密。所以我也考虑到我们需要模式和实践来帮助开发者上手。

但是到目前为止我并不确认在我们支持 REST 的社区阵营里对于部分的更新资源已经有了一个很好的普遍答案或是设计模式。除非是这样,不然我推测人们还是会回到使用表单 posting,因为它是最为简单和兼容的部署客户端库和 web 框架的方式。要不就这样。要不就为部分更新定义一些特定的媒体类型。

Roy Fielding 也对这篇文章作出了回应

在我的论文中没有特指的主要原因,是因为这些方法是作为 Web 架构定义的一部分,由 HTTP 来定义的,而不是 REST 架构风格(所定义的)。特定的方法定义 […] 对 REST 架构风格没有影响,所以对它们进行风格讨论非常困难。REST 对方法的唯一要求就是它们需要为所有的资源有着统一的定义 (例如,中介不必需要去了解资源的类型就可以理解请求的含义)。

只有当 POST 被用在有其它的方法理想适用的场合,才是一个问题。其它的方法对中介更有价值,因为它们说明了失效如何被自动处理以及中间缓存如何去优化它们的行为。POST 不具备这些特点,但这并不意味着我们离得开它。POST 在 HTTP 里为许多有用的目的而服务,包括主要目标:“这一行为不需要符合于标准。”

Roy 作出了总结:

我们没必要对于 HTTP 的每个状态改变都使用 PUT。REST 从没说过我们应该这样。[…] 我个人的话,对这些按钮我就使用 POST。API 可以对使用 POST 作出补偿,可以在响应中表示客户端应当刷新对更大资源状态的表象。换句话说,我会返回一个 303 响应,重定向回 VM 状态,这样客户端就知道状态已经改变了。

这里有原文, 以及社区的所作出的回应。

查看英文原文: When Is POSTing State Appropriate?

2009-04-23 02:531029
用户头像

发布了 133 篇内容, 共 35.0 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

区块链白皮书编辑、白皮书撰写 企业技术书ppt制作

西安链酷科技

项目白皮书 白皮书编辑

dapp开发需要多少钱 dapp软件开发公司

西安链酷科技

DAPP智能合约交易系统开发

erc20代币发行 bsc链代币发行、波场链、以太坊链加密货币发售

西安链酷科技

使用 TypeScript 从零搭建自己的 Web 框架:框架雏形

RoyLin

typescript

企业架构设计的一般过程-始于使命愿景和价值观

凌晞

企业架构 架构设计

企业架构设计的一般过程-以目标为导向

凌晞

企业架构 架构设计

从启发式到模型化,京东推荐广告排序机制演化

京东零售技术

算法 广告 搜索推荐 企业号 4 月 PK 榜

数字货币交易所开发软件搭建、安卓ios源码交付

西安链酷科技

区块链交易所开发

Penpad获OKX 、Scroll生态大力支持,ETH质押创新高

长安区块链

国内有哪些比较好的区块链技术公司

西安链酷科技

区块链技术应用开发

Amazon SageMaker: 拓展机器学习边界,塑造未来创新趋势

亚马逊云科技 (Amazon Web Services)

机器学习 re:Invent 亚马逊云科技 生成式人工智能 Amazon SageMaker

C++ 默认参数与引用传递:语法、用法及示例

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

鸿蒙HarmonyOS实战-ArkUI组件(Row/Column)

蜀道山

鸿蒙 HarmonyOS 鸿蒙开发 鸿蒙系统 鸿蒙 Ability

Penpad获OKX 、Scroll生态大力支持,ETH质押创新高

加密眼界

Penpad生态再迎新进展,Season 2 ETH 质押量超200万美元

股市老人

Penpad获OKX 、Scroll生态大力支持,ETH质押创新高

石头财经

加密货币交易所开发、区块链交易所开发 秒合约交易所系统源码部署

西安链酷科技

合约交易所开发 期权交易所 合约跟单系统开发

通义灵码×西安交通大学携手打造“云工开物-高校训练营”,解锁 AI 时代编程学习与实战

阿里巴巴云原生

阿里云 云原生 通义灵码

Penpad获OKX 、Scroll生态大力支持,ETH质押创新高

大瞿科技

Penpad再获OKX 、Scroll生态支持,外部资金涌入ETH质押

股市老人

基本的Linux命令以及Linux目录结构

百度搜索:蓝易云

云计算 Linux 运维 云服务器 ECS

揭秘智能写手GPT的测试报告生成技巧

霍格沃兹测试开发学社

defi交易挖矿系统开发 dapp智能合约开发技术

西安链酷科技

nft交易市场开发

元宇宙项目开发 dapp智能合约模式开发 质押挖矿系统搭建

西安链酷科技

去中心化合约开发

鸿蒙HarmonyOS实战-ArkTS语言(渲染控制)

蜀道山

鸿蒙 HarmonyOS 鸿蒙开发 鸿蒙系统 ArkTS

运用指针轻松实现多个数据排列

智趣匠

PLC PLC-IoT

Penpad生态再迎新进展,Season 2 ETH 质押量超200万美元

BlockChain先知

Rest和Http什么关系?

百度搜索:蓝易云

云计算 Linux 运维 Rest 云服务器

Higress 全新 Wasm 运行时,性能大幅提升

阿里巴巴云原生

阿里云 云原生 Higress

RocketMQ 事件驱动:云时代的事件驱动有啥不同?

阿里巴巴云原生

阿里云 RocketMQ 云原生

Penpad再获OKX 、Scroll生态支持,外部资金涌入ETH质押

威廉META

什么时候POSTing状态合适?_SOA_Dilip Krishnan_InfoQ精选文章