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 通常很棘手,有时(尤其是在开始时)需要改变我们的思维方式。