language-agnostic - 自定义操作应该使用哪个动词?

标签 language-agnostic rest

假设我们有一个网站,我们有一个项目列表。在这些项目中的每一个上,您可以启动几个不同的过程,这些过程将产生与相关项目相关的某种输出。您应该如何设计以最恰本地使用 http 动词?我想要的是每个项目有多个链接,每个链接触发其中一个操作,但在我的场景中,它与 HTTP-VERB get 不匹配,如果我使用链接,将使用它。另一方面,我不希望所有按钮都在一个单独的表单中,并且具有不同的操作。

这有点难以解释,但希望你理解,这应该是一些最佳实践。

最佳答案

你不应该使用 GET。 GET 请求应该是 safe这意味着它们仅用于信息检索,不应更改服务器的状态。 (即日志之类的事情是可以的,但实际更新应用程序状态的事情是禁忌。)想想一个爬虫检查你的应用程序。任何你不介意爬虫通过的东西都适合 GET,但这听起来不像你的情况(因为你说,“启动几个不同的进程”,但我可能会误解你的用例)。

剩下的就是 PUT、DELETE 和 POST。 PUT 和 DELETE 必须是 idempotent ,这意味着多个相同的请求应该与单个请求具有相同的效果。所以如果你有一个请求更新一个人的名字,例如,如果你调用它一次或 100 次,这个人的名字仍然是一样的,所以它是幂等的。

POST 是最灵活的动词。如果您启动的进程不安全或幂等(或者即使它们是),您可以使用 POST,它不能保证任何有关安全或幂等的内容。缺点是:

  • 如果在 GET 在语义上更正确时使用 POST,则它与您的请求意图的交流较少,因为 POST 通常意味着您正在发送有效负载。
  • 您只是无法利用 Web 的缓存基础架构使其具有如此高的可扩展性。
  • 关于language-agnostic - 自定义操作应该使用哪个动词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6650857/

    相关文章:

    language-agnostic - 半字节在编程中的使用

    performance - 通过提前计算条件来避免停顿管道

    math - 按位 XOR(异或)是什么意思?

    javascript - 通过使用 JavaScript 访问 Java Endpoint 添加到 mongoDB

    java - 数组类型在 Getmapping 请求中返回 null

    json - 使用 JSON 负载或常规 POST 参数创建资源是否更符合 REST 风格?

    math - float 学有问题吗?

    security - 我在哪里可以了解经过验证的共享加密 key 的方法?

    node.js - REST API 端点命名

    java - 如何在 Java ReSTLet 中访问请求的 header 值?