写点什么

定制媒体类型的扩增符合 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:111283
用户头像

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

关注

评论

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

Java 如何从一个 List 中随机获得元素

HoneyMoose

细数云上综合治理始末,华为云联创营解码企业运维之道

Geek_2d6073

多方系统集成的启示

QualityFocus

集成测试 系统集成

在线Excel转SQL工具

入门小站

工具

清华校友走进百度 用科技赋能产业智能化转型

百度大脑

赛事解析|乒乓球时序动作定位大赛亚军方案分享

百度大脑

一站式内容创作助手 智能创作平台生成正式商用

百度大脑

linux之软连接和硬连接的区别

入门小站

Linux

[Day28]-[二叉树]左叶子之和

方勇(gopher)

LeetCode 数据结构与算法

我们在讲的 Database Plus,到底能解决什么样的问题?

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

重学架构之电商秒杀系统

陈华英

架构实战营

关于K8s中Service Account的一些笔记:Pod内部如何访问K8s集群

山河已无恙

k8s 4月月更

从概念、部署到优化,Kubernetes Ingress 网关的落地实践

阿里巴巴云原生

阿里云 Kubernetes 云原生 网关

参赛必看,2022语言与智能技术竞赛赛题任务解读直播!

百度大脑

高精度轻量级图像分割SOTA模型PP-LiteSeg重磅开源!

百度大脑

Apache ShardingSphere 代码格式化实战 —— Spotless

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

资源画像,让容器资源规格的填写不再纠结

阿里巴巴云原生

阿里云 容器 云原生

浮点数-Float-Double转二进制

入门小站

工具

参加 KubeVela 开源之夏,给你的云计算编程能力加个 Buff

阿里巴巴云原生

阿里云 云原生 开源之夏

制造蝴蝶飓风,微众区块链的蝶变和ESG新使命

脑极体

CorelDRAW Graphics Suite2022中文版

茶色酒

cdr2022

ECA 认证备考指南

Se7en

百度天工AIoT打造农业种植方案,用数字经济助力建设农业新模式

百度大脑

DaaS服务之分布式日志/缓存/对象存储

穿过生命散发芬芳

4月月更

你竟不劝我坚持

QualityFocus

职业规划 职业生涯规划

linux之软连接和硬连接的区别

入门小站

Linux

R 编程语言 - 简介

海拥(haiyong.site)

R语言 4月月更

Selenium自动化应该避免的测试场景

FunTester

2022语言与智能技术竞赛再升级,推出NLP四大前沿任务

百度大脑

RTC 科普视频丨聊聊空间音频的原理与其背后的声学原理

声网

RTE技术详解 空间音频

[Day29]-[数组]将一维数组转变成二维数组

方勇(gopher)

LeetCode 数据结构算法

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