【发布时间】:2021-05-11 01:28:41
【问题描述】:
我有一个简单的 API 来处理房间中的实际座位分配。
每个座位都是以下资源:
{
"person_name": "Jermie" // Person sitting in the seat
"available": False // Seat is currently allocated
"seat_id": 1111 // Unique seat identifier
}
- 收到所有席位将转换为
GET /api/seats。 - 接收座位状态(谁坐在上面)-
GET /api/seats/<seat_id> - 创建新席位 -
POST /api/seat。 - 删除席位 -
DELETE /api/seat/<seat_id>。
如何创建一个 REST API 来为用户分配一个空座位?
我可以使用 GET /api/seats?available=True&count=1 返回一个空座位 (1234),并分配它 - PUT /api/seats/1234,正文为 {"available": False, "person_name": Robbie}。
这种方法的问题是我有大量的请求。两个人同时运行搜索空座位,将导致同一个座位被分配两次。
我可以尝试 POST /api/seats/1234/assign 并返回 HTTP 409 CONFLICT(如果已分配),但这会导致发生许多冲突,并且很快,客户端就会不断地相互竞争。
另一个选项是使用POST /api/assignSeat。然而,这种方法不是 RESTful。
这是一个非常简单的问题,我可能不是第一个遇到它的人,但是我在此过程中遇到的“HATEOAS”和许多其他术语实际上并没有给出解决方案。这对我和其他人的理解非常重要。
我是否可以在遵循 REST 原则的同时创建这样的 API?
【问题讨论】: