QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

打通对账的最后一公里——对账管理平台

元年技术洞察

数字化转型 对账 对账系统 方舟平台

云原生场景下实现编译加速

京东科技开发者

Java golang 缓存 编译 企业号 2 月 PK 榜

StarRocks荣获2022年度最具潜力数据库奖

StarRocks

数据库 大数据

Apache Kafka入门级教程原创

宋小生

kafka Kafka Producer

Kratos微服务工程Bazel构建指南

微服务 CMS Kratos Monorepo bazel

还在用 OpenFeign?来试试 SpringBoot3 中的这个新玩意!

江南一点雨

spring springboot

便捷模型迭代优化,算法模型支持更新到已部署服务、已有项目|ModelWhale 版本更新

ModelWhale

人工智能 机器学习 数据分析 团队协同 编程建模

开源机器学习软件对AI的发展意味着什么?

OneFlow

人工智能 深度学习 开源

对话 BitSail Contributor | 梁奋杰:保持耐心,享受创造

字节跳动数据平台

GitHub 开源 数据引擎

JavaScript使用URL用来解析处理URL

ModStart

升哲科技荣获2022年度华夏建设科学技术奖二等奖

SENSORO

测试开发 | AppCrawler 自动遍历测试实践(三):动手实操与常见问题汇总

霍格沃兹测试开发学社

云小课|创建DDS只读节点,轻松应对业务高峰

华为云开发者联盟

数据库 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

TiDB x 阿里云丨最长 30 天,最高节省 ¥33,000,免费试用云数据库 TiDB 的机会来啦!

PingCAP

TiDB

新思科技:数字赋能,安全先行

InfoQ_434670063458

利器 | AppCrawler 自动遍历测试工具实践(一)

霍格沃兹测试开发学社

关于 NGINX Kubernetes Gateway,你需要知道的 5 件事

NGINX开源社区

nginx NGINX Ingress Controller NGINX Kubernetes Gateway 企业号 2 月 PK 榜

泛娱乐社交出海解决方案技术实践

网易云信

即时通讯IM 音视频技术

系统运维 SysOM profiling 在云上环境的应用观测实践 | 龙蜥技术

OpenAnolis小助手

开源 cpu 系统运维 profiling 龙蜥技术

八股文的天花板,没到35k的Java开发都值得好好读一读

程序知音

java面试 后端技术 八股文 Java面试八股文 Java构架师

一文带你掌握物联网Mqtt网关搭建背后的技术原理

华为云开发者联盟

后端 物联网 华为云 企业号 2 月 PK 榜 华为云开发者联盟

泛娱乐社交出海解决方案技术实践

网易智企

即时通讯IM 音视频通话

下一代编解码技术Ali266在视频超高清领域的应用展望

阿里云CloudImagine

云计算 Ali266 超高清

Getaverse 1月总结 | 节点数突破6200+

Geek_Web3

#区块链# 元宇宙 web3

测试开发 | AppCrawler 自动遍历测试实践(二):定制化配置

霍格沃兹测试开发学社

如何又快又好实现Catalog系统搜索能力?火山引擎DataLeap这样做

字节跳动数据平台

大数据 数据治理 数据研发 企业号 2 月 PK 榜

如何快速完成API设计,mock数据给到前端?

不想敲代码

APi设计 apipost API调试

Dubbo 中 Zookeeper 注册中心原理分析

小小怪下士

Java zookeeper dubbo

巧用Golang泛型,简化代码编写

百度Geek说

Go golang 企业号 2 月 PK 榜

上新啦|请查收StarRocks 2.5 LTS 版本特性介绍

StarRocks

数据库 大数据

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