JSON Path 是一種 JSON 文件查詢語言,其靈感來自 XPath 為 XML 文件提供的功能。它最初由 Matt Goëssner 提出,現在已成為 IETF 規範:RFC 9535。我強大的同事提出用 JsonPath 來比對特定的欄位,測試步驟讀起來清晰,復用性也高,實作起來也是蠻簡單的,接下來就看看我們怎麼做的。
通過 MiniExcel 批次匯入/匯出
最近有機會又要操作 Excel,很久以前就知道 MiniExcel,趁假日有機會來把玩一下,這次的重點是研究批次讀寫的使用方式,看看有沒有機會降低一次載入大量 Excel 所造成的記憶體損耗。除了 Excel 之外,它也支援 Csv 呢。還沒開始之前看一下效能比較圖。
通過 RateLimiter 限速器 + Redis,限制執行速度
- 373
- 0
- Rate Limiter
- 2024-03-03
上篇介紹使用 System.Threading.RateLimiting,實現限制執行速度,當有多台機器/服務需要限速,這就需要一台集中式的服務來管理 RateLimiter 的狀態,目前微軟官方還沒有支援 Redis,不過已經被排入 .NET 9 Milestones 再過一陣子,System.Threading.RateLimiting 應該就可以支援 Redis 了,對於現在需要使用 Redis 的夥伴,可以先考慮使用 cristipufu/aspnetcore-redis-rate-limiting
如何使用 Mock Server 建立假服務
- 326
- 0
- API Specification
- 2024-02-28
上篇 提到使用 Prism 來建立 Mock Server,經同事反饋,他期望能使用類似像 Wiremock 有 API 可以在測試步驟根據場景快速的定義 Mock Server 的回傳值,而我期望除了用 API 動態的決定 Mock Server 的回傳值之外,還能匯入 Open API/Swagger,於是我把我手上收集的 Mock Server 清單玩了一遍,發現這一套 Mock Server 可以滿足我需要的
通過 RateLimiter 限速器,限制執行速度
- 191
- 0
- Rate Limiter
- 2024-03-03
System.Threading.RateLimiting 在 .NET 7 發佈,他提供了 4 種的限速方式,當需要限制執行速度時,透過它讓我們可以根據需求來決定 Web API、HttpClient、流程限速,有了這個就可以不用自己控制執行速度了
解決在 Web API 使用 HttpClient / IHttpClientFactory 處理 Cookie 出現狀態錯亂的問題
- 350
- 0
- HttpClient
- 2024-01-22
日前,在工作上碰到了 HttpClient 處理 Cookie 時,用戶取得 Cookie 狀態錯移,就是 B 用戶拿到 A 用戶的 Cookie 狀態,追了一下,才發現是預設共用了 CookieContainer 了,要怎麼解這題??
利用 JsonDiffPatch 產生資料異動時的差異內容,縮小儲存容量
當資料有異動 (CUD) 的時候,我會把異動的結果存放在另一張表,稱之為歷程 History 或是快照 Snapshot,讓活動中的資料內容都是有用的,其他的資料表要記錄"當下"的狀態時,則是參考 Snapshot 的資料,例如 Id+Version,這次我要用 JsonDiffPatch 來產生差異資料內容,並且還原出當時的內容,就來看看我怎麼實作。
EF Core + Cursor-based pagination 的寫法
我們都知道,可以透過分頁技巧,將大量資料切成小部分回傳給調用端,常見的技巧就是 Offset-based 以及 Cursor-based,我將使用 EF Core + Postgresql 實作分頁
下圖出自:A deep dive into cursor-based pagination in MongoDB (engage.so)
Specflow table 搭配 json 資料的幾個需要注意的寫法
Specflow 的 table 預設用來處理單一欄位,若是想要在欄位裡面塞入 json 或者是比對 json 就得自行處理,這裡列出我常用的方式。
不使用 HttpContext 傳遞 Context 的寫法
上篇 有提到可以透過 ASP.NET / ASP.NET Core 的 HttpContext 來傳遞狀態,由於他的生命週期很短,每一個調用者擁有獨立的狀態,很適合用來跨層傳遞狀態;現在,我想要降低對 HttpContext 的依賴,改由自訂的 ContextAccessor 保留物件的狀態,傳遞系統所必要的狀態,統一由一個點進行修改,比如登入帳號、追蹤 Id,其他的點,只能取用不能修改。