研究一下別人的網址
我查了三個賣書的平台,搜尋條件如下
參數 | 值 |
---|---|
關鍵字 | ux |
分類 | 中文書 |
價格 | 20 ~ 500 |
排列順序 | 精準度 |
- https://www.kingstone.com.tw/new/search/search?q=Ux&zone=%E4%B8%AD%E6%96%87%E6%9B%B8&pr_low=20&pr_most=500&sort=score&dis=pic
- https://search.books.com.tw/search/query/cat/1/key/ux/qsub/001/adv_price_min/20/adv_price_max/500/sort/1
- http://www.eslite.com/search_BW.aspx?query=ux&category=156&categoryLV=0
(這一家有些用post方式去送,所以排列順序以及價格沒有顯示在網址變數)
查詢可以用POST嗎?
我個人是覺得不適合!不管你的程式邏輯要怎麼設計,篩選、排序的方式,我建議用GET,最大的好處就是可以把網址分享給別人,就像我把網址貼來這裡,點進去就可以直接看到我下的條件有哪些,如果用POST 無法分享那些篩選條件!
分析別人怎麼做
參數 | 變數 | 備註 |
---|---|---|
關鍵字 | q 或 key | |
分類 | zone 或 qsub 或 category | 最後一個網址還有 categoryLV 應該是用來辨識現在是在哪一個層級的分類(類所無限階層的那種設計,分類下面還可以自由新增子分類階層數量) |
價格最低 | pr_low 或 adv_price_min | |
價格最高 | pr_most 或 adv_price_max | |
排列順序 | sort | 排列順序都有特定模式 (精準度、出版日期新->舊...) 應該就是這類型的系統最常用的方式 |
基本上它們都有特定方式來排序以及篩選,上面表格整理出來的變數名稱,也是參考而已,可以多看看別人怎麼設計,未來可以應用在自己的專案上。
符合業主的需求,有分類可以篩選中文書、英文書... 價格最低值、最高值,需求有到了就可以,以實際面來看,功能實用,若不符合需求什麼都不是,也完全沒有價值,而且簡單易用也是一個優勢。
但因為我希望做到自由度高一點的功能,所以篩選的部分。 讓請求客戶端可以自己決定,例如 name 包含 黑 ,地區包含台北兩個字之類的讓請求者自行設定篩選條件,暫時不對系統做客製化的邏輯設計。
撰寫程式
昨天已製作完成的分頁及標記方式!加入對欄位的篩選。
app/Http/Controllers/AnimalController.php
public function index(Request $request)
{
// 設定預設值
$marker = isset($request->marker) ? $request->marker : 1;
$limit = isset($request->limit) ? $request->limit : 10;
$query = Animal::query();
// 篩選欄位條件
if (isset($request->filters)) {
$filters = explode(',', $request->filters);
foreach ($filters as $key => $filter) {
list($criteria, $value) = explode(':', $filter);
$query->where($criteria, 'like', "%$value%");
}
}
$animals = $query->where('id', '>=', $marker)->paginate($limit);
return response($animals, Response::HTTP_OK);
}
利用 filters
變數搭配 欄位名稱:篩選關鍵字 這樣的格式做篩選
/api/animal?filters=name:黑
找到名稱有「黑」的動物資料
/api/animal?filters=name:黑,personality:可愛
找到名稱有「黑」的動物資料 並且 personality欄位 有「可愛」兩個字
還有很多設計方式!可以多看看,找到一個符合需求的方法