設(shè)計(jì)rest接口,對(duì)于修改(update,add,delete)操作,網(wǎng)上有說(shuō)應(yīng)該將修改后的結(jié)果返回調(diào)用方,調(diào)用方就可以直接利用這個(gè)修改后的結(jié)果。那么這個(gè)返回結(jié)果是將修改后的整個(gè)實(shí)體(比如User)返回,還是返回一個(gè)主鍵id。
問(wèn)題1:
①如果返回一個(gè)主鍵id。
由于update和delete的id本來(lái)就是從調(diào)用端傳過(guò)來(lái),因此不需要返回。而add時(shí)id是后臺(tái)生成的,所以需要返回給調(diào)用者。這樣的話,即使封裝了統(tǒng)一返回對(duì)象,感覺(jué)API的返回json還是不太統(tǒng)一。
②如果返回實(shí)體。
豈不是一個(gè)修改操作的api就要操作數(shù)據(jù)庫(kù)兩次(一次修改,一次查詢)
請(qǐng)問(wèn)各位大大都是如何設(shè)計(jì)rest API的呢?有沒(méi)有代碼分享一下?謝謝了!
你好,Restful API是一種設(shè)計(jì)風(fēng)格,并不是強(qiáng)制的標(biāo)準(zhǔn)
我們可以對(duì)比一下傳統(tǒng)與其的寫法
傳統(tǒng)寫法:
查詢 /user/query?name=tom GET
詳情 /user/getInfo?id=1 GET
創(chuàng)建 /user/create?name=tom GET
修改 /user/update?id=1&name=jerry POST
刪除 /user/delete?id=1 GET
RESTful寫法
查詢 /user?name=tom GET
詳情 /user/1 GET
創(chuàng)建 /user POST
修改 /user/1 PUT
刪除 /user/1 DELETE
關(guān)于Restful API的幾點(diǎn)說(shuō)法
1、用URL描述資源
2、使用HTTP方法描述行為,使用HTTP狀態(tài)碼來(lái)表示不同的結(jié)果
3、使用json交互數(shù)據(jù)
4、RESTful只是一種風(fēng)格,并不是強(qiáng)制的標(biāo)準(zhǔn)
官方也有一個(gè)模型:
Level 0 :使用Http作為傳輸方式
Level 1 :引入資源概念,每個(gè)資源都有對(duì)應(yīng)的URL
Level 2 :使用HTTP方法進(jìn)行不同的操作,使用HTTP狀態(tài)碼來(lái)表示不同的結(jié)果
Level 3 :使用超媒體,在資源的表達(dá)中包含了鏈接信息
類似SpringMVC中開發(fā)Restful API,一個(gè)查詢請(qǐng)求:
——編寫針對(duì)RestfulAPI的測(cè)試用例
——使用注解聲明RestfulAPI
——在Restful API中傳遞參數(shù)
常用注解
——@RestController 標(biāo)明此Controller提供RestAPI
——@RequestMapping及其變體,映射http請(qǐng)求url到j(luò)ava方法
——@RequestParam映射請(qǐng)求參數(shù)到j(luò)ava方法的參數(shù)
——@PageableDefault指定分頁(yè)參數(shù)默認(rèn)值
而對(duì)于具體返回什么,或者獲取什么,更多的時(shí)候要根據(jù)業(yè)務(wù)的重點(diǎn)來(lái)設(shè)計(jì)。
在執(zhí)行crud之前你肯定要在數(shù)據(jù)庫(kù)里面執(zhí)行一次查詢返回,確定該實(shí)體是否已經(jīng)存在,這是一次查詢,如果不存在直接返回錯(cuò)誤信息,如果GET返回該實(shí)體,如果是put,首先驗(yàn)證你傳過(guò)來(lái)的data是不是符合格式的,如果驗(yàn)證通過(guò)你就用你驗(yàn)證后的數(shù)據(jù)來(lái)更新改實(shí)體,然后對(duì)改實(shí)體進(jìn)行save操作,成功存進(jìn)數(shù)據(jù)庫(kù),返回改更新后的實(shí)體,不需要再次查詢,所以去掉第一次的驗(yàn)證操作需要查詢數(shù)據(jù)庫(kù) 后面只需要操作一次數(shù)據(jù)庫(kù)
| 操作 | 請(qǐng)求方法/URI | 響應(yīng)狀態(tài)碼 | 響應(yīng)數(shù)據(jù) |
|---|---|---|---|
| 創(chuàng)建 | POST /users | 201 | 用戶實(shí)體 |
| 更新 | PUT /users/1 | 200 | 用戶實(shí)體 |
| 刪除 | DELETE /users/1 | 204 | 無(wú) |
| 查詢 | GET /users | 200 | 用戶列表 |
| 查詢 | GET /users/1 | 200 | 用戶實(shí)體 |
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。