我最近在研究RESTFUL 風格的api, 但是在研究的程序中, 遇到了一些問題.
比如我要通過id獲取一個用戶的資訊, 我可以這樣設計api
GET [host]:[port]/api/v1/users/{id}后臺的話, 我可以使用一個 @PathVariable 接收
我想獲取全部的用戶,
我可以這樣設計 api
GET [host]:[port]/api/v1/users
那么同時, 我有另一個需求, 我想通過 name 獲取用戶資訊, 我該怎么設計 api 呢?
假如我這么設計 api
GET [host]:[port]/api/v1/users/{name}
或者
GET [host]:[port]/api/v1/users?name={name}
這都是不可以的, 因為 Spring 不允許url重復的,
GET [host]:[port]/api/v1/users/{id}
和
GET [host]:[port]/api/v1/users/{name}
url是相同的, 是不允許出現的.
GET [host]:[port]/api/v1/users?name={name}
和
GET [host]:[port]/api/v1/users
也是相同的
那么問題來了, 我該怎么設計獲取某一欄位等于一個值的api呢?
或者說, 我放棄 Controller 的自動賦值功能, 接收一個 url 所有引數, 獲取內容, 然后進行判斷 再呼叫相應的業務?

這是我看某一大佬設計得api, 那么 像這種 >=、 <=、 =-、 =+、 后臺怎么獲取呢,字串判斷嗎,好像我只會用Controller獲取=的值

uj5u.com熱心網友回復:
就不能換個名稱嗎,這種不要糾結 [host]:[port]/api/v1/username/{name} 第三個指明需要查找得引數key,第四個指定引數值uj5u.com熱心網友回復:
那么 是不是id 和name 可以合并成一個 [host]:[port]/api/v1/{searchkey}/{searchvalue}uj5u.com熱心網友回復:
引數值為什么要放到URL里呢,直接作為引數傳遞豈不快哉兩個介面
GET [host]:[port]/api/v1/users/id
對應 getById(Long id)
GET [host]:[port]/api/v1/users/name
對應 getByName(String name)
uj5u.com熱心網友回復:
這種寫法,假如查詢的欄位多了,Controller 層肯定大段的業務, 這和 servlet 寫法也沒啥區別吧, 我覺得這種不好。
這個寫法應該可以,以前我也從來沒有這么想過,學到了,多謝
uj5u.com熱心網友回復:
這種好

這種 >=、 <=、 =-、 =+、 后臺獲取呢, 大佬有沒有什么想法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/202675.html
標籤:Web 開發
上一篇:身份實名認證 + swagger
