前后端通訊掩驱,必須先確定接口,那么這個(gè)接口要如何確定呢?
隨意階段
一開始也沒(méi)啥規(guī)范標(biāo)準(zhǔn)欧穴,都是根據(jù)自己的習(xí)慣喜歡民逼,系統(tǒng)功能的情況來(lái)制定,基本上是怎么方便怎么來(lái)苔可。
基本的方式是按照“動(dòng)作”來(lái)定義缴挖,比如 addUser、updateUser 這類的焚辅。
RESTful
有個(gè)老外看不下去了映屋,倡導(dǎo)一種統(tǒng)一的接口風(fēng)格。
大體的意思就是同蜻,先定義一種資源棚点,比如用戶,然后定義一組動(dòng)作湾蔓,就是增刪改查瘫析。然后還有一些code建議等等風(fēng)格。
于是就變成了這樣:
【get】user/10 // 獲取用戶
【post】user // 添加用戶
【put】user/10 // 修改用戶
【delete】user/10 // 刪除用戶
話說(shuō)默责,查詢?cè)趺幢硎緛?lái)著贬循?
這種方式看起來(lái)挺好,但是實(shí)踐的時(shí)候就會(huì)遇到各種問(wèn)題桃序,于是你就會(huì)發(fā)現(xiàn)杖虾,原本開會(huì)討論的是功能如何實(shí)現(xiàn),分工如何來(lái)做媒熊,變成了討論怎么起名才能夠符合這種風(fēng)格奇适。
比如用戶登錄,以前可以叫做 login芦鳍,那么現(xiàn)在要如何做呢嚷往?
【get】userOnline // 驗(yàn)證用戶是否登錄
【post】userOnline // 登錄,在線用戶 + 1
【delete】userOnline // 退出柠衅,在線用戶 - 1
好像還可以解決皮仁。
那么如何區(qū)分物理刪除、邏輯刪除呢菲宴?只有一個(gè)【delete】魂贬。
或者說(shuō)不需要區(qū)分了,后端自己決定裙顽?還是一刀切?
還有常見的訂單宣谈,
- 生成訂單
- 未付款/已付款
- 商家發(fā)貨
- 物流運(yùn)輸
- 賣價(jià)收貨
這些狀態(tài)涉及三方:商家愈犹、物流、買家,這個(gè)要如何區(qū)分漩怎?還是說(shuō)統(tǒng)統(tǒng)都用【put】勋颖,然后加參數(shù)識(shí)別?
想想都頭疼勋锤。
還有各種不常見的功能和需求饭玲。為了符合這種風(fēng)格,是不是有點(diǎn)太累了叁执?
GraphQL
這種方式挺好的茄厘,但是有一點(diǎn)沒(méi)弄明白,為啥需要前端提交一個(gè)數(shù)據(jù)結(jié)構(gòu)的說(shuō)明谈宛?
這是不是有點(diǎn)折騰呀次哈,把這種需求說(shuō)明,事先約定好吆录,然后直接在后端保存下來(lái)不香嗎窑滞?
然后制定一個(gè)編號(hào),前端要用的時(shí)候恢筝,直接提交這個(gè)編號(hào)即可哀卫,后端獲得編號(hào),然后加載具體需求撬槽,這樣是不是更便捷此改?
還安全,不用擔(dān)心前端瞎提交結(jié)構(gòu)恢氯。
到底要如何指定接口带斑?
既然都有不足的地方,那么能不能綜合一下勋拟,把優(yōu)點(diǎn)留下勋磕,不足去掉呢?
我們可以大膽嘗試一下:
- 名稱方面不限制名詞還是動(dòng)詞敢靡,合理即可
- 結(jié)構(gòu)說(shuō)明放在后端挂滓,前端提交對(duì)應(yīng)的編號(hào)即可
- 動(dòng)作可以參考使用。
- 其他待定
關(guān)于動(dòng)作
這個(gè)有點(diǎn)糾結(jié)啸胧,可以使用赶站,但是又不想一刀切的使用,如果設(shè)計(jì)成兩類情況纺念,一類情況需要用贝椿,另一類情況不需要用,那么這個(gè)是不是有點(diǎn)混亂陷谱?
其實(shí)烙博,對(duì)于簡(jiǎn)單的增刪改查瑟蜈,這種方式確實(shí)挺簡(jiǎn)潔的,但是復(fù)雜的就不適合了渣窜。
還有就是铺根,似乎不是所有的前端環(huán)境都支持這些個(gè)動(dòng)作,get乔宿、post肯定支持位迂,但是其他的就不一定了。
還有详瑞,前端不僅僅是瀏覽器掂林,還包括各種APP。萬(wàn)一有哪個(gè)環(huán)節(jié)就是不支持蛤虐,怎么辦党饮?
初步設(shè)想
【模塊ID】【動(dòng)作ID】-【名稱】
比如:
【post】10010 - addUser
【post】10020 - updateUser
【get】 10030 - deleteUser/:id
【get】 10040 - getUser/:id
【post】10050 - findUser
模塊
可以基于資源設(shè)置,也可以不用驳庭,總之合理即可-
動(dòng)作
包括且不限于 添加刑顺、修改、刪除饲常、查詢蹲堂。也不限制數(shù)量,可以有多個(gè)修改贝淤、多個(gè)刪除柒竞。
可以做個(gè)約定:- 10-19 表示添加類;
- 20-29 表示修改類播聪;
- 30-39 表示刪除類朽基;
- 40 表示依據(jù)ID獲取一條記錄
- 50 表示查詢和分頁(yè)
這樣數(shù)量就不受限制了。
名稱
這個(gè)主要是為了可讀性离陶,其實(shí)可以不要稼虎。
如果去掉這個(gè)名稱的話也是可以運(yùn)行了,只是看一堆數(shù)字招刨,不知道是干啥的可讀性比較差霎俩,有了這個(gè)名稱就一目了然了。method
只需要get和post沉眶,其他的可以支持打却,但是不起作用。
其實(shí)動(dòng)作ID和這個(gè) method 有些類似谎倔,區(qū)別在于柳击,我可以隨意定義動(dòng)作ID,沒(méi)有限制片习。而 method 有各種限制和制約腻暮。
這樣應(yīng)該差不多了彤守。