【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论

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

Kafka消费者提交消费位移时提交的是当前消费到的最新消息的 offset 还是 offset+1?

码农架构

Java kafka 程序员 架构 消息中间件

产品经理:一款用户全量会话轨迹管理产品是怎么炼成的?

博睿数据

开发Kafka消费者客户端需要注意哪些事项?

码农架构

【百度技术分享】San介绍以及在百度APP的实践

百度Geek说

Java JavaScript feed

5分钟让你理解K8S必备架构概念,以及网络模型(上)

大数据 架构

安卓开发在线!Android面试吃透这一篇就没有拿不到的offer!大厂内部资料

欢喜学安卓

android 程序员 面试 移动开发

Kafka在哪些场景下会造成重复消费或消息丢失?

码农架构

Java kafka 程序员 架构 消息中间件

JDK1.8升级这么久!Stream流的规约操作有哪些?

码农架构

Java 架构 jdk 函数编程

架构师训练营大作业(二)

Geek_f06ede

图解分析:Kafka 生产者客户端工作原理

码农架构

Java 程序员 架构 kafak

重磅发布 | 2021年OpenAtom XuperChain开源技术路径

百度开发者中心

百度 #区块链#

即构发布 LCEP 低代码互动平台产品 RoomKit,实现互动房间0代码搭建

ZEGO即构

怎么理解Kafka消费者与消费组之间的关系?

码农架构

Java 大数据 程序员 架构

商务部CECBC专委会-商务联络部长王聚师:中医国际化的数字创新密码

CECBC

数字

函数式编程Stream接口真的有那么好用吗?

码农架构

Java 程序员 架构

“双循环”下的数字货币棋局

CECBC

数字货币

电子书下载|2020 年云原生年货小红书来啦!

阿里巴巴云原生

容器 微服务 开发者 云原生 k8s

【JS】事件委托

德育处主任

JavaScript 大前端 js 2月春节不断更

重磅发布 | 3.4K Star可视化神器来啦

百度开发者中心

工具 可视化 #飞桨#

为什么联盟链系统没有“激励”?

CECBC

区块链

Elasticsearch 搜索结果解析

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

使用logstash作为docker日志驱动收集日志

远鹏

Docker Logstash 日志系统

Kafka生产者哪些重要的参数是我们需要注意的?

码农架构

Java kafka 程序员 架构 消息中间件

🎨 HTTP 协议的前世今生

飞天小牛肉

Java 程序员 面试 计算机网络 2月春节不断更

零基础实现Java直播(二):实现流程

ZEGO即构

做了6年的Android,Jetpack-MVVM-高频提问和解答,看看这篇文章吧!

欢喜学安卓

android 程序员 面试 移动开发

Kafka 发送消息过程中拦截器的用途?

码农架构

Java kafka 程序员 架构

anyRTC新春大礼包

anyRTC开发者

音视频 WebRTC RTC

Clubhouse是个啥?一夜爆火一码难求

架构精进之路

七日更 2月春节不断更 clubhouse

2021版阿里Java亿级并发设计手册:基础+数据库+缓存+消息队列+分布式+维护+实战

Java架构追梦

Java 阿里巴巴 面试 系统架构 亿级并发

架构师训练营大作业

Geek_f06ede

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