[英]How best to design a REST API with multiple filters?
作為一個個人編程項目,我正在抓取我的大學的課程目錄,並將數據作為REST API提供。 我已經成功抓取了所有數據並將其存儲在數據庫中,現在正在使用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
和bycollegeandinstructor
,他會在自己的末端進行過濾。
選項3
用戶將JSON字符串傳遞給我,我使用它來獲取過濾條件
example.com/api/getcourses/<jsonstring>
jsonstring =
{
instructor:<instructorcode>,
college:<collegecode>,
...and so on
}
我想代替Json字符串,我可能還需要一個POST數組,但這對使用者來說似乎是不明智的,因為他正在獲取數據。
還是有另一種我不知道的方法? 如果第三個選項是最好的選擇,那么您能否提供一個簡短的摘要來最好地基於可能具有可變數量值的JSOn字符串准備SQL查詢?
為了擴展JF的答案,聽起來好像您擁有一個資源,即課程集,該資源位於URI上:
/courses
通常使用查詢參數過濾單個資源來完成對該資源的過濾,例如:
/courses?college=123&instructor=321
這樣,您可以避免所有可能的排列導致資源大量擴散的問題。
從根本上講:只有一種資源,可以根據需要進行過濾。
GET example.com/courses?college=<collegecode>&instructor=<instructorcode>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.