天天看點

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

作者:散文随風想

今天介紹我正在用的一款高效靈活開發工具magic-api,順便分享一點工作中使用它的心得

緣起

先說一下我為什麼會使用這個工具?

最近新啟動一個項目,業務并不算複雜,那種典型的管理系統,産品要求支援全局頁面配置化,前端一切相關配置必須通過接口傳回,比如:像查詢下拉框(啟用、禁用)這類簡單的條件,國際化,必須做到全動态配置。

其實隻要人手夠時間夠,這些都沒問題,但問題就在于立項到上線周期就給十幾天,而開發時間滿打滿算不到10來天,時間緊又不給加人,底層程式員的生活真是太難了。

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

不過辦法總比困難多,前同僚老哥給我推薦了這個工具,然後就真香了,哈哈~

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

magic-api 是一個基于Java的接口快速開發架構,編寫接口将通過magic-api提供的UI界面完成,自動映射為HTTP接口,無需定義Controller、Service、Dao、Mapper、XML、VO等Java對象即可完成常見的HTTP API接口開發。

上邊是官方對工具的介紹,但好像還是沒明白它是幹什麼的,接下來咱們示範一下,你就會覺得它很哇塞了

環境

首先pom.xml 引入magic-api核心包magic-api-spring-boot-starter

<dependency>
      <groupId>org.ssssssss</groupId>
      <artifactId>magic-api-spring-boot-starter</artifactId>
      <version>0.7.1</version>
  </dependency>

  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
  </dependency>
           

application.yml 配置更簡單,資料庫(沒資料庫操作可以不寫)和magic-api的基礎資訊

magic-api:
  web: /magic/web # UI請求的界面以及UI服務位址
server:
  port: 9999
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    password: xinzhifu521
    url: jdbc:mysql://47.93.6.5:3306/magic-api
    username: root
    
           

好了~ 到這環境就搭建完成!

在具體示範之前先吐槽一下用Java開發API的缺點,首當其沖的就是啰嗦,尤其是在工期緊,功能需快速疊代的時候,既要嚴格執行開發規範,又不能耽誤工期,即便最簡單的一個API接口,也要寫對應的 Controller、Service、Dao、Mapper、DTO、VO等類,盡管這些基礎編碼有對應的代碼生成器,但維護起來還是相當麻煩,magic-api起到一個很好的輔助作用,少寫了很多代碼。

實踐

直接通路http://127.0.0.1:9999/magic/web打開magic-api可視化界面,看到如下的界面。

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

建立一個分組,其中分組字首為一組API接口的通路根目錄,相當于@Controller("/order")注解。

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

接着在分組中建立接口 order_detail,頁面配置接口的基礎資訊,接口名稱、請求路徑、請求方法、請求參數、請求header等,接口直接return傳回内容

return ‘小富最帥’

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

在頁面通路剛剛建立接口的全路徑 http://127.0.0.1:9999/order/order_detail ,發現已經成功傳回資料。

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

也可以直接拼JSON格式資料直接傳回

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

如果URL傳參 /order_detail/{id},導入request子產品擷取參數

import request;
a = path.id
           

到這一個簡單的API接口就開發完了,而此時我們還未在項目中寫一行代碼

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

但上邊隻是靜态資料,在實際開發中往往要與資料庫打交道,magic-api提供了一些類似于python開發中的子產品化元件,例如引入import db 子產品,直接執行SQL語句會傳回JSON格式資料,省略了很多中間步驟。

萬萬沒想到,Java開發 API 接口可以不用寫 Controller了!

magic-api文法與Java的差異不大,不過更加精簡了一些,隻要寫過Java對它學習成本并不高,比如常用得for循環,也會有普通和lambda多種寫法。

var sum = 0;
var list = [1,2,3,4,5];
for(val in list){
    sum = sum + val;
}

list.each(it => sum+= it + 1)
           

這裡我隻簡單的介紹了使用,還有很多進階特性,比如:調用Java API、內建redis、Mongo等,感興趣的同學自己看下官方文檔吧,它還提供了很多文法demo,拿來即用就好。

位址:http://140.143.210.90:9999/magic/web/index.html

心得

magic-api在我整個項目趕工期的過程中可謂是居功至偉,節省了一大半的開發時間,不僅後端開發接口效率顯著提升,對前端聯調幫助也很大。

前後端從開始就定義好資料結構,後端快速提供靜态資料接口,前端用真實接口聯調,後端補充完業務邏輯後無縫替換成真實資料,這樣做到同步開發,前端也不用隻寫僞代碼等接口聯調了。

magic-api雖然可以提高開發效率,但是實際應用中我也隻敢把它用在一些邏輯相對簡單,偏配置類接口,核心業務還是要按“規矩”辦事,畢竟系統穩定、安全才是最重要的。

繼續閱讀