2015-11-13 17 views
5

我在建模域中資源時遇到了一些問題,以適應REST API。這個例子顯然是人爲設計和簡化的,但它說明了我卡住的兩點。REST API中的資源建模(時間序列數據和多個標識符存在問題)

我知道:

  1. 用戶有寵物
  2. 的寵物有多個名字 - 一個由家庭中的每個成員
  3. 的寵物有:出生日期,死亡日期和一個類型(狗,貓...)
  4. 我需要能夠基於日期進行查詢(實際上日期,或日期範圍是強制性的,當問關於寵物)。例如:告訴我現在有什麼寵物;告訴我奶奶說我們5年前到3年前有什麼寵物。

我該如何處理日期?

a。在查詢字符串中:/ pets/dogs/d123?from = 10102010 & to = 10102015(但據我所知,查詢字符串主要用於可選參數;日期/日期範圍是需要的。作爲默認設置,如果查詢字符串中沒有任何內容,對此有何看法?)

b。在路徑的某個地方。之前/寵物?當我在日期和日期範圍之間切換時,這看起來有點奇怪。而我的真實路徑已經很長了

我應該如何處理多個名字?

我看到它的方式,我必須指定誰使用我正在搜索的名稱。

/pets/dogs/rex - >我想知道一隻叫雷克斯的狗(由誰,我還是奶奶?)。但是奶奶在哪裏?

我見過一些人說不要擔心網址,並使用超媒體但是我理解的方式(這可能是我錯了)是你必須始終從根開始(這裏/寵物),並按照回覆中提供的鏈接。然後我更加堅持下去(因爲日期確實是一個很長的可能性列表)。

任何幫助表示讚賞。謝謝

回答

1

在這種情況下可能有用的是一種資源查詢語言。它不知道您使用的技術堆棧,但可以找到一個JavaScript示例here

  1. 絕對不要在路徑中放置任何日期。這被認爲是一種糟糕的風格,用戶可能會感到困惑,因爲他們中的大多數人可能不習慣這種奇怪的設計,並且根本不知道如何使用API​​。通過查詢字符串傳遞日期非常好。您可以引入默認狀態 - 這不是一個壞主意 - 但您需要在響應中描述狀態(例如,包括日期)。當請求中缺少日期範圍時,您還可以返回400 Bad Request狀態碼。就個人而言,我會通過查詢字符串進入默認狀態和日期。

  2. 在這樣的情況。這使我心中的唯一一件事就是反向的關係,所以這將是:

    /users/grandma/dogs/rex 
    

    或:

    ​​
  3. 什麼也可以做將放棄REST規則並引入新的端點/dogs/filter,該端點將接受POST請求以及正文中的過濾器。通過這種方式,描述整個查詢以及發送它會容易得多。正如我所提到的,這不是REST風格的方法,但在這種情況下似乎是合理的。這種過濾也可以使用純REST設計進行建模 - 過濾器也將成爲一種資源。

超媒體似乎不是在這個特定場景中走的路 - 說實話我不太喜歡超媒體設計。

+1

感謝您的回答。我正在看鏈接。第2點(扭轉關係)並沒有發生在我身上,所以即使我在這種情況下不這樣做,記住這是一件有趣的事情。 –

+0

@AnaF,當然。讓我知道你的想法。 – Opal

0

如果您願意,可以使用查詢字符串,對此沒有限制。該路徑包含分層結構,而查詢包含非分層結構部分,但這也不是強制性的。

通過查詢,我建議您考慮一下參數和響應內容。例如:

我想了解狗狗叫雷克斯

】這個params是(由何人,我還是奶奶?):rexgrandma,你在響應需要dog秒。

因此,超鏈接將類似於GET /pets/dogs/?owner=grandma&name=rexGET /pets/dogs/owner:grandma/name:rex/等等。如果您將某些RDF元數據附加到超鏈接和參數例如URI結構,那麼URI結構並不重要。你可以使用https://schema.org/AnimalShelter詞彙。 OFC。這不是最合適的,因爲它不涉及多個人給出的多個名字,但如果您決定使用RDF,那麼創建自己的詞彙是一個好的開始。