api接口怎么写_面向声明式API编程(DAP)
DAP是Mars-java 最近提出的一個(gè)新的開(kāi)發(fā)方式,全稱 Declarative API Programming, 提倡后端為一個(gè)獨(dú)立的整體,不應(yīng)該是為前端服務(wù)的,所以當(dāng)前端需要接口的時(shí)候,只需要聲明一個(gè)API給他,而不需要專門(mén)開(kāi)發(fā)一個(gè)Controller出來(lái)
面向聲明式API編程(DAP)
按照傳統(tǒng)的開(kāi)發(fā)方式,如果要開(kāi)發(fā)一個(gè)后端接口,需要分為以下三步
但是,我們編寫(xiě)一個(gè)接口,重點(diǎn)應(yīng)該是放在業(yè)務(wù)邏輯上的,也就是說(shuō) 我們的關(guān)注點(diǎn)應(yīng)該在第二步,但是通常第一步和第三步的重復(fù)工作量讓我們感到窒息,所以我梳理了一下,制定了一個(gè)新玩法,這套新玩法就叫聲明式API
所以我們是這樣玩的
編寫(xiě)業(yè)務(wù)邏輯
@MarsBean("testService") public class TestService {要返回的數(shù)據(jù)類(lèi)型 selectListForName(參數(shù)1, 參數(shù)2, 參數(shù)3, 參數(shù)4){// 第一步 根據(jù)testDTO里的參數(shù)從xx表查詢需要的數(shù)據(jù)// 第二步 根據(jù)查出來(lái)的數(shù)據(jù),去操作xx2表// 第三步 對(duì)前兩步的結(jié)果匯總,進(jìn)行xxx操作return 數(shù)據(jù)(直接返回即可,會(huì)自動(dòng)變成json);} }聲明一個(gè)API接口
@MarsApi public interface TestApi {Object selectList(TestVO testVO); }將api與業(yè)務(wù)邏輯關(guān)聯(lián)
@MarsApi public interface TestApi {@MarsReference(beanName = "testService",refName = "selectListForName")Object selectList(TestVO testVO); }對(duì),你沒(méi)看錯(cuò),API的方法和他引用的那個(gè)方法,參數(shù)列表可以不一樣, 框架會(huì)自動(dòng)把API的參數(shù)的值賦值到引用的那個(gè)方法的參數(shù)列表
引用的方法甚至可以無(wú)參,參數(shù)目前只支持自定義對(duì)象和Map
這套思想的核心是,把后端看作是一個(gè)獨(dú)立個(gè)體,并不是為服務(wù)前端而存在的, 后端就寫(xiě)后端的業(yè)務(wù)邏輯好了,如果前端需要數(shù)據(jù),那我們就開(kāi)個(gè)門(mén)給他
這么做的好處,還可以散藕
- 通過(guò)更換MarsReference的配置,可以關(guān)聯(lián)到不同的業(yè)務(wù)邏輯
- 如果前端不需要這個(gè)接口了,直接無(wú)腦刪就好了,因?yàn)檫@只是一個(gè)抽象方法
- 后端專注業(yè)務(wù)邏輯就好了,不需要考慮跟前端互動(dòng),前端需要的時(shí)候開(kāi)個(gè)門(mén)就好了
接下來(lái)怎么做
看到這里,大家肯定會(huì)有疑問(wèn),前端要怎么調(diào)用api,后端怎么操作數(shù)據(jù)庫(kù)? 這個(gè)就需要你們動(dòng)動(dòng)手指,去我的官網(wǎng)一探究竟
還可以做什么
首先聲明式API是對(duì)前后端交互方式的一次變革,省去了Controller。
其實(shí)這種風(fēng)格在微服務(wù)里很常見(jiàn),比如Dubbo的api, 既然微服務(wù)接口可以用interface來(lái)提供對(duì)外的服務(wù),那么我們也可以把它用到http接口上吧。
很多java初學(xué)者在剛接觸分層架構(gòu)的時(shí)候,肯定有過(guò)疑問(wèn),Service是干嘛的, 因?yàn)樵谀承﹫?chǎng)景下,這層跟DAO是很像的,而以后,他們?cè)僖膊粫?huì)有這種疑問(wèn)了
除了聲明式API,我們還提供以下功能
實(shí)體類(lèi)的爭(zhēng)議
本框架是強(qiáng)制要求,DAO用來(lái)接數(shù)據(jù)的實(shí)體類(lèi),字段名必須和表的字段名一致的, 這樣雖然提高了耦合,但是減少了映射的配置,并且實(shí)際情況是,如果你用別的框架, 你改了數(shù)據(jù)庫(kù)的字段名,你一樣要去改配置映射的那部分代碼,所以用映射來(lái)降低耦合并沒(méi)起到什么作用
不過(guò)爭(zhēng)議不再這一點(diǎn)上,而在于命名規(guī)范上,因?yàn)閿?shù)據(jù)庫(kù)的字段名通常是下劃線分割單詞, 跟java的變量名常用的駝峰有點(diǎn)出入, 首先可以確定的是JVM官方對(duì)變量名的命名規(guī)范是支持用下劃線的, 并且常量都是這么做得,從沒(méi)出現(xiàn)過(guò)風(fēng)險(xiǎn)。
所以我總結(jié)了以下觀點(diǎn)
所以,我們?yōu)槭裁捶且怀刹蛔兊陌炎约宏P(guān)在舊籠子里?
如果實(shí)在無(wú)法接受,我們也提供了解決方案,那就是用Map,然后在DAO層手工轉(zhuǎn)換成你的實(shí)體類(lèi)。
官網(wǎng)
http://mars-framework.com
收藏 (1) 分享
總結(jié)
以上是生活随笔為你收集整理的api接口怎么写_面向声明式API编程(DAP)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python基础之语句_P009 pyt
- 下一篇: mysql 导入主键冲突_MySQL 处