我一直在围绕REST进行一些研究。我注意到Amazon S3 API主要使用http标头作为其REST接口。这对我来说是一个惊喜,因为我认为接口主要用于请求参数。
我的问题是:我应该主要使用http标头开发我的REST接口,还是应该使用请求参数?
答案 0 :(得分:63)
问题主要是定义的参数是否是资源标识符(URI)的一部分。如果是,那么您将使用请求参数,否则使用HTTP自定义标头。例如,在音乐库中传递album
的id必须是URI的一部分。
请记住,例如/employee/id/45
(或/employee?id=45
,REST对查询字符串参数没有偏见, 干净斜杠分隔的URI )识别一种资源。现在,您可以通过发送请求标头content-type: text/plain
或content-type: image/jpg
来获取信息或图像,从而使用内容协商。在这方面,资源被认为是相同的,并且标头仅用于定义资源的格式。
通常,我不是HTTP自定义标头的忠实粉丝。 这通常假设客户端具有服务器实现的先验知识(不能通过自然HTTP方式发现,即超媒体),它总是被视为REST反模式
HTTP标头通常将HTTP 正交的各个方面定义为在请求/响应过程中要实现的内容。 Authorization
标题(真的是用词不当,必须是身份验证)是一个典型的例子。