我正在努力想出通过REST服务捕获审计信息的“正确”方法。假设我有一个Employee资源的内部REST API。我想在添加/修改/删除Employee时捕获事物,例如执行更改的用户,用户使用的应用程序,完成时间(假设这可能是异步的,因此用户的操作可能发生在与REST调用不同的时间)等。此外,发起更改的用户可能不是进行REST调用的经过身份验证的用户。
我的想法是那些属性不属于请求的主体 - 这意味着它们不是Employee对象的属性。它们不是可以在GET上检索和返回的东西,因此它们不应该在POST / PUT中。它们也不属于参数,因为参数应该用于指定有关Employees的其他内容或者对Employees的GET请求的搜索/过滤器Critiera。
我目前的想法是让客户在HTTP标头中指定此信息。这保留了URL参数& body纯用于Employee资源。这是合适的标题使用吗?还有其他我没看到的选择吗?
答案 0 :(得分:6)
我正在处理一个类似问题的项目,我们最终使用HTTP标头来跟踪审计信息。实际上,这是需要Authorization标头指定客户端用户和应用程序的副产品,我们在REST服务中使用此信息将详细信息存储在审核日志中。
在您的情况下,我认为添加自定义X标头以指定请求的原始用户/应用程序/时间并将其存储到服务某处的审核历史记录中是“错误的”。基本上通过额外的请求标头代理信息。我也同意这些不应该是请求正文或URL参数的一部分。