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

时间:2015-03-09 16:32:24

标签: rest jax-rs restful-url restful-architecture

有些时候我在Java中开发了一个只有1个GET资源的Restful服务。它是这样访问的:

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

此GET请求返回所有客户交易。

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

所以,我在我的服务接口createCustomerTransactions中创建了另一个方法,我想将其命名为与我的GET请求相同,但是这个将是这样的POST:

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

我使用Soap-UI对此进行了测试,但它确实有效。我的问题是做Restful的正确方法。可以让GET和POST同时具有相同的url,虽然它们会指向不同的实际方法吗? 我不擅长名字,所以不能提出另一个更好的资源名称。

2 个答案:

答案 0 :(得分:6)

与HTTP一起使用时的Restful取决于资源(URL)并依赖HTTP动词的操作,通常和良好实践使用此动词来识别对您拥有的资源的一些操作:

  • GET检索全部或仅一个资源。
  • POST通常用于创建新资源。
  • 用于更新资源的PUT
  • 删除删除资源

    在启动Restful API之前我们应该做的第一个任务之一是确定哪些是我们需要拥有的资源以及它们的属性。这种方法的第一条规则是使用名词而不是动词,例如人,票,顾客等。

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

GET / tickets - 检索门票列表

GET / tickets / 12 - 检索特定故障单

POST / tickets - 创建新票证

PUT / tickets / 12 - 更新门票#12

PATCH / tickets / 12 - 部分更新机票#12< - 检查这种方法。

DELETE / tickets / 12 - 删除门票#12

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

答案 1 :(得分:1)

是的,你可以。实际上,这是RESTful设计的核心基础之一。它不是crud / RPC,比如createTransaction或fetchTransaction。 HTTP谓词用于指定对资源的操作。