我正在设计API并解决了一些问题,或者更多关于设计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,因为我已经从响应中了解了它们。
第二种方法看起来更好,因为我知道预订会有哪个雇主和任务。
不管怎样,我现在必须保留这两条路线。而令人讨厌的部分是关于这样的事情的问题一直在我的脑海中突然出现在分割路线时,其行为几乎与另一条路线相同。
答案 0 :(得分:2)
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通常很棘手,有时(特别是在开始时)需要改变我们的思维方式。