簡體   English   中英

REST路線/輸入設計

[英]REST Route/Input Design

我有一個Restaurant許多Menu ,一個Menu許多Category ,一個Category的許多Item 我一直在努力尋找為這些模型布置路線的最佳方法。 這是我看到的選項:

  1. 我可以展平路線,僅需要父模型的ID。

    • 這使路線變得簡單,但是每次我想對模型做任何事情時都需要一個額外的輸入/參數。
    • GET /menus?restaurant_id=X
    • POST /menus?restaurant_id=X&name=foo&description=bar
  2. 我可以將所有路線嵌套在給定的父模型中。

    • 這使路線變長,但不需要任何額外的輸入/參數
    • 這會為某些較低級別的模型添加不必要的信息(訪問類別/項目時無需直接了解餐廳)
    • GET /restaurant/:restaurant_id/menus
    • POST /restaurant/:restaurant_id/menus?name=foo&description=bar
    • GET /restaurant/:restaurant_id/menus/:menu_id/categories/:category_id/items

有一個好的標准可供選擇嗎?

我將使用您的最后一個示例-為了盡量減少可讀性和緩存/代理問題,我嘗試將URL參數保持在最低限度。

我會這樣設計:

菜單

  • POST /menus?restaurant_id=123&name=foo&description=bar
  • GET /menus?id=890 // specific menu
  • GET /menus?/restaurant_id=123 // many menus

物品

  • POST /items?category_id=594&name=milkshake&description=vanilla

更一般地

  • POST /<model_of_interest>?<parent_of_model_of_interest>&<other>&<parameters>
  • GET /<model_of_interest>?<model_of_interest_id>

如您所見,這將適用於您最頂部和最底部的型號,而無需任何其他操作。 然后驗證請求並使用您的模型強制執行訪問,鑒於要使用的“僅一個父級”方案,該模型應該很容易抽象(即,通過傳遞&category_id=345創建項目路線,您可以輕松構造對象的其余部分並知道可以確定345只能屬於menu_id=123 ,甚至只能屬於restaurant_id=... )。

這具有以下優點:

  • 不提供父模型已經擁有的信息
  • 允許特定選擇“向下”的單個對象(例如,給我id=338
  • 允許向下進行通用選擇(例如,為我提供category_id=123所有項目)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM