如何在spring中编写复合REST方法和动词的REST方法?

how to write compound REST methods, and REST methods of verbs in spring?

例如我有 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 - 但是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 的答案

这是一个 误解REST doesn't care about the URI design. However, once the central piece of the REST architectural style is the resource,识别 资源 的 URI 包含 名词而不是动词.

为了避免动词,您可以只使用 /api/paymentsPOST 到 URL 将创建一个付款,其中包含在请求负载中发送的表示。

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

问题 #2 的答案

好像是MarketController的方法,映射到/markets

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