我正在我的应用程序中实现一个相关 ID,并希望获得一些有关其设计的反馈。主要关注的是相关 ID 应可用于所有日志。
假设我有一个网络(前端)应用程序,它为我的用户提供页面。它与两个提供数据的 API 进行对话。 API 不会向用户公开,因此所有请求都在前端应用程序中“开始”。
API 的工作很简单,它们使用前端应用程序的所有标头中提供的相关 ID (X-Correlation-ID) 并将其打印在任何日志中。
前端应用程序必须生成 ID,将其添加到传出请求的标头中,但它也必须消耗 ID。
我的问题是:前端应用如何存储关联ID? 我的第一个想法是,它会修改传入的请求并添加标头(如果它不存在),但这将使传入的请求有些“不可靠”,因为它现在已被修改。 另一个想法是,它可能存储为某种应用程序全局变量,根据请求清除。
相关 id,即通常附加到请求头的 id,例如 Request-ID、X-Request-ID、X-Trace-ID、X-Correlation-ID 通常每个请求发布。
您似乎想将其存储在客户端本地。你所描述的听起来更像是一个“会话ID”,当客户端“重新启动”时会被重置。如果是这种情况,您可以简单地使用本地/会话存储或 cookie 来存储并在需要时清除它。
请记住上面的第一句话。相关 ID 通常在每个请求中使用。我通常做的事情:
这就是 heroku 所做的事情。对于许多其他服务/公司来说也是如此。
不用说,您可以将两个 ID、您引用的“会话”ID 加上每个请求生成的 ID 结合起来,以便更好地了解日志等中发生的情况。
请求标头并在应用程序中重新路由/传递请求。 还有一件事,在发回响应时,请确保再次将之前生成的 ID 添加到 Response Header 中,以便客户端可以接收到这个唯一的 ID 并将其保存在 localstorage/cookie 中以供进一步调用,以便使用该跟踪 ID 可以轻松跟踪客户端。
正如您请求的日志一样,现在既然您有了相关 ID/跟踪 ID,您就可以将它们记录在您想要的任何地方,并且您可以轻松确定客户端请求的完整流程,以防使用此唯一 ID 出现任何问题。步骤: