REST:HTTP头或请求参数

我一直在围绕REST进行一些研究。 我注意到, Amazon S3 API主要为其REST接口使用http标头。 这对我来说是一个惊喜,因为我认为这个接口主要用于请求参数。

我的问题是这样的:我应该主要使用HTTP头来开发我的REST接口,还是应该使用请求参数?

问题主要是所定义的参数是否是资源标识符(URI)的一部分。 如果是的话,那么你会使用请求参数,否则HTTP自定义标题。 例如,在音乐库中传递album的ID必须是URI的一部分。

请记住,例如/employee/id/45 (或/employee?id=45 ,REST 查询string参数或干净斜线分隔的URI没有偏见)标识一个资源。 现在,您可以通过发送请求头content-type: text/plaincontent-type: image/jpg来获取信息或图像,从而使用内容协商。 在这方面,资源被认为是相同的,头只用于定义资源的格式。

一般来说,我不是HTTP自定义标题的大粉丝。 这通常假定客户端具有服务器实现的先验知识(不能通过自然的HTTP方式发现,即超媒体),其始终被认为是REST反模式

HTTP标头通常定义与请求/响应过程中要实现的内容正交的HTTP方面。 Authorization标题(确实是一个用词不当,一定是authentication)是一个典型的例子。