不久前,我用Java开发了一个Restful服务,只有一个GET资源。它是这样访问的:
获取http://localhost:8080/my-project/customers/transactions
此GET请求返回所有客户事务。
现在,我有另一个项目请求,他们希望在同一数据库中的不同模式中插入客户事务。我想我可以增强这个服务,而不是创建其他服务,因为底层数据库是相同的,而且它是关于客户事务的。
因此,我在我的服务接口createCustomerTransactions
中创建了另一个方法,我正在考虑将其命名为与我的GET请求相同的名称,但这个方法将是这样的POST:
发布http://localhost:8080/my-project/customers/transactions
我使用Soap-UI对其进行了测试,它可以正常工作。我的问题是这是做Restful的正确方式。尽管GET和POST指向不同的实际方法,但它们在内部拥有相同的url,这样可以吗?我不擅长命名,所以不能为资源想出另一个更好的名字。
发布于 2015-03-09 17:06:15
是的,你可以,这实际上是一个很好的实践。
原因如下:
Restful当与HTTP一起使用时,依赖于资源(URL)中的资源并依赖于HTTP谓词的操作,这是一种常见且良好的做法,它使用此谓词来标识对您拥有的资源的一些操作:
在启动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设计原则的建议。
发布于 2015-03-10 04:57:33
是的你可以。事实上,这是RESTful设计的核心基础之一。它不是像createTransaction或fetchTransaction那样的crud/RPC。HTTP谓词用于指定对资源的操作。
https://stackoverflow.com/questions/28947132
复制