使用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 可以看作是自描述性这个约束的一部分(每个消息必须包含足够的信息来知道如何对它进行处理)。
上一篇: 人才短缺是AI创业最大困难
推荐阅读
-
使用ASP.NET Core 3.x 构建 RESTful API - 5.1 输入验证
-
使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商
-
使用 ASP.NET Core MVC 创建 Web API——响应数据的内容协商(七)
-
使用ASP.NET Core 3.x 构建 RESTful API - 4.3 HTTP 方法的安全性和幂等性
-
使用ASP.NET Core 3.x 构建 RESTful API - 5.1 输入验证
-
使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商
-
使用ASP.NET Core 3.x 构建 RESTful API - 4.3 HTTP 方法的安全性和幂等性
-
使用 ASP.NET Core MVC 创建 Web API——响应数据的内容协商(七)