- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了改变链接 uris 的好处,但这真的不是这个问题的意义所在。
我所说的可进化性是指向服务添加新功能或修改(如果可能)现有的功能,实际上就是这样。
SOAP 并没有那么糟糕,因为 REST 社区在谈到可演化性时倾向于谈论它。例如:
最佳答案
SOAP 是 基于合约的技术。整个客户端/服务器交互都写在一个大文档中(WSDL
),并且必须得到双方的同意和尊重才能使事情正常进行。如果任何一方决定添加功能,另一方必须与其同步“进化”。双方完全结合,在臀部连接,粘在一起,结婚,永远。
增强 SOAP 服务的典型方法是为新版本的服务创建新的 WSDL 文档,同时维护旧版本。另一种技术是创建一个新接口(interface)来包含新方法并从旧方法继承。您在 #1 中描述的方法是 IMO 打破了 SOAP 规则,因为客户端和服务器现在将使用不同的合约,并且它只工作因为 添加剂 更改(如新方法)可以被硬塞进去,而且大多数时候事情都会奏效。有人制作 的那一刻破坏性更改,则客户端的契约(Contract)将与服务器的契约(Contract)不匹配,并且游戏结束。这是一个难以管理的过程,这就是为什么大多数组织选择为每个新版本的 API 创建全新的 WSDL。
REST 并没有神奇地解决所有这些问题,但它让事情变得更容易管理通过不强制您将整个分布式系统的“契约(Contract)”捆绑到一个工件中 .您使用的是 HTTP 吗?太好了,那么您就可以使用 Web 也使用的所有美妙的 HTTP 功能:代理服务器、URL、内容协商、身份验证等。您想使用 JSON 编码和 XML 进行通信吗?把自己打昏。任何时候都可以在 REST 中进行操作,而不会影响现有客户端。你想要安全吗?好的,开始使用 HTTP 的内置支持来挑战经过身份验证的凭据。所有这些东西(HTTP、JSON 等)都是标准化的,并在不同的地方进行了描述,而这正是它应该的样子。
SOAP 将传输协议(protocol)、位置信息、有效负载描述、编码选择和 RPC 方法组合成一个巨大的文档。如果您想对该列表中的任何内容进行任何更改,则需要一个新文档。更糟糕的是,其中一些事情根本无法改变。
REST 将这些东西分开,以便 可以独立进化 .您的 URL(或“URI”,更准确地说)在运行时返回并假设客户端 doesn't start to hardcode them无需对客户端进行任何更改即可进化。如果您的文档清楚地表明将来可能会出现新字段,那么对您的媒体类型进行附加更改是微不足道的。您还可以选择对媒体类型进行版本控制,允许 v1/v2/v3... 媒体类型在您的系统中共存,并且客户端可以选择(使用 Accept
和 Content-Type
中的 header HTTP) 他们想使用哪一个。
有没有听过保时捷车主在烟灰缸满了就买新车的笑话?那是 SOAP 。应该是微不足道的改变需要大修。 REST 为您提供真空吸尘器。您不必使用它,但它肯定更便宜。
关于REST 与 SOAP 可演化性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8993467/
我需要序列化一个对象并将其存储在磁盘上。我使用了内置的Java,只要类不发生太大变化,它就可以正常工作。如果我开始在类里面乱搞,它就会停止工作。 这里有哪些可用选项?基本上,如果我们有更新,我不想破坏
我有一个正在开发数据模型的应用程序(该应用程序处理新旧数据)。现在我想用原始返回类型的演变来覆盖方法的返回类型: public interface Section { List getItems();
我是一名优秀的程序员,十分优秀!