如何在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。但我有两个问题。
- 在 REST 架构中进行支付的方法应该是什么样的?
像这样? - POST /api/payments/pay
- 但是pay是动词
或用户登录 - POST /api/users/3/login
???
- 我有 2 个控制器 -
MarketController
和 CarsController
方法:
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/payments
。 POST
到 URL 将创建一个付款,其中包含在请求负载中发送的表示。
对于身份验证资源,您可以使用 /api/auth
,例如。
问题 #2 的答案
好像是MarketController
的方法,映射到/markets
。
但请记住,您的控制器不应执行任何业务逻辑。相反,它应该委托给服务。
例如我有 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。但我有两个问题。
- 在 REST 架构中进行支付的方法应该是什么样的?
像这样? - POST /api/payments/pay
- 但是pay是动词
或用户登录 - POST /api/users/3/login
???
- 我有 2 个控制器 -
MarketController
和CarsController
方法:
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/payments
。 POST
到 URL 将创建一个付款,其中包含在请求负载中发送的表示。
对于身份验证资源,您可以使用 /api/auth
,例如。
问题 #2 的答案
好像是MarketController
的方法,映射到/markets
。
但请记住,您的控制器不应执行任何业务逻辑。相反,它应该委托给服务。