作爲一個個人編程項目,我正在努力挖掘我的大學課程目錄並將數據作爲REST API提供。我已經成功地將所有數據都存入數據庫,並且現在正在處理API。教練,大學,學分,時間,日期等如何最好地使用多個過濾器設計REST API?
什麼是提供在這種情況下的API的最佳方式:
課程可以在許多標準的基礎上進行過濾?
選項1
提供大量的網址,如
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
example.com/api/bycollegeandinstructor/<collegecode>/<instructorcode>
...and so on
我需要對所有排列的URL。這對我和API消費者來說都非常麻煩,而且非常乾淨。
選項2
只有像的主要選項提供的API:
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
如果消費者想要bycollegeandinstructor
,他做了他最終的過濾。
選項3
用戶傳遞一個JSON字符串給我,我用它來獲取過濾標準
example.com/api/getcourses/<jsonstring>
jsonstring =
{
instructor:<instructorcode>,
college:<collegecode>,
...and so on
}
我想,而不是JSON字符串,我也需要POST數組,但是這對於消費者來說似乎不具有原始性,因爲他正在獲取數據。
或者還有另一種方法做到這一點我不知道?如果第三個選項是最佳選項,那麼您能否提供一個簡短的總結,以便根據可能具有可變數目值的JSOn字符串來準備SQL查詢?
Thanls。在我讀到你的回答之前,我沒有考慮資源方面的問題 – xbonez 2012-01-10 17:02:34
從技術上講,這些仍然是不同的資源。你並不真正用這種方式來避免排列問題。事實上,通過允許college = 123&instructor = 321返回與instructor = 321&college = 123相同的響應,您可以稍微增加這些問題。由於這種爆炸,許多緩存不會緩存具有查詢參數的響應,除非您明確地配置它們。 因此,如果您可以確定人們提出的請求中的一些常見模式,我通常會推薦選項2。 – fumanchu 2012-01-11 15:51:30
@fumanchu關於緩存忽略對具有查詢參數的請求的響應很有趣,我沒有意識到這一點。謝謝。 – Pete 2012-01-11 19:33:34