欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

只會建數據庫怎么寫API?database2api 能幫到你!

freeflydom
2024年10月7日 9:33 本文熱度 841

database2api 意為 DataBase to API,即只要有數據庫,就可以生成開放 API

database2api 是一款強大而便捷的工具,主要功能是依據現有的數據庫自動生成開放的 API 接口,能夠為開發者大幅節省時間與精力,尤其適用于那些已擁有數據庫且需要提供 API 接口,或者僅會構建數據庫、而需要迅速實現 API 接口的場景。

一、功能介紹

database2api 能夠智能地解析數據庫結構,并根據用戶的需求和配置,自動生成相應的 API 接口,讓您無需繁瑣的手動編碼,即可輕松實現數據庫與外部應用的交互。

在當今的軟件開發中,數據庫與外部應用的交互是至關重要的環節。然而,手動編寫 API 接口往往是一項耗時且容易出錯的工作,而且需要具備某一種后端編程語言,門檻較高。database2api 的開發旨在解決這一痛點,讓開發者能夠更專注于業務邏輯的實現,而無需在接口開發上花費過多的時間和精力。

例如,在一個快速發展的項目中,數據庫結構可能會頻繁變動。使用 database2api ,您只需更新配置文件,即可快速重新生成適應新結構的 API 接口,極大地提高了項目的敏捷性。

無論您是個人開發者還是團隊,database2api 都將是您提升開發效率、加速項目進程的得力助手。

二、技術原理

本工具使用 Ktor 作為底層框架,JDBC 作為數據庫訪問層,通過 java.sql.DatabaseMetaData 獲取到數據庫結構,再通過 Ktor 動態注冊 API 路由,實現直接由數據庫生成 API 接口。

三、目前已支持的數據庫

目前,database2api 已支持以下多種主流數據庫:

  • ? Sqlite

  • ? MySQL

  • ? Postgresql

  • ? Microsoft SQL Server

  • ? MariaDb

四、優勢

  1. 高效便捷:通過簡單的配置文件,即可快速生成所需的 API 接口,大大提高開發效率。

  2. 廣泛的數據庫支持:涵蓋了常見的數據庫類型,滿足不同項目的需求。

  3. 易于維護:生成的接口結構清晰,代碼規范,便于后續的擴展和測試。

五、如何使用

  • 點擊下載 或直接克隆倉庫編譯為 jar,文件名為 database2api.jar

  • 目錄結構預覽

│  database2api.jar  <-- 主程序(必選)
└─ data
     └─ ext          <-- 擴展 API 放置目錄(可選)
     └─ web          <-- 靜態文件目錄(可選)
     └─ setting.ini  <-- 配置文件(必選)
  • 配置文件 setting.ini 樣例

# API 默認端口
API_PORT=8080
# 生成API的前綴,如設置 api/v1 后,則API變為:http://localhost:{PORT}/api/v1/xxxxxx
API_PREFIX=api
# 是否啟用 API 文檔,地址 http://localhost:{PORT},設為 false 不會生成 API 文檔
API_INDEX_ENABLED=true
# 是否啟用接口授權訪問功能,默認false,所有 API 無需授權認證即可訪問
API_AUTH_ENABLED=false
# 接口授權訪問,支持:Basic, JWT。(以后可能會支持其他的授權認證方式)
API_AUTH_TYPE=JWT
# 接口允許訪問的用戶名密碼列表
API_AUTH_USERS=admin:123456,user:1234
# 數據庫默認鏈接地址(主要需要這里的數據庫連接字符串,其他數據庫連接字符串樣例在下方)
DB_URL=jdbc:sqlite://G:/database2api-test/sqlite/fqb.db
# 數據庫用戶名
DB_USER=
# 數據庫密碼
DB_PWD=
# 生成API的數據表名稱,為空則所有的表都生成API,多個使用英文逗號分割
INCLUDE_TABLES=
# 需要忽略的數據表名稱,如果不為空,則指定的表名被過濾,多個使用英文逗號分割
IGNORED_TABLES=
# 是否啟用靜態網站,啟用后,則創建web目錄,放入靜態資源即可訪問
STATIC_WEB_ENABLED=true
# 是否開啟擴展API,允許用戶使用JS代碼使用自定義SQL查詢數據庫
EXT_API_ENABLED=true
  • 啟動方式:

java -jar database2api.jar

啟動后控制臺日志如下:

2024-07-11 23:43:14.367 [main] DEBUG cn.hutool.log.LogFactory - Use [Slf4j] Logger As Default.
2024-07-11 23:43:14.369 [main] INFO  com.mrhuo.Database2Api - Database2Api: 開始初始化
2024-07-11 23:43:14.382 [main] INFO  com.mrhuo.Database2Api - Database2Api: 開始初始化 API 配置
2024-07-11 23:43:14.431 [main] DEBUG cn.hutool.setting.SettingLoader - Load setting file [D:\work\java\database2api\data\setting.ini]
2024-07-11 23:43:14.444 [main] INFO  com.mrhuo.Database2Api - Database2Api: 靜態網站主頁[http://127.0.0.1:8080/web/index.html]
2024-07-11 23:43:14.444 [main] INFO  com.mrhuo.Database2Api - Database2Api: 開始初始化數據庫
2024-07-11 23:43:14.444 [main] INFO  com.mrhuo.Database2Api - Database2Api: 使用鏈接字符串[jdbc:sqlite://G:/database2api-test/sqlite/fqb.db]
2024-07-11 23:43:15.236 [main] INFO  com.mrhuo.Database2Api - Database2Api: 獲取到所有數據表的表結構
2024-07-11 23:43:15.236 [main] INFO  com.mrhuo.Database2Api - Database2Api: 已保存到文件[D:\work\java\database2api\data\tables.json]
2024-07-11 23:43:15.236 [main] INFO  com.mrhuo.Database2Api - Database2Api: 初始化全部成功
2024-07-11 23:43:15.383 [main] INFO  ktor.application - Autoreload is disabled because the development mode is off.
2024-07-11 23:43:16.241 [main] INFO  ktor.application - Application started in 0.928 seconds.
2024-07-11 23:43:16.242 [main] INFO  ktor.application - Application started: io.ktor.server.application.Application@299266e2
2024-07-11 23:43:16.633 [DefaultDispatcher-worker-1] INFO  ktor.application - Responding at http://127.0.0.1:8080

啟動成功后目錄結構變為:

│  database2api.jar
└─ data
     │  setting.ini
     │  tables.json      <-- 這是數據庫中所有的表名稱,下次啟動時不會從數據庫重新獲取,直接使用此文件。如數據庫已更新,則刪除此文件
     │  table_names.json <-- 這是數據庫中所有表結構,下次啟動時不會從數據庫重新獲取,直接使用此文件。如數據庫已更新,則刪除此文件
     └─ ext              <-- 擴展 API 放置目錄(可選)
     └─ web              <-- 靜態文件目錄(可選)
         └─ index.html   <-- 這是靜態網頁默認首頁

打開瀏覽器,訪問 http://127.0.0.1:8080 ,如果開啟了配置 API_INDEX_ENABLED=true,此時界面如下:

端口設置見配置文件 API_PORT=8080

如果設置 API_INDEX_ENABLED=false,則不會顯示 API 文檔界面。

隨便找個測試獲取所有數據:http://127.0.0.1:8080/api/DEVICE/all

這里的 DEVICE 是數據庫中的表名

再測試分頁顯示數據:http://127.0.0.1:8080/api/DEVICE/paged

可以看到,僅僅是配置了數據庫鏈接,就自動生成一個完整的可用的API接口,非常方便。

六、接口安全性

現已支持 Basic、JWT 兩種授權認證方式,配置如下:

# 是否啟用接口授權訪問功能
API_AUTH_ENABLED=false
# 接口授權訪問,支持:Basic, JWT,
API_AUTH_TYPE=JWT
# 接口允許訪問的用戶名密碼列表
API_AUTH_USERS=admin:123456,user:1234

Basic 授權

  • 需要配置 API_AUTH_ENABLED=true 開啟API授權

  • 需要配置 API_AUTH_TYPE=Basic (注意大小寫)

  • 需要配置 API_AUTH_USERS=user:pass,user1:pass1,設置允許訪問的用戶密碼對

Basic 授權失敗演示

Basic 授權成功演示

JWT 授權

  • 需要配置 API_AUTH_ENABLED=true 開啟API授權

  • 需要配置 API_AUTH_TYPE=JWT (注意大小寫)

  • 需要配置 API_AUTH_USERS=user:pass,user1:pass1,設置允許訪問的用戶密碼對

注意,JWT授權,單獨提供了一個用戶登錄接口,路勁為 /api/api-user-login,前面的 api 前綴,由配置 API_PREFIX 來設置

JWT 驗證失敗演示

JWT 驗證成功演示

JWT 用戶登錄成功演示

JWT 用戶登錄失敗演示

七、高級內容

擴展 API

擴展 API 簡單來說就是寫一個JS文件,作為API擴展接口,執行數據庫訪問,完成API請求的功能。

開啟方式,在配置文件里設置 EXT_API_ENABLED=true,并在 data 目錄下創建 ext 目錄,創建文件 get_hello.js,內容如下:

注意:文件名格式為 {get|post}_{api_name}.js

function main() {
    var name = context.query.name || "no name";
    return "hello " + name;
}

規定函數名 main,重新啟動 database2api 后可看到控制臺提示:

2024-07-14 17:26:58.380 [main] INFO  com.mrhuo.plugins.RoutingKt - Database2Api.scriptApiRoute: 創建擴展API[GET:/api/ext/hello]成功

訪問該API http://127.0.0.1:8080/api/ext/hello?name=mrhuo 時,返回結果如下:

{
  "code": 0,
  "msg": "OK",
  "data": "hello mrhuo"}

注意:擴展API因為用到了腳本引擎來解釋執行腳本代碼,性能不是太好,如非必要,請勿過度依賴此功能。

擴展API中目前支持 dbcontext 兩個對象。

  • db 對象主要用于數據庫查詢,提供 db.query(sql)db.queryOne(sql)db.exec(sql) 這三個方法

  • context 對象主要用于當前請求參數的獲取,提供 context.uricontext.methodcontext.headerscontext.querycontext.body 五個對象

附1:數據庫連接字符串模板

注意如果數據庫有密碼,還需要配置 DB_USER 和 DB_PWD

  1. Sqlite

DB_URL=jdbc:sqlite://G:/db.db
  1. MySQL

DB_URL=jdbc:mysql://127.0.0.1:3306/db?useSSL=false&serverTimezone=UTC&charset=utf8mb
  1. PostgreSQL

DB_URL=jdbc:postgresql://127.0.0.1:5432/db
  1. Microsoft SQL Server

DB_URL=jdbc:sqlserver://;serverName=rm-abc.sqlserver.rds.aliyuncs.com;port=1433;databaseName=db_cms
  1. MariaDb

jdbc:mariadb://127.0.0.1:3306/mysql?useSSL=false&serverTimezone=UTC&charset=utf8mb4

附2:開源地址

https://github.com/mrhuo/database2api

版權提示

MIT

轉自https://www.cnblogs.com/MrHuo/p/18309261/database2api


該文章在 2024/10/8 15:20:17 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved