"Q&A" 场景使用哪个 REST HTTP 动词?

Which REST HTTP verb to use for "Q&A" scenario?

我工作的一个认证系统有这个新功能:

1。 Auth 系统允许用户指定他们与之交易的依赖方,

2。依赖方可以 approve/deny/maybe 请求(授权)- 可能会导致重定向到 RP 网站,以便 RP 提出进一步的授权问题。

RP 必须实施授权系统指定的 Web 服务,以执行授权系统生成的 approve/deny/maybe 请求。

我的问题是这看起来像一个 REST 服务。由于 auth 系统不能真正规定 RP 系统的 URI 样式,我想指定路径中没有任何参数,auth 系统只需要知道服务的 URI。请求的数据(用户 name/id)可能在请求正文中有点 json(建议使用 POST http 动词。GET 可能没问题,但不愿意公开用户 ID URI)。身份验证系统不关心 RP 对请求数据做了什么,身份验证系统只想要一个 "yes/no/maybe" 回复(因此可能不是真正的 GET/POST/PATCH/DELETE/etc 范例)。

最好使用什么动词?以及如何方便回复;它不是真正的 success/failure 响应,因为查询有 3 个可能的结果,是否可以接受一些 json 响应返回(然后使用什么 http 动词)?

我对此有点困惑。 GET 似乎是最明显的

GET /api/user_link_authorize/{userid}

除非我被迫将用户 ID 放在 URI 中(我不想这样做)...

有什么建议吗?

My problem is what this looks like as a REST service.

想想它作为一个网站的样子。

您将从书签列表中的某个已知 URI 开始。获取该页面将为您提供一个表单表示,该表单将具有描述需要提供哪些数据(并且可能包括默认值)的输入控件。客户端提供它知道的数据,并提交表单。表单中的数据用于创建 HTTP 请求,如 HTML 的表单处理规则所述。对该请求的响应包括答案的表示,或者可能是下一步要完成的工作。

那是 REST

检索表单(通过书签 URI)当然是 GET;我们只是更新本地缓存的表单“当前”表示形式的副本。提交表单可以是 GETPOST;我们不一定需要提前知道,因为该信息包含在表单本身的表示中。

GET vs POST 涉及许多权衡。语义上,GETsafe,意味着资源可以随时获取,蜘蛛可以爬取,这样访问资源是“免费的”。当资源空闲时这很好,因为如果响应丢失,不可靠网络上的客户端可以自动重试请求。另一方面,向全世界宣布请求是安全的,而实际上产生响应的成本很高,这并不是一个成功的做法。

此外,GET 不支持消息正文(更准确地说,有效载荷没有定义的语义)。这意味着客户端提供的信息需要成为目标资源标识符本身的一部分。如果您正在处理敏感信息,那可能会出现问题——不一定是在传输过程中(您可以使用安全套接字),但肯定会确保包含敏感信息的 URI 不会记录在敏感数据可能泄漏的地方。

POST 支持在请求中包含有效载荷,但它不保证查询是安全的,这意味着通用组件不知道它们是否可以在响应为迷路了。

鉴于您不希望 URI 中包含用户 ID,这一点反对 GET,因此支持 POST