合并,替换,还是补丁:Astoria如何应对变化的数据

2008 年 6 月 25 日

在使用 REST 时,当你执行一个 PUT 操作来更新已有的数据时会发生什么事?Astoria 团队提出了这个问题,并给出了他们的答案。

当一个基于 Astoria 协议的 web 服务收到一个 PUT 操作的请求,它有两种方式可以来处理这个更新:或者替换掉原有的数据,或者将新的值与原来的数据进行合并。为了保持与 AtomPub 协议的兼容性,微软决定 PUT 应该对应于替换操作。

这显然使得如何表示合并操作成为了一个问题。可用的选项包括引入一个新的动词,MERGE,或者是一个新的定制报头。 Pablo Castro 写到,

虽然我们并不因引入了一个 HTTP 新方法很兴奋,但用额外的报头重载 PUT 却是非常成问题的。别的不说,假如一个服务器因不能通过报头来支持“合并”操作而将其当作了常规的“替换”请求并执行了这一操作,这绝对不是客户想看到的。同样,其它的东西也受到影响。例如,一个服务器获得了一个真正的 MERGE 请求但并不能处理它,它可以返回 405-不支持的方法。

他们所考虑的另一个意见是 PATCH 操作。遗憾的是,在微软的代码冻结的时候,该规范还未能最终确定下来。这使微软陷入了进退维谷的境地,要么冒着与最终规范不兼容的风险使用 PATCH,要么使用可能会过时的 MERGE。鉴于第一个选择有可能损害客户或者造成与规范的不兼容,他们决定使用 MERGE。

因为我们的话题是在客户端,需要注意的是.NET 客户端默认就是合并语义。作出这样的选择是因为一个.NET 客户端可能并不能知道服务器上所有的字段,而服务器无法区分哪些字段是故意空缺的和本来就未知。

AJAX 客户端同样默认的是合并的语义。像.NET 客户端一样,它们也有一个可选的参数来表明想要选择的是替换的语义。

查看英文原文 Merge, Replace, or Patch: How Astoria Handles Changing Data

2008 年 6 月 25 日 01:48287
用户头像

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

关注

评论

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

阿里云容器服务入选云原生边缘「领导力企业TOP3」,推动「原生云边」基础设施标准建立

阿里巴巴云原生

阿里云 容器 开发者 云原生 边缘计算

【涂鸦物联网足迹】用煲仔饭来说明IaaS/PaaS/SaaS的区别

IoT云工坊

云计算 IaaS PaaS SaaS 云平台

有了这份“Java神级面试资料”,奉劝各位耗子尾汁赶紧扔掉你在网上找的那些千篇一律的面试题

Java成神之路

Java 程序员 架构 面试 编程语言

程序员因重复记录日志撑爆ELK被辞退!

Java架构师迁哥

Mysql中,1=1和 1=1=1 和 -1=-1 和 -1=-1=-1 和 5=5 和 5=5=5 有什么区别

Geek_de9857

MySQL sql 返回值 1=1=1 -1=1=1

“深入内核,拒绝蒙圈”,阿里巴巴一位P7级架构师总结整理的这份《Java架构成长笔记》彻底火了。

Java成神之路

Java 程序员 架构 面试 编程语言

15年华为云视频架构师采访实录:揭秘未来音视频行业的科技趋势!

华为云开发者社区

直播 视频 华为云

forsage以太坊矩阵系统软件开发|forsage以太坊矩阵APP开发

开發I852946OIIO

系统开发

扩招1W人,字节跳动内部公开12月份Java岗71道面试题

比伯

Java 编程 架构 面试 程序人生

阿里华为等大厂如何处理数值精度/舍入/溢出问题

Java架构师迁哥

LeetCode题解:127. 单词接龙,双向BFS,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

flink 使用curl,通过RESTful api,上传和删除jar包

Geek_de9857

flink RESTful curl 上传jar 删除jar

滴滴DoKit阶段性成果汇报之一机多控

工具 滴滴开源 DoKit

佛萨奇Forsage系统开发,智能合约dapp技术

薇電13242772558

智能合约 dapp

从阿里离职后人虚了,头也秃了,就剩这份Java性能优化的PDF了

Java架构追梦

Java 架构 面试 性能优化 并发

985研究生熬夜23天吃透845页架构宝典 终收割腾讯Java岗offer!再也不用怀疑人生了

比伯

Java 编程 架构 面试 程序人生

一文详解激活函数

书豪

Hive中,同时存在map、array、struct这三种格式,应如何在建表语句中指定分隔符?

Geek_de9857

hive struct map array 分隔符

等保数据备份和恢复关键点,这些你该知道!

华为云开发者社区

数据 容灾 恢复

渴望提升自己技术能力的程序员的必备宝典!这份在阿里内部被封神的《Java技术成长笔记》真的太牛了!

Java成神之路

Java 程序员 架构 面试 编程语言

90分钟10个手写案例,从源码底层给你讲解7种线程池创建方式

996小迁

Java 源码 架构 资料 笔记

OpenKruise v0.7.0 版本发布:新增周期任务分发控制器

阿里巴巴云原生

阿里云 容器 开发者 运维 云原生

几款Java开发者必备常用的工具,准点下班不在话下

华为云开发者社区

Java 工具 开发

涨薪神作!华为内部操作系统与网络协议笔记爆火,这也太香了吧

Java成神之路

Java 程序员 架构 面试 编程语言

从面试角度分析LinkedList源码

Java旅途

Java List 集合 linkedlist

架构师训练营第 13 周学习总结

netspecial

极客大学架构师训练营

《O2O实战:他们是如何利用互联网的》.pdf

田维常

互联网

女朋友突然问我DNS是个啥....

乱敲代码

计算机网络 DNS DNS服务器

Alibaba最新《Java架构核心宝典》限时开放下载,互联网主流技术详解总结,提升技术能力的必备宝典!

Java成神之路

Java 程序员 架构 面试 编程语言

干货丨如何使用Redash连接DolphinDB数据源

DolphinDB

数据处理 时序数据库 DolphinDB 数据库开发 redash

架构师 3 期 3 班 -week4- 作业

zbest

作业 week4

合并,替换,还是补丁:Astoria如何应对变化的数据-InfoQ