写点什么

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

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

关注

评论

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

数据人必须知道的SQL概念(A—Z)

大唐小生

sql 数据 职场成长

你问我答:微服务治理应该如何去做?

BoCloud博云

容器 微服务 PaaS API 博云

Vue中使用装饰器,我是认真的

前端有的玩

Java Vue 装饰器

数据库系统设计概述

码哥字节

数据库 redis mongodb elasticsearch 数据库设计

ARTS打卡 第10周

引花眠

ARTS 打卡计划

<<前端进阶篇>> PDF 出炉了 — 「阿宝哥」,精心准备的 6 万多字 170 页的前端进阶资料

阿宝哥

大前端

英特尔®AI计算盒参考设计发布 加速智能边缘崛起

最新动态

实用!一键生成数据库文档,堪称数据库界的Swagger

程序员小富

Java MySQL

基于 Golang的侵入式 Opentracing实现全链路追踪 ----实践篇

是老郭啊

架构师训练营第八章-作业1

A Matt

老哥,您看我这篇Java集合,还有机会评优吗?

苹果看辽宁体育

Java 后端

技术管理者带团队的几个实用技巧

Phoenix

团队管理 企业文化 团队 价值观

飞天茅台超卖事故:Redis分布式锁请慎用!

程序员生活志

redis 分布式

第九周

hdhdh

Newbe.Claptrap 框架如何实现多级生命周期控制?

newbe36524

架构 微服务 .net core ASP.NET Core

什么?不写代码也能做功能开发! -RUOYI 教程二

Java_若依框架教程

Java 无代码开发 若依

授人以渔:stm32资料查询技巧

华为云开发者联盟

架构 armv8 芯片 华为云 二进制

在人工智能时代追逐的“后浪”

华为云开发者联盟

程序员 AI 开发者 技术社区 华为云

智能膜切机,解决手机贴膜行业难题

Geek_116789

计算机网络基础(十一)---网络层-OSPF协议

书旅

计算机网络 网络 协议栈 OSPF

财务分析与主要的模型

松子(李博源)

秒杀系统问题与方案设计

superman

秒杀 架构总结

华为云GaussDB(DWS)内存知识点,你知道吗?

华为云开发者联盟

数据库 大数据 数据 内存 华为云

手写一个重入锁

诸葛小猿

synchronized CAS 重入锁 compareAndSwap ReentrantLock

JVM系列之:JIT中的Virtual Call

程序那些事

Java JVM JIT

《深度工作》学习笔记(3)

石云升

学习 深度工作 工作哲学

微软苏州集体抵制来自阿里、华为的跳槽者:请停止你的“奋斗逼”行为!网友:看到 955 不加班的公司名单,我酸了

程序员生活志

程序员 加班 996

云小课 | IPv4枯了,IPv6来了

华为云开发者联盟

IP 公有云 虚拟私有云 华为云 虚拟化

将信将疑,将中台进行到底

郭华

系统设计系列之如何设计一个短链服务

看山

架构 面试 分布式 架构设计 短链服务

初识分布式:MIT 6.284系列(一)

Kerwin

分布式 MIT 28天写作

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