REST API最佳实践 - 在哪里放置唯一的请求标识符

20
设计REST API时,在执行http请求时,添加一个唯一请求标识符的最佳实践是什么?
通常我会将其添加到标题中作为x-request-id,但今天听到有人提到将其添加到url中作为查询字符串!
此外,经过一些研究,似乎有些人将其添加到响应正文中,并将其作为有效载荷的一部分发送!
在这三种方法中,哪一种是应用唯一请求标识符的最佳方式?每种方法的可能优缺点是什么?

1
你需要请求标识符做什么? - cassiomolin
1
在内部微服务架构中跟踪一个请求通过多个请求! - hyprstack
1个回答

13

HTTP不包含任何请求标识符

然而,如果您需要一个(例如用于调试或日志增强),则可以使用您选择的标头。像X-Request-IdX-Correlation-IdX-Trace-Id这样的标头看起来很适合您在评论中描述的场景:在内部微服务体系结构中跟踪请求。

此类标头的值可以是UUID


这篇文章可能会给您一些启示。还要看看Zipkin


我知道HTTP不包括任何请求标识符。以前,我使用UUID为我的自定义HTTP请求头分配值。 那么对于某些代理会剥离头信息怎么办?我发现一些支持使用有效载荷的人争论说这就是他们不使用头信息的原因。 - hyprstack
1
@hyprstack 任何请求元数据都应该属于标头。虽然某些代理可能会剥离非标准标头,但假设此标头将在您的微服务集群中使用(我们希望它是一个受控环境),我认为这并不会有太大问题。 - cassiomolin
@cassiomolin 我有类似的需求,就是管理一个唯一的id来匹配到达我的API的每个请求,以便能够创建每个客户从我的服务中进行的所有调用的链条(区块链类型)。此外,为了创建这个链条,我希望在调用API的任何方法时都将此唯一id作为强制参数插入,其值随第一次调用API的任何方法返回。是否有一种模式可以实现这一点? - Cheshire Cat
@cassiomolin 我创建了一个专门的问题,请查看 https://stackoverflow.com/questions/68018699/rest-api-use-a-unique-identifier-for-each-request-to-build-an-immutable-and-ch - Cheshire Cat

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