使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商
现在,当谈论起 RESTful Web API 的时候,人们总会想到 JSON。但是实际上,JSON 和 RESTful API 没有半毛钱关系,只不过 JSON 恰好是RESTful API 结果的表述格式。也就是说 RESTful API 还可以使用其它的表述格式,例如 xml 或私有的格式。这也就意味着,我们需要让 RESTful API 知道我们想要返回的格式。而这就是HTTP请求和响应的核心内容之一:
Content Negotiation 内容协商
内容协商是这样一个过程:针对一个响应,当有多种表述格式可用的时候,选取最佳的一个表述。
当我们的RESTful API只面向一个API消费者的时候,也许只使用 JSON 一种格式是没有什么问题的。但是如果需要面向各种形式的多个API消费者,那么很有可能少数API消费者无法很好的解析JSON,它们可能更习惯于xml或者其它格式。
那么如何解决这个问题呢?
HTTP请求的 Accept Header 就是用来解决这个问题的,API的消费者在发送请求的时候,在Accept Header 里面填写好 Media Type(媒体类型),例如 application/json 或者 application/xml等等。
如果请求里填写的是 application/json,那么RESTful API返回响应的表述格式就应该是 json…
而如果请求没有填写 Accept Header,那么 RESTful API 只好使用它的默认格式进行响应了。
如果在 Accept Header 里面填写的格式不被 RESTful API 所支持,那么倒是也可以返回默认的格式,但还是要尽量避免这种情况的出现,其实针对这种情况最好的办法是返回 406(Not Acceptable) 状态码,表示 API消费者请求的媒体类型是不可接受的,无法将其作为响应的格式。
综上,Accept Header 指的是输出格式。
在 ASP.NET Core 里面对应的就是 Output Formatters。
而用于指定输入格式的 Header是 Content-Type,在 ASP.NET Core 里面对应的就是 Input formatter。
例如 POST 请求的 body 就需要通过指定 Content-Type 来进行标识,这个 Header 可以看作是自描述性这个约束的一部分(每个消息必须包含足够的信息来知道如何对它进行处理)。
最新文章
- jQuery核心技术-----------------------------------------------------()
- 2016.09.14,英语,《Using English at Work》全书笔记
- SLC、MLC和TLC三者的区别
- Mir2源码详解之服务端-登录网关(LoginGate)
- hdu 1043 Eight 经典八数码问题
- Machine Learning for hackers读书笔记(五)回归模型:预测网页访问量
- linux 深入检测io详情的工具iopp
- Token 的作用
- EXT 组件一些属性与方法(Tree)
- JAVA的程序代码小细节,变量的使用,以及一些细节的面试题
- LeetCode之ReverseWorldString
- ps图层面板上的【透明度】与【填充】的区别
- 关于学习CentOS7使用firewalld打开关闭防火墙和端口
- 添加快捷键 ShortCut
- P3587 [POI2015]POD
- js事件兼容处理
- STM32 Hardware Development
- 斐迅面试记录—SSL和TLS的区别
- java字符串分割的小练习
- Php扩展--seasLog日志扩展安装
热门文章
- 用Helm3构建多层微服务
- Linux的awk命令详解
- EntityFramework Core 3多次Include导致查询性能低之解决方案
- 【Android - 控件】之MD - CardView的使用
- CCNA 之 十 ACL 访问控制列表
- bs4-爬取小说
- webpack 4.x 从零开始初始化一个vue项目
- Calling the Web Service dynamically (.NET 动态访问Web Service)
- 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用
- request获取路径