iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 21
1
Software Development

以資料庫為開發核心,利用通用 API 玩轉後端資料存取的概念與實作系列 第 21

Day21:一招半式闖江湖(一):通用 api 架構說明及第一支通用 api

  • 分享至 

  • xImage
  •  

經過了前面這麼多天的 SQL 介紹文的轟炸,相信大部分的童鞋已經充分地掌握了 SQL 的重點。但是,千萬不要驕傲,人外有人、天外有天、SQL 的挑戰才剛開始,加油。

下面開始要深入探討真正的主題

如何高效率的開發資訊系統。

您可能會說,不對啊,Michael 你的主題不是「以資料庫為開發核心」嗎?
是的,「以資料庫為開發核心」當然是核心主題,但是在我們實際運用的場域,不可能只是開發一套後端存取的 API。如果沒有前、後端程式的整合,就不能稱作是一套完整的資訊系統。

完整的資訊系統開發架構,大致規劃如下

後端的 API Services (包含下面2個重點)

1. Node.js 加通用 api 程式

a.憑藉標準通用程式,從此不必再寫 api(java script)
b.藉由撰寫多支預存程序,可實現資料存取的無限擴充
c.可以無縫和現有的 api server 程式整合

2. 預存程序(Store Procedure)化的 ORM

標準的新增、刪除、修改、查詢(分頁),免寫程式碼
(後續章節會有專文說明)

2.前端表單(含 Web 及 APP)

Wizard 化的 Web 通用資料維護表單工具

用一張簡單的示意圖,說明如下
https://ithelp.ithome.com.tw/upload/images/20181029/201114215BQIG4TnIS.png

一旦確認開發的架構,事情就單純了,再來就是確定開發組織、Team Member及所要使用的開發工具。這通常是架構師的工作,也是整個專案開發能否順利成功的關鍵因素。

舉個實際的例子,您可能會採用下面的開發工具及環境
Server 端:

OS:CentOS
資料庫:MariaDB v10.x
Node.js + Express.js

Web 端:
Vue(含全家桶) + Element UI

APP 端
Vue(含全家桶) + Cordova(或 DCloud 等)

我在 Day8 已經實作一支 demo 版本的 server.js,忘記的童鞋可以回頭再看一下。當這支程式在 server 端 run 起來後,接下來要做的,就是撰寫 Store Procedure。下面貼幾個畫面,證明我真的是 SQL 魔人
https://ithelp.ithome.com.tw/upload/images/20181029/20111421ur5YxnDIrA.png

https://ithelp.ithome.com.tw/upload/images/20181029/20111421EqtMdGoNhO.png

呼叫 API 就能取得資料庫中的資料,所以如果沒有加多層防護,當然是很危險的。至於要幾層,就看公司的 Security Policy 而定。但是在 API 端,至少要有一個 Token 認證機制,而且這個 Token 應該是動態、隨機且有使用期限的。
下面是一個簡單的 Token 驗證機制範例

create proc orm_api_v3
(
  @token varchar(100), 
  @pk varchar(100), 
  @action varchar(20), 
  @paras nvarchar(max) 

declare @userid varchar(100);
select @userid=dbo.checktoken(@token);

if @userid = '' begin
    select 9 code, 'token 過期!' as msg, 0 as recno;
    select * from sys_users where 1 <> 1;
end
else begin
    sql statement(code)
end
--取得動態 guid 的片段程式
declare @uuid uniqueidentifier;
set @uuid = newid();
			  
update sys_users set token = @uuid,lastlogintime=getdate() 
where site = @site and userid = @userid;
--判斷是否過期(Sample)
select @diffhour=datediff(hh,@lastlogintime,getdate());
if @diffhour >= 24*@longday and @longday > 0 begin
  set @statuscode = 9;
  set @errMsg = 'token 已過期,請重新登入!';
end

今天我們補充討論了一下 Security(token) 機制,相信您也看出來了,我連 token 的取得都是使用 SQL 語法,PURE SQL 解決所有後端問題是我的最高指導原則。當然,這種架構在非常高的併發數(數千個同時登入 user) 時,一定會有效能問題,所以此法有其極限,但是如果是架設自家企業的資訊系統,應該是綽綽有餘。

我今天也帶出了一些前端的想法,雖然我是前端小白,但是一些基本概念還是有的。所以我後面應該也會花一些篇幅討論 Wizard(前端表單產生器) 的一些基本觀念。

今天就談到這邊,感謝您的捧場,我們明天見。


上一篇
Day20:談談 store procedure 的除錯技巧 II
下一篇
Day22:一招半式闖江湖(二):再論通用 API 及實作範例
系列文
以資料庫為開發核心,利用通用 API 玩轉後端資料存取的概念與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言