[DotnetCore]ModelBindingMiddleware
前情提要
延續[DotnetCore]Refit:類ApiGateway實作文章,筆者在開發前台,後台這種隔離架構時,還會有一個需求是,比較正式的API規格,會有一些客製化的Header
值必須要辨別,不外乎就是AcesssToken
,或者必要的Client
資訊,及封包簽章等資訊,以前台轉發到後台這段來說,猶如上一篇提到透過Refit
完成。
筆者的思路是這樣,驗證這些Client Request
資訊的職責來說,止於前台,不需要再原封不動將客製化的Header
資訊送到後台,因為後台商業邏輯處理來說也不需要這些資訊,因此某些Header的值必須下放到Model
層級,讓後台收到的Request
中已經含有商業邏輯處理的必要資訊。
再則前台這一層必須要驗證Request
的合理性,一定會讀取Header
資訊,若要把這些Header
資訊原封不動的送到後台,反而還要額外動工,第一是要製作成Refit的參數,第二是後台還要再拆解一次Header資訊,完全是做了很多不需要的步驟,於是乎,這篇就誕生啦。
[DotnetCore]Refit:類ApiGateway實作
前情提要
筆者在公司環境開發系統,依照公司規定有一些Secrurity Policy
要遵守,尤其是對外站台(前台),因為是對外開放的站台,按照資安規定,需要完全是一個乾淨的站台,不連資料庫,不做商業邏輯處理,只接收將客戶端傳來的HttpRequest
,轉發到商業邏輯處理站台(後台),因此筆者才在此篇的標題上打上類APIGateway
的字言,因為沒有完全符合ApiGateway
該有的功能,類似像LoadBalancing
、Caching
、Retry Policy
等重要指標,ApiGateway
完整功能可參考https://github.com/ThreeMammals/Ocelot的Features清單就可以略知一二。
[DotnetCore]FluentValidation再續前緣
[DotnetCore]Refit:Polly應用
[DotnetCore]Refit:HttpMessageHandler應用
前情提要
筆者在 [DotnetCore]Refit初體驗那篇中有說到,選擇的Refit
的原因有其中一項是可以繼續沿用自定義HttpMessageHandler
,此篇就以Refit
註冊的同時也掛上自定義HttpMessageHandler
的教學。
[DotnetCore]Refit:API介紹及應用
[DotnetCore]Refit:DotnetCore專案套用
前情提要
筆者在上一篇: [DotnetCore]Refit初體驗 ,簡單介紹Refit的使用方式,因上篇中要簡單的呈現,因而透過Linqpad
來完成示範,這篇則建立Dotnet Core
完整專案,並將Refit
套上使用。
[DotnetCore]Refit初體驗
前情提要
筆者在公司負責的專案,大多數都跟其他廠商串接有關,串接方式百百種,最多就是Http Request
了,因新專案已都使用dotnet 6
來開發,透過AddHttpClient
註冊,注入HttpClient
,再將HttpRequest
的實作封裝成HttpClientRepository
,確實都滿順利的,但光HttpClient
串接也是有百百種,有的廠商要FormPost
方式送出RequestContent
,有的廠商則一般常見的將RequestContent
放在Body
,格式方面有些則json
格式,有些則xml
等等,組合也是挺可怕的多,要一直調整其底層共用程式HttpClientRepository
。
再則筆者在實作中遇到一個滿常見的問題,Header
重複設定的錯誤,因Http
連線成本確實不低,因此透過AddHttpClient
使用HttpClient
,希望由dotnet
底層管理連線,降低其連線成本,以常見的Header
設定來說,就屬Authorization
了,筆者這邊為了加速往廠商端的查詢,會透過Parallel
的方式併發出Request
,全部Response
都回來後才做商業邏輯處理,因此第一次連線後Header
尚未設定的情況下,有一定的機率兩組執行緒碰撞一次,也有一定的機率兩組同時進到判斷式,要新增Header
的值,搞得筆者連Lock
機制都用上了,目前尚未找到更好的解,只能先這樣暴力解了。最後筆者自己本身在Linqpad
上先行測試時會使用HttpRequest
相關套件,例:RestSharp,心血來潮認真看了下其API
,看到有Headers
章節中的API
: AddOrUpdateHeader
,覺得完全是解決筆者的痛點,突然有一種HttpRequest
應該是一個基礎建設,若能有一個套件幫忙實作完成,就可以專心地將所有精力投入在商業邏輯層面就好,進而縮短開發時間,然而某天在LinkedIn
貼文上看到一個套件叫[Refit](https://github.com/reactiveui/refit)
,不查還好,查完後覺得就它了。
[DotnetCore]AOP初體驗
前情提要
筆者負責的專案,是那種到處要跟第三方串接那種,第三方不管是內部或多個外部,串接方式不外乎就是WebService
或是Restful API
,或者提供dll
檔案,多種形式見怪不怪,串接這時候釐清問題是最重要的,因此必須要確保我方系統上保有Request
及Response
以釐清問題,也是自保的一種概念,因為你無法保證串接的Method
跟金額無關,這時候唯有留下系統軌跡才能保證你的清白(被害妄想症上身中),筆者相信留下紀錄這件事,不管事不是跟別的系統串接,仍是很重要的課題。
然而對於Restful API
這種串接方式,最方便留下紀錄了,只要共用一個HttpClientRepository
,將發出HttpRequest
集中在某一個Method
中,方便事後增加其往來紀錄的相關程式碼,當然我方系統是被呼叫方的話,也是可以透過DotnetCore
內建的Middleware
能搞定。至於呼叫WebService
或者dll
檔案中的Method
則比較傷腦筋一點,動用到今天的主角,AOP Logging
,能夠輕鬆地不留痕跡地做到留下紀錄。