REST:HTTP 标头还是请求参数

44

我一直在进行有关REST的研究。我发现亚马逊S3 API主要使用HTTP头来实现其REST接口,这让我感到惊讶,因为我认为该接口主要依赖于请求参数。

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

1个回答

67
这个问题主要是关于所定义的参数是否是资源标识符(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”头(真正的是身份验证,应该被称为authentication)是一个经典示例。

3
这是一份思考周到且写作精良的回复。 - Raymond Hettinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接