Chuyển tới nội dung chính

2.14 — Review and Assessment

Mục tiêu bài học

  • Nắm được ý chính của bài và mối liên hệ với module.
  • Áp dụng được kiến thức vào bối cảnh CRM/.NET backend.
  • Sẵn sàng chuyển sang bài kế tiếp với nền tảng chắc chắn.

Nội dung bài học

2.14.1 — Thực hành

Bài 1 — Dùng Browser DevTools xem HTTP Request

  1. Mở Chrome/Edge, vào bất kỳ website nào (ví dụ https://jsonplaceholder.typicode.com/users)
  2. Nhấn F12 → tab Network
  3. Reload trang (F5)
  4. Click vào request đầu tiên trong danh sách
  5. Quan sát:
    • Tab Headers: Method, URL, Status Code, Content-Type
    • Tab Response: Body JSON trả về
    • Tab Timing: Thời gian DNS lookup, TCP connect, TTFB

Câu hỏi tự kiểm tra: Status code là bao nhiêu? Content-Type là gì? Mất bao nhiêu ms?

Bài 2 — Gọi Public API bằng curl hoặc Postman

Dùng API miễn phí https://jsonplaceholder.typicode.com để thực hành:

# GET — lấy danh sách users (tương tự GET /api/customers trong CRM)
curl https://jsonplaceholder.typicode.com/users

# GET — lấy 1 user theo ID
curl https://jsonplaceholder.typicode.com/users/1

# POST — tạo mới (tương tự POST /api/customers)
curl -X POST https://jsonplaceholder.typicode.com/posts \
-H "Content-Type: application/json" \
-d '{"title":"Test","body":"Hello CRM","userId":1}'

# Xem cả response headers
curl -i https://jsonplaceholder.typicode.com/users/1

Nếu dùng Postman: Tạo collection "CRM Practice", thêm các request tương tự trên, quan sát status code và response body.

Thách thức thêm: Gọi DELETE /posts/1 và xem status code trả về là gì (204 hay 200?).

Bài 3 — Tạo Project .NET đầu tiên

# Kiểm tra .NET SDK đã cài
dotnet --version
# Output: 8.0.xxx

# Tạo console app
dotnet new console -n HelloCrm
cd HelloCrm

# Chạy
dotnet run
# Output: Hello, World!

Mở file Program.cs và thay nội dung:

// Mô phỏng đơn giản: deserialize JSON customer
using System.Text.Json;

string json = """
{
"id": 1,
"name": "Nguyen Van A",
"email": "a@example.com",
"isActive": true
}
""";

var customer = JsonSerializer.Deserialize<Customer>(json);
Console.WriteLine($"Chào mừng khách hàng: {customer?.Name} ({customer?.Email})");

record Customer(int Id, string Name, string Email, bool IsActive);
dotnet run
# Output: Chào mừng khách hàng: Nguyen Van A (a@example.com)

Khám phá thêm:

# Xem cấu trúc project
ls -la

# Tạo Web API project (preview cho những module sau)
dotnet new webapi -n MyCrmApi --no-openapi
cd MyCrmApi
dotnet run
# Truy cập: https://localhost:5001/weatherforecast

2.14.2 — Tóm tắt

Chủ đềĐiểm mấu chốt
InternetDNS phân giải domain → IP, TCP/IP vận chuyển data tin cậy
Client-ServerClient gửi request, Server trả response, API là hợp đồng giữa hai bên
HTTPMethod (GET/POST/PUT/DELETE) + Status Code (2xx/4xx/5xx) + Headers/Body
REST API & JSONURL là resource, method là hành động, JSON là ngôn ngữ trao đổi
DatabaseSQL Server cho CRM — table/row/column, JOIN, CRUD cơ bản
AuthAuthentication = xác minh danh tính; Authorization = kiểm tra quyền; JWT = token stateless
HostingDev → localhost; Production → Azure App Service + CI/CD
.NET Ecosystem.NET 8, CLR, SDK so với Runtime, NuGet, cấu trúc solution nhiều project

Luồng tổng quát của CRM:

User mở browser
→ DNS resolve crm.company.com → Azure IP
→ HTTPS (TLS) kết nối port 443
→ HTTP POST /auth/login → Server xác thực → JWT token
→ HTTP GET /api/customers (kèm JWT) → ASP.NET Core xử lý
→ Entity Framework query SQL Server
→ Trả JSON response → Frontend render danh sách KH

2.14.3 — Checklist trước khi sang bài tiếp theo

  • Bạn đã nắm được các khái niệm chính và giải thích lại được bằng ví dụ của riêng mình.
  • Bạn đã chạy hoặc mô phỏng ít nhất một ví dụ trong bài.
  • Bạn đã hoàn thành phần quiz/lab cơ bản (hoặc ít nhất tự làm lại theo trí nhớ).
  • Bạn đã ghi lại 3 ý chính: học được gì, còn vướng gì, sẽ áp dụng ở đâu trong CRM.

2.14.4 — Kiểm tra & Thực hành (100 điểm)

2.14.5 — Bối cảnh giáo trình (mục tiêu xuyên suốt)

Trục CRM — một mục tiêu rõ: bạn hướng tới CRM production trong From Zero → Senior .NET (Backend-first). Giáo trình ưu tiên backend, bám chuỗi API → dữ liệu → vận hành → kiến trúc phân tán, thay vì trải rộng theo hướng full-stack. Mỗi module củng cố một lớp kỹ năng trên cùng một CRM học tập bạn phát triển xuyên suốt khóa.

Chuỗi năng lựcĐóng góp vào CRM học tập
Giai đoạn 1 — FoundationĐọc hiểu yêu cầu, mô hình client–server, Git — nền collaboration khi CRM lớn dần.
Giai đoạn 2 — C# + P1Domain, OOP, LINQ, async, DI — rule nghiệp vụ & tầng ứng dụng (Inventory là bản mẫu trước CRM).
Giai đoạn 3 — ASP.NET + P2Host, routing, validation, JWT, SignalR — CRM Backend API thực tế.
Giai đoạn 4 — Data + P3SQL, EF, cache, job, container — CRM ổn định & có thể triển khai.
Giai đoạn 5 — Senior + FinalClean Architecture, event/outbox, gateway, observability, perf — CRM/ERP chịu tải & có chủ.

2.14.5.1 — Vai trò giai đoạn này trong chuỗi

Foundation: tư duy lập trình, mô hình web/HTTP, Git — đọc yêu cầu & làm việc nhóm trước khi chạm code CRM.

2.14.5.2 — Vị trí bài học (trước / sau)

MốcĐiểm nối trong giáo trình
TrướcModule 1 — Programming Logic
Tiếp theoModule 3 — Git + Developer Workflow

2.14.6 — Quy trình làm bài (hệ thống)

BướcViệc cần làmOutput nên có
1Làm Quiz trước, tự ghi đáp án + 1 dòng lý doKhông xem đáp án; giữ bản nháp
2Đối chiếu Đáp án; sửa hiểu sai, ghi takeaway vào README hoặc nhật ký học3–5 bullet “tôi đã hiểu…”
3Làm Lab theo rubric; trong README nêu phần CRM nào được chạm (Lead, Customer, Deal, Billing…)Repo / zip + ảnh dotnet run hoặc log
4Tự chấm theo bảng điểm; chuẩn bị 1 phút “vấn đáp” nếu mentor hỏi ngẫu nhiênĐiểm + chỗ còn yếu

2.14.7 — Phần A — Quiz trắc nghiệm (20 điểm)

Gợi ý làm bài: mỗi câu 4 điểm. Ưu tiên suy nghĩ hệ quả trên CRM (tiền, dữ liệu, đa tenant, hiệu năng, bảo mật) — không chỉ nhớ định nghĩa.

Mỗi câu 4 điểm.

  1. HTTP status 404 nghĩa là gì?
    A. Server lỗi nội bộ B. Không tìm thấy resource C. Chưa đăng nhập D. Thành công tạo mới

    Đáp án: B.

  2. Trong REST, thao tác cập nhật một phần thường dùng method nào (phổ biến)?
    A. GET B. POST C. PUT/PATCH D. CONNECT

    Đáp án: C — PATCH partial (tuỳ chuẩn hóa API).

  3. JWT gồm phần nào sau?
    A. Chỉ payload JSON B. Header.Payload.Signature C. Chỉ signature D. Cookie binary

    Đáp án: B.

  4. Authorization khác Authentication ở điểm nào?
    A. Giống nhau B. AuthN = ai bạn là; AuthZ = bạn được làm gì C. AuthN chỉ OAuth D. AuthZ chỉ HTTPS

    Đáp án: B.

  5. DNS dùng để?
    A. Mã hóa TLS B. Phân giải tên miền → IP C. Nén response D. Cân bằng tải HTTP

    Đáp án: B.

2.14.8 — Phần B — Lab thực tế (80 điểm)

Lab & rubric: trong README, map từng nhóm điểm rubric sang phần CRM (Lead, Customer, Deal, Billing, Notification…) và artifact (test, log, screenshot, migration).

Tiêu chíĐiểmGhi chú
Chạy thành công dotnet new console + ví dụ trong bài (in ra customer)25
Thử dotnet new webapi và gọi được endpoint mặc định (ảnh/Postman)25
Viết 1 đoạn (5–10 câu) giải thích luồng: Browser → HTTPS → API → DB (theo hiểu của bạn)20Nộp Markdown trong repo
Liệt kê 3 status code đã gặp khi test API + ý nghĩa10
Repo/README có hướng dẫn chạy10

2.14.8.1 — Ngưỡng tổng điểm (Quiz 20 + Lab 80)

MứcĐiểmÝ nghĩa
Đạt≥ 70Đủ nền để học module kế mà không “lủng” kiến thức cốt lõi.
Khá≥ 85Có minh chứng code + nêu được liên hệ CRM rõ ràng trong README.
Giỏi≥ 95Có mở rộng / edge case / ADR ngắn / test bổ trợ (tùy rubric từng bài).

2.14.9 — Phần C — Reflect & nối chuỗi (không chấm điểm)

Viết 5–8 câu (README hoặc docs/learning-log.md):

  1. Kiến thức module / project này sẽ được tái sử dụng trực tiếp ở module hoặc project CRM nào tiếp theo? (ghi tên module / P2 / P3 / Final).
  2. Nếu bỏ qua phần lab, rủi ro lớn nhất cho CRM ở giai đoạn sau là gì?
  3. Một quyết định kỹ thuật (nhỏ) bạn sẵn sàng ghi thành ADR một đoạn sau khi làm lab.

2.14.10 — Tài liệu tham khảo

Bài tập tổng hợp

  1. Tóm tắt bài học bằng ngôn ngữ của bạn.
  2. Liên hệ nội dung với một tình huống thực tế trong dự án.
  3. Đề xuất một cải tiến cụ thể sau khi học bài này.

Tự kiểm tra

  • Bạn có thể giải thích lại nội dung chính trong 2 phút không?
  • Bạn có ví dụ áp dụng thực tế chưa?
  • Bạn biết bước tiếp theo cần học/triển khai là gì không?

Kết luận

Hoàn thành bài này giúp bạn có góc nhìn đầy đủ hơn trước khi đi tiếp trong module.

Điều hướng