我们有一系列REST服务,可以通过标识符来提取资源,但我们最近的任务是传递披露参数以便通过审计进行保存。
有什么用途......
GET entity/{id}
现在变成了......
GET entity/{id}?requestName=&requestingOrganization=&reasonForUse=&verificationMethod=&otherAuditDisclosureProperties....
entity
的状态不会改变,仍然是幂等的,但我们必须在每次调用时审核其他信息才能提供。
首先想到的是构建一个身体,但这似乎不适合GET。这是使用查询参数的第二种方法,无需查询/过滤。这些附加参数是在请求时捕获的真实上下文信息。这些等同于SOAP调用中存在于SOAP主体外部的SAML属性(这使我认为可能是头部属性)。
另请注意,此信息是中继的,因此提供的身份验证令牌适用于呼叫的服务用户,而不是上下文的实际身份。在周围的信任框架中隐含地信任原始调用者的身份。
您如何定义此动词/路径?
答案 0 :(得分:1)
也许是自定义标题:vnd.mycompany.myheader
;在哪里以可解析的格式放置所需的所有参数:name1=value1; name2=value2
。您将浪费从查询字符串中删除。
偏离主题的回复
我无法想象您要向用户询问API是否存在此类主观信息的情况,这需要付出很多努力(因为它会根据请求进行更改)并且不会给客户端带来任何价值。它仅供您内部使用。最可能的结果是客户端硬编码这些值并在所有请求中重复这些值。
如果客户端是内部客户端,您可能正在寻找方法来关联跨多个服务的请求,例如Sleuth,这将让您了解客户端使用您的API的原因。
如果客户是外部客户,请考虑与开发人员进行调查和个人访谈。我还建议您首先培养您的API社区,以便与这些人联系,并了解他们如何以及为何使用您的API。
答案 1 :(得分:0)
我同意Daniel Cerecedo的观点。正确的方法是将信息添加为请求标头的一部分。 一般信息可在以下网址找到:https://www.w3.org/Protocols/HTTP/HTRQ_Headers.html 实现将取决于您的编程语言。