写点什么

定制媒体类型的扩增符合 RESTful 吗?

  • 2010-01-13
  • 本文字数:932 字

    阅读完需:约 3 分钟

Subbu Allamaraju 在博客中重温了 REST 社区中的久辩不衰的话题(标准媒体类型和定制媒体类型的比较)并试图寻找使用他们的最佳实践。开篇他就提出了媒体类型使用相关的两分观点。

  • 观点 1:Web 服务必须要使用标准媒体类型才符合 RESTful。
  • 观点 2:定制媒体类型如同契约,对于维护交互可视性是至关重要的。

Subbu 认为,若严格参考的话,观点 1 是来自 Roy Fielding 的论文中的一句话,“使用像 application/vnd.example.myway+xml 这样的媒体类型不符合 RESTful”。而他认为理解这些媒体类型在实际使用时产生的影响要比从字面上听从论文的谕旨更为重要。然而,有人回复说,对论文的这样理解本身也是有争议的。

另一方面,他说,观点 2 通过使用定制媒体类型带来协议一级的消息可视性。

[…] 例如,假设一个表象使用 application/xml 去描述一个订单或影集,谁能知道它到底是哪个呢?而如果 Web 服务使用以下这样的媒体类型, application/vnd.example.po 或 application/vnd.example.album,那么任何人都能够理解该表象的语义,而根本不需要对表象体进行解析。按照这种思路,媒体类型是一种消息语义标识符,消息接收者可使用该媒体类型触发处理代码。

那么,怎样才是正确的做法呢?,他问到,然后他提出了自己的观点,希望能够找到一种较民主的最佳实践。

  • 如果发送者使用标准的可扩展格式(如 XML 或 JSON)描述表象,那么就使用标准的媒体类型,如 application/xml 和 application/json。
  • 如果消息格式新发明的,那么就创建新的媒体类型。
  • 如果只是寻找某种方式来传输 XML 或 JSON 消息的应用层语义,那么使用别的手段(如,XML 命名空间和规范)。
  • 如果目标是版本控制,则使用 URI 中的版本标识。

通过一个类 Java 语言的例子,他断言,尽管你可以从消息里面看到请求是如何处理的,但这却破坏了可视性。

就处理 XML 和 JSON 消息而言,形如 application/xml 和 application/json 的媒体类型已经足够了。[…] 基于 URI 的方式必须穿越整个协议栈。为了“架构纯粹性”或“ RESTful 约定”而忽视真实世界的互操作性最终将引火自焚。

Subbu 想通过该博文展示的解决方法是架构纯性和真实互操作性之间的合理平衡点吗?请一定看看原博文并加入你的观点。


查看英文原文: Is Proliferation Of Custom Media Types RESTFul?

2010-01-13 00:111229
用户头像

发布了 184 篇内容, 共 79.7 次阅读, 收获喜欢 8 次。

关注

评论

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

区块链技术成为金融业务应用热点

CECBC

区块链 人工智能 金融

滴滴推理引擎IFX:千万规模设备下AI部署实践

滴滴技术

人工智能 学习 AI 滴滴技术 IFX

滴滴Ceph分布式存储系统优化之锁优化

滴滴技术

云计算 分布式存储 Ceph 滴滴技术

区块链支付系统源码开发,USDT承兑支付平台

13530558032

实时数仓在滴滴的实践和落地

滴滴技术

大数据 滴滴技术 数据通道服务

Zeppelin SDK :Flink 平台建设的基石

Apache Flink

flink

分布式QoS算法解析

焱融科技

分布式 算法 焱融科技 分布式文件存储 QoS

可编程网卡芯片在滴滴云网络的应用实践

滴滴技术

云计算 芯片 滴滴技术

第 0 期架构师训练营第 8 周作业 1

fujin

突破传统 区块链如何实现病历永存

CECBC

区块链 电子病历 信息共享

滴滴数据通道服务演进之路

滴滴技术

大数据 滴滴技术 数据服务通道

滴滴云平台事业群——就是稳!

滴滴技术

招聘 滴滴技术 滴滴云平台事业群分享月

自定义线程池来实现文档转码

架构师修行之路

合约跟单系统开发,数字货币合约跟单软件搭建

13530558032

week12学习总结

burner

迭代技术方案设计文档规范

程序员架构进阶

技术方案

第 0 期架构师训练营第 8 周作业2-总结

fujin

滴滴数据仓库指标体系建设实践

滴滴技术

大数据 数据仓库 滴滴技术

物联网的银河,华为的桨,少年的歌

脑极体

1.Flink检查点算法-15

小知识点

scala 大数据 flink

Redis做消息队列全攻略

架构师修行之路

redis MQ 消息队列

c语言函数指针之回调函数

C语言与CPP编程

C语言 回调函数 函数 函数指针

浅析LR.Net工作流引擎

Learun

.net 敏捷开发 工作流

基于Prometheus的微服务应用监控

易观大数据

GPU虚拟机创建时间深度优化

滴滴技术

云计算 虚拟化 滴滴技术

滴滴七层接入平台实践和探索

滴滴技术

微服务 运维 滴滴技术 七层接入

【Spring注解驱动开发】AOP核心类源码解析,这是最全的一篇了!!

冰河

spring aop ioc

数字货币钱包系统定制开发,区块链钱包源码

13530558032

隐私计算会成为“金融”向“数科”转型的一剂猛药?

hellompc

拥抱K8S系列-03-服务器部署应用和docker部署应用区别(MySQL篇)

张无忌

MySQL Docker 运维

滴滴ElasticSearch千万级TPS写入性能翻倍技术剖析

滴滴技术

大数据 elasticsearch 滴滴技术

定制媒体类型的扩增符合RESTful吗?_SOA_Dilip Krishnan_InfoQ精选文章