2016-01-21 61 views
0

我設計了一個API,並解決了一些問題,或者更像是有關設計API的良好/最佳實踐的問題。rest 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,因爲我已經從響應中瞭解他們。

第二種方法看起來更好,因爲我知道預訂會有哪些僱主和任務。

無論哪種方式,我現在必須保持這2條路線。令人討厭的部分是,當分裂與另一個行爲幾乎相同的路線時,關於這樣的事情的問題一直在我腦海中爆發。

回答

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 a資源:

  • 獲取預訂(或檢查是否存在)

    GET /bookings/{bookingId} 
    
  • 創建預訂:

    POST /bookings/ { "employerId": 1; "missionId": 2} 
    
  • 取消預訂

    DELETE /bookings/{bookingId} 
    

設計REST API,通常是棘手的,有時(尤其是開頭)需要改變我們的想法。

祝你好運!

+0

謝謝! 我想我會用數字dos開始。如果所有事情都下降到地獄,就將預訂用作資源。 – mertje