如今,当评论起 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 可以看作是自形貌性这个束缚的一部门(每个消息必须包含富足的信息来知道怎样对它举行处置惩罚)。
|