为啥 REST API 方法名称很重要?因为我可以使用这些方法中的任何一种来执行 CRUD 操作

Posted

技术标签:

【中文标题】为啥 REST API 方法名称很重要?因为我可以使用这些方法中的任何一种来执行 CRUD 操作【英文标题】:Why REST API method name important? Because I can use any of those method to perform CRUD operation为什么 REST API 方法名称很重要?因为我可以使用这些方法中的任何一种来执行 CRUD 操作 【发布时间】:2017-11-05 11:20:49 【问题描述】:

在 REST 中,完整 API 有一些方法名称,例如(GET、PUT、POST 等),用于某些特定操作(CRUD) 但是我可以使用任何方法执行任何操作

数据库操作示例:

    我可以使用 GET 创建或插入新文档或删除或更新 方法。

    我可以使用 POST 方法发布或更新或删除。

    我可以使用 PUT 方法删除或更新或删除。

    我可以使用任何一种方法来执行 DB (CRUD) 操作

那么,为什么需要这个方法来指定我们何时调用任何 REST 完整 API?

【问题讨论】:

不清楚你在问什么。 如果你能做到,那显然说明服务器做得很差。在 REST 中,每个方法,即使发送到同一个 URL,都应该在服务器上触发不同的操作 阅读此处***.com/questions/107390/…,这是一个非常深奥的问题,基于了解您提出请求时发生的情况 @Nhor 你能向我解释为什么以及如何?这对我很有帮助 有点困惑为什么这被否决了。对我来说,这听起来像是一个诚实的问题,而且答案很好。 【参考方案1】:

这是一个基于 HTTP 标准的约定。 REST 建立在约定优于配置范式之上。也就是说,一组约定避免了很多样板和配置。

例如,HTTP 1.1 standard 说:

GET: GET 方法意味着检索由 Request-URI 标识的任何信息(以实体的形式)。如果 Request-URI 指的是数据生成过程,则生成的数据应作为响应中的实体返回,而不是过程的源文本,除非该文本恰好是过程的输出 em>

POST:POST 方法用于请求源服务器接受请求中包含的实体作为请求行中的请求 URI 标识的资源的新下级 [ ...].

...等等。

【讨论】:

【参考方案2】:

要扩展 Matías 的答案,您必须考虑允许消费者使用他们想要的任何动词调用您的 API 的后果。

首先,如果您永远不知道会发生什么操作,那么您的实现将会更加复杂。例如,如果有人可以使用 GET 更新资源,您如何区分查询和更新?答案是:实现的额外(不必要的)复杂性。

其次,从性能和可扩展性的角度来看会产生影响。 GET 允许轻松缓存资源表示,因为它具有幂等性——这是预期的约定。由于不明确哪些动词做什么,您会更难利用缓存等策略,这会使您的 API 更难扩展。

第三,它使消费者的事情变得更加复杂。 HTTP 的基于约定的方法被广泛理解。使用不遵循该约定的 API(尤其是自标为使用 HTTP/REST 的 API)会增加集成成本。

【讨论】:

以上是关于为啥 REST API 方法名称很重要?因为我可以使用这些方法中的任何一种来执行 CRUD 操作的主要内容,如果未能解决你的问题,请参考以下文章

GRPC 与 REST 有何不同?

为啥我从 google drive rest api 得到服务器回复被禁止?

REST API 版本控制 - 为啥不对模型进行版本控制

为啥从 Google 的 AJAX 库 API 加载 JS 框架很重要?

为啥我的 REST API 客户端需要 JSONP 请求?

TFS Rest API - 通过测试用例名称或标题获取测试用例