TODO

JWT 驗證與授權

Rest API design

Result pattern

基礎學習內容

以下是我用C#和Asp.Net core進行後端開發的學習紀錄。

  1. C# basic

  2. ASP.NET Core
    ASP.NET Core Full Course For Beginners (youtube.com)

    1. Middleware
    2. Dependency injection
    3. controller & 基本的api routing design
    4. 如何讀取appsettings.json
  3. Api design, architecture: controller, services, repository

  4. SQL server & EF core

    • LINQ最基本的重要觀念:
      1. Deferred execution e.g. 就算tracks是List,寫tracks.Select(t t.ToDto())會變成IEnumerable而非List,除非最後加上.ToList()
      2. IEnumerable (在memory中)vs. IQueryable(會實際轉換成DB query)
      3. LINQ主要用於查詢的Query居多,像是where, select, order by, first/firstOrDefault, any, tolist
      4. 如果要update, create, delete就要用到LINQ之餘的Add, Remove + saveChangesAsync() 這些不是IQueryable,是DbSet的操作介面。有時候兩種方法都可以做到同一件事情,像是var problem = context.Problems.FindAsync(id) vs. var problem = context.Problems.FirstorDefaultAsync(p p.id == id),這時候優先會選擇前者,FindAsync雖然不是IQueryable提供,但是他是專門用來查詢primary key的,而且可以利用ef core的change tracker直接回傳不用查詢DB
    • LINQ 練習題
  5. Docker & Docker compose
    https://youtu.be/SXwC9fSwct8?si=7WOcEntMdszmEbLd
    困難點:服務之間啟用的dependency、用環境變數覆蓋appsetting、volumn與network設定(服務內部溝通要用內部網路的service name和port溝通,而不是windows/mac上面的port)

  6. Unit testing (xUnit + Moq)

    • 困難點:如果沒有對app做分層,會很難測試,正確的單元測試會集中在service的部分
    • 為什麼要寫測試?
  7. Kubernetes
    Kubernetes Crash Course for Absolute Beginners [NEW] (youtube.com)
    困難點:

    • 理解每個k8s components在做什麼?secret, configmap, deployment, services
    • 理解service要怎麼把target port對應到pod,然後deployment是怎麼找到個別的pod的?(keyword: matchLabels & labels & nodeport)
  8. GitLab CI/CD + Argo CD
    GitLab CI CD Tutorial for Beginners [Crash Course] (youtube.com)
    ArgoCD Tutorial for Beginners | GitOps CD for Kubernetes (youtube.com)
    困難點: Docker in docker才能push to docker hub, 然後ci pipeline要能夠修改manifest file才能觸發argocd

  9. App observability

  10. Git/GitHub/GitLab完全教程(包括Git底层原理) | Udemy

  11. JWT 驗證與授權

實務開發學習內容

API, Distributed System

  1. 當Api A需要呼叫Api B取得資料,就需要用到如何使用HttpClient呼叫其他服務
  2. GraphQL 核心觀念, GraphQL 的「Graph」到底是什麼?為什麼會有 N+1 問題?
  3. 商品清單 API 設計:支援 price + created_at 多欄位排序的 Cursor Pagination
  4. 異常處理:多層呼叫情境下 try-catch 該放哪裡?
  5. Kafka 入門:為什麼它能讓微服務解耦、又快又穩
    1. OAuth 2.0 中 client_secret 何時需要?從實際開發情境理解設計原理

DB

  1. 資料頁、索引與查詢效能:從資料儲存談起
  2. SQL correlated subquery效能優化
  3. SQL injection in LIKE pattern

Programming Language

  1. Strategy Pattern:從違反 SOLID 到符合設計原則

困難點

  1. DB design (constraint, index)
  2. Api design, architecture: controller, services, repository (上面的第三點)
  3. 框架的運作原理
    我大致上知道用某些code可以設定某些功能,但我不太懂框架到底是怎麼運作的,導致我寫不出這些code。基本上只是框架的user,我想要學習更底層的東西該怎麼做。舉個比較specific的例子,我不知道這段code背後是怎麼運作的,只知道我這樣設定就會這些功能
       // AddOpenTelemetry: Registers an IHostedService to automatically 
       // start tracing and/or metric services in the supplied IServiceCollection
       // and then returns an OpenTelemetryBuilder class.
       appBuilder.Services.AddOpenTelemetry() 
           .ConfigureResource(builder => builder.AddService(serviceName: "MyService")) 
           .WithTracing(builder => builder.AddConsoleExporter()) 
           .WithMetrics(builder => builder.AddConsoleExporter());