为需要确认的RESTful POST请求提供参数

为需要确认的RESTful POST请求提供参数,rest,Rest,我正在开发一个REST服务,我的一个服务器端操作以一种可能需要一段时间的方式操纵数据库,但是一旦操作开始,数据库就无法恢复(这是一个来自我们在服务器上使用的系统的约束。我可能可以在以后的版本中更改它,但现在我们仍然受到这个约束)。 结果是,在允许操作运行之前,我需要一个带有警告的“确定/取消”对话框 起初,我想将创建对话框的逻辑放在客户端,但这似乎违反了HATEOAS(例如,如果我确实更改了服务器端的框架,则不需要对话框,但如果我的API保持不变,我不想更改客户端)。 我的下一个解决方案是返回一

我正在开发一个REST服务,我的一个服务器端操作以一种可能需要一段时间的方式操纵数据库,但是一旦操作开始,数据库就无法恢复(这是一个来自我们在服务器上使用的系统的约束。我可能可以在以后的版本中更改它,但现在我们仍然受到这个约束)。 结果是,在允许操作运行之前,我需要一个带有警告的“确定/取消”对话框

起初,我想将创建对话框的逻辑放在客户端,但这似乎违反了HATEOAS(例如,如果我确实更改了服务器端的框架,则不需要对话框,但如果我的API保持不变,我不想更改客户端)。 我的下一个解决方案是返回一个带有警告的响应,以及一个链接到不同POST操作的ok,但我不确定何时发送我的参数。我是否在第一个POST中发送参数?如果是,它们如何到达第二个POST(当然不保持应用程序状态)?仅向第二个POST发送参数不是一个选项,因为只有HATEOAS将确定是否需要第二个POST

我在这里发现了一个类似的问题: 但这有两个问题:

  • 这并不能解决我们的问题(因为他只在第二次尝试时添加了一个参数,但我需要从第一次尝试时就携带参数)
  • 删除必须符合“统一接口”。 他确实提出了一个正确的观点,即并非所有客户端都需要确认,但将整个对话框放在UI中会让我回到我们的问题,即如果我改进服务器端应用程序会发生什么
  • 我很高兴听到你对这件事的看法


    注:这是我在stackoverflow.com上的第一篇帖子(多年来一直使用它来寻找我之前提出的问题的答案),所以如果问题的格式不太正确,请原谅我(当然,欢迎你纠正我).

    您的一个服务器端操作需要确认才能执行。在我看来,这意味着两个不同的调用,例如,这可能意味着首先检查您是否需要确认,然后执行实际操作

    例如,您可以请求客户端首先执行GET以查看是否需要确认并检索要显示的消息,然后使用该操作执行实际的POST。如果您没有先执行GET请求,POST可能会返回4xx(可能是412?)错误


    但是,请记住,无论你做什么,你都需要客户端的合作。即使服务器确实收到GET请求,客户端也可能会收到响应,而不是显示确认信息并发布帖子,这不是你可以100%解决的服务器端问题。

    我不会修改
    删除
    的语义,就像链接文章中的解决方案(返回一个
    4xx
    以强制执行一个新请求)。如果
    DELETE
    不起作用,大多数人都会感到惊讶,应该尽可能避免意外

    我的第一个想法是,您可以像HTML中的确认对话框一样解决它。也就是说,在链接中放入一些代码,或者一些标志,以指示需要删除确认:

    ):

    对选项生成成功响应的服务器应发送任何 标题字段,可能指示由实现的可选功能 服务器,适用于目标资源(例如,允许), 包括本规范未定义的潜在扩展


    您可以生成一个令牌来“确认”或授权删除。例如,
    POST/confirmations
    返回带有确认实体的201。然后,通过HTTP头将所述实体传递给
    DELETE/users/1
    OPTIONS /something/abc HTTP/1.1
    ...
    
    200 OK
    Allow: GET,HEAD,POST,OPTIONS,TRACE
    ...
    <body describing confirmation dialogs, messages, etc>