春季如何编写复合REST方法和动词REST方法?

时间:2018-06-27 10:58:31

标签: rest spring-mvc spring-restcontroller spring-rest

例如,我有带方法的UserController:

GET /api/users -- get all users
GET /api/users/1 -- get concrete users
POST /api/users -- create concrete users
PUT /api/users/3 -- update concrete users

这是经典的REST。但是我有两个问题。

  1. 该方法应如何在REST架构中进行付款?

像这样吗? -POST /api/payments/pay-但是薪水是动词

或用户登录-POST /api/users/3/login ???

  1. 我有2个控制器-MarketControllerCarsController,其方法如下:

GET /api/markets/3-获取ID = 3的市场

GET /api/cars/1-取得ID = 1的汽车

客户尝试从混凝土市场购买混凝土车:

GET /api/markets/3/cars/1-我应该在哪个控制器中编写?

1 个答案:

答案 0 :(得分:2)

问题#1的答案

那是一个误解REST并不关心URI设计。但是,一旦REST体系结构样式的中心部分是resource,就可以确定标识资源的URI包含名词而不是动词

为避免动词,您可以仅使用/api/payments。该URL的POST将使用请求有效内容中发送的表示形式创建付款。

例如,对于身份验证资源,您可以使用/api/auth

问题#2的答案

这似乎是MarketController的一种方法,已映射到/markets

但是请记住,您的控制器不应执行任何业务逻辑。相反,它应该委托给服务。