get 和 post rest api 可以使用相同的资源名称吗

Is it okay to use same resource name for both get and post rest api

前段时间我在 Java 开发了一个 Restful 服务,只有 1 个 GET 资源。它是这样访问的:

获取http://localhost:8080/my-project/customers/transactions

此 GET 请求 returns 所有客户交易。

现在,我有另一个项目请求,他们希望在同一数据库的不同模式中插入客户交易。我认为与其创建其他服务,不如我可以增强此服务,因为底层数据库是相同的,而且它是关于客户交易的。

因此,我在我的服务接口 createCustomerTransactions 中创建了另一个方法,我想将其命名为与我的 GET 请求相同的名称,但这个方法将 POST 如下所示:

POST http://localhost:8080/my-project/customers/transactions

我使用 Soap-UI 对此进行了测试并且它有效。我的问题是这样做的正确方法 Restful。让 GET 和 POST 在内部具有相同的 url 是否可以,尽管它们将指向不同的实际方法? 我不擅长命名,所以无法为资源想出另一个更好的名字。

TL;DR 是的,你可以,这实际上是一个很好的做法。

原因如下:

Restful 与 HTTP 一起使用时取决于资源(URL's)并依赖 HTTP 动词的操作,使用此动词来识别某些操作是常见且良好的做法您拥有的资源:

  • GET 获取所有资源或仅获取一个资源。

  • POST 通常用于创建新资源。

  • PUT 用于更新资源

  • DELETE 删除一个资源

    在开始 Restful API 之前,我们应该做的首要任务之一是确定哪些是我们需要拥有的资源以及它们的属性。这种方法的第一条规则是使用名词而不是动词,例如 person、ticket、customer 等。

定义资源后,您需要确定适用于它们的操作以及这些操作将如何映射到您的 API。 RESTful 原则提供了使用映射如下的 HTTP 方法来处理 CRUD 操作的策略。

GET /tickets - 检索票证列表

GET /tickets/12 - 检索特定票证

POST /tickets - 创建新票

PUT /tickets/12 - 更新工单#12

PATCH /tickets/12 - 部分更新工单 #12 <-- 检查此方法。

DELETE /tickets/12 - 删除工单#12

以上内容取决于防火墙配置,但将以上内容视为 API 设计原则的建议。

是的,你可以。事实上,这是 RESTful 设计的核心基础之一。它不像 crud/RPC 那样,即 createTransaction 或 fetchTransaction。 HTTP 动词用于指定对资源的操作。