REST最佳实践: 使用上下文参数的GET请求

3
我们有一系列的REST服务,通过标识符提取资源。然而,最近我们被要求传递披露参数以便与审计相关数据一起保存。
过去的情况是...
GET entity/{id}

现在变成了类似于...
GET entity/{id}?requestName=&requestingOrganization=&reasonForUse=&verificationMethod=&otherAuditDisclosureProperties....
entity 的状态不会改变且仍具有幂等性,但我们必须在每个调用中审核额外信息以提供它。最初的想法是构建一个主体,但这似乎不适合 GET。 这是使用没有查询/过滤意图的查询参数的第二种方法。这些附加参数实际上是在请求时捕获的上下文信息。这相当于 SOAP 调用中的 SAML 属性,其位于 SOAP 主体之外(这使我认为可能是标题属性)。此外,请注意,这些信息被中继,因此提供的身份验证令牌是为调用服务用户而非上下文实际身份的。原始调用者的身份在所包围的信任框架中隐式信任。您如何定义此动词/路径?

这些参数可以由服务器推断还是必须由客户端定义?这些参数是每个请求的还是可以作为客户端(如客户端/服务器架构)或客户账户的全局参数? - Daniel Cerecedo
很遗憾,服务器没有这些额外的信息,它们是按请求提供的。基本上,我可以请求相同的资源,但出于不同的原因(我们必须捕获)。 - RailRhoad
客户端和服务器是同一个公司吗?您能提供更多有关您要解决的问题的信息吗?而不是那个似乎很糟糕的解决方案。你如何确保正确使用原因调用服务?作为客户端,我为什么要这样做?你让我承担了很大的负担。我不会使用这样的API或者不会按照你期望的理由通知。工作太多了。如果您在问题上提供更多信息,我可以建议一个更好的方法。 - Daniel Cerecedo
这是一个高度规范化的系统,当响应跨域请求(是的,外部用户)时,需要满足明确定义的审计要求。它们是基于SOAP/SAML交换标准建模的,其中主体封装了一般请求,签名的SAML属性包含上下文信息。我们正在尝试引入基于REST的替代方案,但需要满足法律审计要求。 - RailRhoad
2个回答

1
也许可以使用自定义头:vnd.mycompany.myheader,在其中以可解析的格式放置所需的所有参数:name1=value1; name2=value2。这样可以减少查询字符串中的冗余信息。 离题回答 我无法想象一个场景,你会要求API的用户提供如此主观的信息,这需要大量的努力来提供(因为它每次请求都会变化),并且对客户端没有任何价值。这只是为了你的内部使用。最有可能的结果是客户端硬编码这些值,并在所有请求中重复使用它们。
如果客户端是内部的,您可能正在寻找跨多个服务跨度的请求相关方法,例如Sleuth,这将让您了解客户端使用您的API的原因。
如果客户端是外部的,请考虑进行开发人员调查和个人面试。我建议您首先培养API社区,以达到那些人并理解他们如何以及为什么使用您的API的目的。

0

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