Dart-Aqueduct框架開發(fā)(一)

聲明:本文首發(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為例

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命令看到如下輸出視為成功

image.png

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

image.png

可以看到,我們成功的將Aqueduct拉到本地,但不要開心得太早,你收到了一個(gè)Warning,它告訴你沒(méi)有把pub緩存配置到你的環(huán)境變量中,這一情況,將導(dǎo)致我們無(wú)法使用aqueduct命令,所以找到它提示的export PATH=$PATH:$HOME/.pub-cache/bin重復(fù)配置環(huán)境步驟即可,最后我們輸入aqueduct命令,看到如下輸出視為成功
image.png

  • 創(chuàng)建項(xiàng)目
    到這里,基本上可以使用Aqueduct創(chuàng)建一個(gè)屬于我們的dart服務(wù)項(xiàng)目了,激動(dòng)
    輸入命令:
aqueduct create 你的項(xiàng)目名

即可在當(dāng)前目錄生成一個(gè)項(xiàng)目模版


image.png
  • 運(yùn)行項(xiàng)目
    切換到我們創(chuàng)建的文件夾下,然后運(yùn)行命令dart bin/main.dart或者aqueduct serve即可啟動(dòng)
    image.png

    image.png

aqueduct/1aqueduct/2
在輸出中,我們看到了aqueduct/1aqueduct/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)瀏覽器可得到

image.png

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

下一篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,306評(píng)論 6 13
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,920評(píng)論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32
  • 有些東西真的不存在被忘記,死皮的脫落永遠(yuǎn)也無(wú)法改變傷疤的痕跡,人的心柔弱在無(wú)人知曉的夜的包裹里,體會(huì)了一切的一切孤...
    云郎閱讀 150評(píng)論 0 0
  • 甘受千錘百煉剛,待出爐時(shí)真棟梁 雨打風(fēng)吹全不懼,鐵骨錚錚一兒郎
    魘客閱讀 257評(píng)論 0 3

友情鏈接更多精彩內(nèi)容