REST最佳实践GET与上下文参数

时间:2017-02-08 18:40:23

标签: rest

我们有一系列REST服务,可以通过标识符来提取资源,但我们最近的任务是传递披露参数以便通过审计进行保存。

有什么用途......

GET entity/{id}

现在变成了......

GET entity/{id}?requestName=&requestingOrganization=&reasonForUse=&verificationMethod=&otherAuditDisclosureProperties....

entity的状态不会改变,仍然是幂等的,但我们必须在每次调用时审核其他信息才能提供。

首先想到的是构建一个身体,但这似乎不适合GET。这是使用查询参数的第二种方法,无需查询/过滤。这些附加参数是在请求时捕获的真实上下文信息。这些等同于SOAP调用中存在于SOAP主体外部的SAML属性(这使我认为可能是头部属性)。

另请注意,此信息是中继的,因此提供的身份验证令牌适用于呼叫的服务用户,而不是上下文的实际身份。在周围的信任框架中隐含地信任原始调用者的身份。

您如何定义此动词/路径?

2 个答案:

答案 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 实现将取决于您的编程语言。