聲明:本文首發(fā)于微信訂閱號(hào):Dart客棧
文章為原創(chuàng),如需轉(zhuǎn)載請(qǐng)注明出處,并告知作者,謝謝!
1.介紹
Aqueduct是一個(gè)HTTP Web服務(wù)器框架,用于構(gòu)建用Dart編寫的REST應(yīng)用程序。
2.核心概念
資源(Resources)
資源是應(yīng)用程序通過(guò)其HTTP API公開的內(nèi)容,可以是任何東西,例如:分?jǐn)?shù),帖子,用戶關(guān)系等,在獲取資源時(shí),一般以JSON的形式存儲(chǔ)在響應(yīng)體中。
路由(Routing)
HTTP請(qǐng)求資源的路徑標(biāo)識(shí),例如:http://www.baidu.com ,當(dāng)我們?cè)L問(wèn)百度時(shí),百度的服務(wù)器返回我們資源以text/html的形式,在經(jīng)過(guò)瀏覽器的解析,從而呈現(xiàn)給我們頁(yè)面,當(dāng)我們請(qǐng)求到公開的服務(wù)器路由,就可以顯示我們想要的內(nèi)容,如果請(qǐng)求不到服務(wù)器公開的路由,則服務(wù)器返回404頁(yè)面
控制器(Controller)
處理請(qǐng)求的對(duì)象。例如:控制器可以從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),然后將它們發(fā)送到響應(yīng)中的客戶端。另一個(gè)控制器可能會(huì)驗(yàn)證請(qǐng)求的授權(quán)標(biāo)頭的用戶和密碼是否有效,所以,響應(yīng)請(qǐng)求可能由多個(gè)控制器進(jìn)行對(duì)請(qǐng)求的處理,一般的,多個(gè)控制器鏈接在一起進(jìn)行對(duì)請(qǐng)求處理為管道的形式,也可以將這些鏈接一起的控制器稱為通道,當(dāng)前面的控制器驗(yàn)證不通過(guò),那么后面的控制器將不會(huì)進(jìn)行處理
應(yīng)用通道(ApplicationChannel)
包含應(yīng)用程序所有控制器的對(duì)象。還負(fù)責(zé)初始化應(yīng)用程序的服務(wù),讀取配置文件和其它啟動(dòng)相關(guān)任務(wù)
服務(wù)(Services)
封裝復(fù)雜的任務(wù)或算法,目的是為更詳細(xì)的行為提供簡(jiǎn)單的方法,例如:數(shù)據(jù)庫(kù)鏈接
服務(wù)的主要用戶為控制器,通過(guò)將服務(wù)作為參數(shù)傳遞給控制器的構(gòu)造函數(shù),將服務(wù)注入控制器,控制器保留對(duì)服務(wù)的引用,以便處理請(qǐng)求的時(shí)候使用到它
隔離(Isolates)
內(nèi)存隔離的線程,在一個(gè)隔離上創(chuàng)建的對(duì)象不能被另一個(gè)隔離引用,應(yīng)用程序啟動(dòng)時(shí),會(huì)生成包含應(yīng)用程序代碼副本的一個(gè)或多個(gè)隔離專區(qū),可以有效的負(fù)載均衡,每個(gè)隔離區(qū)都有自己的一組服務(wù),比如數(shù)據(jù)庫(kù)連接,這可以消除數(shù)據(jù)庫(kù)連接池的問(wèn)題
綁定(Bindings)
注釋(類似autowrite),請(qǐng)求可能包含請(qǐng)求頭,查詢參數(shù),需要在控制器代碼中解析,驗(yàn)證和使用,綁定則是添加到自動(dòng)執(zhí)行此解析和驗(yàn)證的變量的注釋
查詢和數(shù)據(jù)模型(Quertes and Data Models)
ORM對(duì)象關(guān)系映射,提供易于編寫和測(cè)試的靜態(tài)類型查詢,提供命令行工具生成數(shù)據(jù)庫(kù)遷移送文件,用于檢測(cè)可應(yīng)用實(shí)時(shí)版本數(shù)據(jù)庫(kù)的數(shù)據(jù)模型更改,數(shù)據(jù)模型也可以表示為JSON對(duì)象
授權(quán)(Authorization)
OAuth2.0授權(quán)框架,可直接集成在您的應(yīng)用程序中,或單獨(dú)作為一個(gè)聯(lián)合服務(wù)提供授權(quán)的服務(wù)器,默認(rèn)實(shí)現(xiàn)利用Aqueduct ORM在PostgreSQL中存儲(chǔ)
文檔(Documentation)
OpenAPI3.0是HTTP API的標(biāo)準(zhǔn)化文檔格式,支持自動(dòng)文檔
3.開始
在開始前首先需要配置好你的環(huán)境,并提前下載好相關(guān)的SDK,以方便使用pub命令,下面將以mac為例
下載
下載地址:https://storage.googleapis.com/dart-archive/channels/stable/release/2.4.0/sdk/dartsdk-macos-x64-release.zip
如果是其他平臺(tái),可將上面鏈接替換
stable -> dev(渠道分支)
2.4.0 ->版本號(hào)
macos ->window、linux
x64 -> i32配置環(huán)境
打開控制臺(tái),輸入vim ~/.bash_profile
然后點(diǎn)擊A鍵進(jìn)入編輯模式,添加以下內(nèi)容,DART_HOME就是你的SDK路徑
export DART_HOME=/Users/rhyme/env/flutter/bin/cache/dart-sdk
export PATH=$PATH:$DART_HOME/bin
配置完成后,點(diǎn)擊ESC鍵退出編輯模式,然后使用組合鍵shift+:輸入wq點(diǎn)enter鍵退出并保存文件,運(yùn)行source ~/.bash_profile讓配置文件生效,當(dāng)你運(yùn)行dart命令看到如下輸出視為成功

- 激活
Aqueduct包
可以將pub比做npm,同樣也是腳本運(yùn)行,在命令行中輸入如下
pub global activate aqueduct

可以看到,我們成功的將
Aqueduct拉到本地,但不要開心得太早,你收到了一個(gè)Warning,它告訴你沒(méi)有把pub緩存配置到你的環(huán)境變量中,這一情況,將導(dǎo)致我們無(wú)法使用aqueduct命令,所以找到它提示的export PATH=$PATH:$HOME/.pub-cache/bin重復(fù)配置環(huán)境步驟即可,最后我們輸入aqueduct命令,看到如下輸出視為成功
- 創(chuàng)建項(xiàng)目
到這里,基本上可以使用Aqueduct創(chuàng)建一個(gè)屬于我們的dart服務(wù)項(xiàng)目了,激動(dòng)
輸入命令:
aqueduct create 你的項(xiàng)目名
即可在當(dāng)前目錄生成一個(gè)項(xiàng)目模版

- 運(yùn)行項(xiàng)目
切換到我們創(chuàng)建的文件夾下,然后運(yùn)行命令dart bin/main.dart或者aqueduct serve即可啟動(dòng)
image.png
image.png
aqueduct/1和aqueduct/2
在輸出中,我們看到了aqueduct/1和aqueduct/2這個(gè)是什么呢,我們可以在特性中知道有內(nèi)存隔離線程,項(xiàng)目會(huì)根據(jù)你電腦的核數(shù)啟動(dòng)一半的線程,當(dāng)前我的電腦是4核,所以啟動(dòng)了2個(gè),這個(gè)數(shù)量,是作者根據(jù)最優(yōu)來(lái)啟動(dòng),當(dāng)然了,你也可以啟動(dòng)10個(gè),20個(gè)或者更多,這個(gè)具體根據(jù)業(yè)務(wù)需求來(lái)定制,用于解決負(fù)載問(wèn)題
8888
默認(rèn)的端口號(hào)為8888,并且項(xiàng)目為我們默認(rèn)添加了一個(gè)接口/example,直接訪問(wèn)瀏覽器可得到

ok,以上就是今天的內(nèi)容,盡量講得通俗易懂,方便大家來(lái)學(xué)習(xí)
Dart相關(guān)知識(shí),作者創(chuàng)作不易,賞個(gè)雞腿吧!

