快速部署業務類為webapi服務

2022-01-23 20:09:42 字數 2135 閱讀 3540

接著前一篇博文,將介面快速打包固定請求格式,不需要修改**,可以自動完成介面呼叫,實際上就是生成了乙個介面的**類。

那麼僅僅是介面請求**,沒有服務端怎麼行?所以需要將實現介面的類部署為webapi的控制器。

這個時候abp就登場了,原理需要檢視官方文件。abp就是實現了快速生成部署。

我就不說abp的東西了,官方文件可以任意查閱。

因為abp作為一種開源元件,整合的東西太多太全,作為小企業中的我們,複雜,不容易上手,所以打算跳過這個東西。

我需要的是把實現了業務介面的類部署成webapi即可,沒有其它功用。

最近花時間看了看,其實就是asp中的aop介面使用,只是我買平時開放用webapi,沒有採用。

研究了作者的東西,我感覺小專案是可以用的,原作者叫動態webapi,其實簡單說就是webrpc.

我用netcore3用了下,有個別地方有差異。基本原理是合適的。

主要有2點:

1.根據自己的約定,設定某個類是控制器

2.根據判斷的控制器類,按照aspnet core約束,修改其中的內容,讓aspnet core將它認定為webapi.

這裡我就不講原作者的**了,感興趣的可以去看,我只講我的,我們的差不多。

認定介面類是控制器的方法

繼承controllerfeatureprovider類,該類就是mvc驗證是控制器的類,裡面有個方法iscontroller,返回true就表明當前型別是控制器。

我的**中提供了配置,傳入乙個fun型別委託,如果原來的判斷不成功,就呼叫該委託,通過自定義方法檢查是否是控制器。

注意:比較老版本該類是不能使用的,只能繼承該類的實現介面,把原始碼抄過來。新版本才可以,把iscontroller方法修改成了虛擬方法。

修改約束的方法:

就是按照資訊處理。

最後建立的url路由:api/網域名稱稱/控制器名稱/方法名稱。

裡面的控制器名稱可以設定,提供了配置方法。目前考慮不要侵入**。

所以我的**中提供配置,根據配置的名稱分別查詢控制器的常量,靜態屬性或者字段,獲取值來設定控制器url中的名稱。

同理,版本資訊,所屬域都是這樣。

簡單的介紹就這樣完了。

提供的建議:

如果你要按照這種解決方案,將實現介面的業務類快速部署,那麼給一點點建議。

關於控制器名稱,一種方式是固化格式,方便前端修改呼叫,例如,實現的業務類名稱=介面名稱+「bil」,這樣每個介面對應的控制器名稱就有了。前端格式化實現請求就有路徑了。另外可以在介面中新增常量,靜態變數來設定,這樣就符合後端實現了。

前端格式化實現時就可以反射獲取介面中的值類設定url.當前最後不要在業務介面中直接使用,而是讓每乙個業務介面都繼承乙個api的轉用介面,在這個專用介面上面新增特性,常量,靜態變數。這樣就可以實現無**侵入了。這部分工作在我的**中沒有,需要使用者自己定義使用。abp和原作者就是在**中已經定義了,所以必須有特性或者類,而我的沒有。這也是為什麼他們需要新增特性或者繼承,就是以此來判斷控制器類或者名稱,域的。

差不多了,慢慢看吧。

附帶一點點說明:

netcore3有一些變化,把一些元件移除了,做第三方存在了,所以對應是有變化的。這裡涉及的是json格式化,微軟使用了自己定義的。system.text.json.而不是原來的第三方元件了。

所以swagger也要使用最新的預覽版,低版本報錯。

我的示例用的是nswag。使用nswag.aspnetcore包。

最後說說我封裝的庫使用方法

startup中,

services.addwebapiassembly(null);//新增程式集

services.addwebapidirectory(null);//新增程式集目錄

新增程式集,就是一般說的將控制器剝離的方式,內部封裝了。

services.adddynamicwebapi(new dynamicwebapioptions()

return true;

} });

新增動態處理元件,就是封裝整個過程的庫,算是中介軟體吧。裡面的controllerfeature就是判斷控制器的委託。

如何利用 docker 快速部署 Mysql 服務

docker 基礎教程不再多說,這裡只著重講如何使用 docker 部署 mysql 服務 docker pull mysql mysql server tag等待拉取完成即可。docker 部署的優勢就在於其快速便捷,下面就進行幾項步驟 該容器命名為mysql8,將容器埠3306對映到本地埠330...

以Chef和Ansible為例快速入門伺服器配置

這篇文章討論了如何在我們的環境中安裝和配置軟體,這個任務通常被稱為伺服器配置 server provisioning 在開始介紹現代化的工具之前,我們來看看最基本且經過實戰考驗的伺服器配置工具 shell指令碼。在chef ansible或puppet出現之前,很多運營團隊使用bash來配置伺服器 ...

以Chef和Ansible為例快速入門伺服器配置

這篇文章討論了如何在我們的環境中安裝和配置軟體,這個任務通常被稱為伺服器配置 server provisioning 在開始介紹現代化的工具之前,我們來看看最基本且經過實戰考驗的伺服器配置工具 shell指令碼。在chef ansible或puppet出現之前,很多運營團隊使用bash來配置伺服器 ...