rest api 路径设计题
rest api path design questions
我正在设计 API 并解决了一些问题,或者更像是关于 good/best 设计 API 实践的问题。
我要返回系统中可用的任务,任务与雇主有关。
v1/missions // Returns all available missions.
v1/employer/1/missions // Returns all missions created by an employer.
但是假设 人 现在想预订一个他觉得有趣的任务。
v1/missions/2?booking=true
v1/employer/1/missions/2?booking=true
我可以使用第一种方法,因为它更清晰、更简单。我也不必关心 ID,因为我已经从响应中知道了它们。
第二种方法看起来更好,因为我知道预订的雇主和任务。
无论如何,我现在必须维护这两条路线。令人恼火的是,在拆分行为几乎与另一条行为方式相同的路线时,关于此类问题的问题一直在我脑海中浮现。
嗯,你觉得下面的事情怎么样:
GET /employers/{employerId}/missions/{missionId} Check if an employer has mission booked.
PUT /employers/{employerId}/missions/{missionId} Add a mission to the employer (create a booking)
DELETE /employers/{employerId}/missions/{missionId} Remove a mission from the employer (cancel booking)
或
GET /employers/{employerId}/missions/{missionId}/booked Check if an employer has mission booked.
PUT /employers/{employerId}/missions/{missionId}/booked Put "true" to book. Put "false" to cancel booking.
如果以上不适合您的用例或您的应用程序有更复杂的关系,您可以考虑将 bookings
设为资源:
获取预订(或检查是否存在)
GET /bookings/{bookingId}
创建预订:
POST /bookings/ { "employerId": 1; "missionId": 2}
取消预订
DELETE /bookings/{bookingId}
设计 REST API 通常很棘手,有时(尤其是在开始时)需要改变我们的思维方式。
我正在设计 API 并解决了一些问题,或者更像是关于 good/best 设计 API 实践的问题。
我要返回系统中可用的任务,任务与雇主有关。
v1/missions // Returns all available missions.
v1/employer/1/missions // Returns all missions created by an employer.
但是假设 人 现在想预订一个他觉得有趣的任务。
v1/missions/2?booking=true
v1/employer/1/missions/2?booking=true
我可以使用第一种方法,因为它更清晰、更简单。我也不必关心 ID,因为我已经从响应中知道了它们。
第二种方法看起来更好,因为我知道预订的雇主和任务。
无论如何,我现在必须维护这两条路线。令人恼火的是,在拆分行为几乎与另一条行为方式相同的路线时,关于此类问题的问题一直在我脑海中浮现。
嗯,你觉得下面的事情怎么样:
GET /employers/{employerId}/missions/{missionId} Check if an employer has mission booked.
PUT /employers/{employerId}/missions/{missionId} Add a mission to the employer (create a booking)
DELETE /employers/{employerId}/missions/{missionId} Remove a mission from the employer (cancel booking)
或
GET /employers/{employerId}/missions/{missionId}/booked Check if an employer has mission booked.
PUT /employers/{employerId}/missions/{missionId}/booked Put "true" to book. Put "false" to cancel booking.
如果以上不适合您的用例或您的应用程序有更复杂的关系,您可以考虑将 bookings
设为资源:
获取预订(或检查是否存在)
GET /bookings/{bookingId}
创建预订:
POST /bookings/ { "employerId": 1; "missionId": 2}
取消预订
DELETE /bookings/{bookingId}
设计 REST API 通常很棘手,有时(尤其是在开始时)需要改变我们的思维方式。