Bạn nên làm gì trước khi coi một tính năng là 'hoàn thành'?
Các tính năng sẵn sàng cho sản phẩm cần phải vượt qua những bài kiểm tra, xử lý các trường hợp ngoại lệ, có tài liệu và lịch sử git sạch sẽ. Code hoạt động chỉ là bước khởi đầu.
Trong bài học trước, chúng ta đã khám phá các quy trình làm việc nâng cao. Bây giờ, hãy xây dựng trên nền tảng đó. Đã đến lúc kết hợp mọi thứ lại với nhau. Chúng ta sẽ cùng nhau xây dựng một tính năng hoàn chỉnh bằng cách sử dụng tất cả các kỹ thuật từ sê-ri này.
Đây không phải là một ví dụ đơn giản. Đây là quy trình làm việc thực tế được sử dụng cho code sản xuất.
Chúng ta sẽ thêm tính năng giới hạn tốc độ vào API Express.js. Yêu cầu:
Hãy bắt đầu xây dựng.
Chưa cần viết code. Hãy lập kế hoạch trước.
> Tôi cần thêm tính năng giới hạn tốc độ API vào ứng dụng Express.js.
> Yêu cầu:
> - Giới hạn truy cập theo API key cho mỗi người dùng
> - Giới hạn có thể cấu hình
> - Phản hồi lỗi 429 đúng cách
> - Bỏ qua kiểm tra quản trị viên
> - Hỗ trợ bởi Redis
> - Kiểm thử toàn diện
>
> Phác thảo cách triển khai:
> 1. Cần tạo những file nào?
> 2. Cần sửa đổi những file hiện có nào?
> 3. Thứ tự triển khai như thế nào?
> Chưa viết code.Claude lập kế hoạch. Xem xét lại. Đặt câu hỏi:
> Tại sao lại dùng Redis thay vì bộ nhớ trong? Nếu muốn hỗ trợ cả hai thì sao?> Chúng ta sẽ xử lý việc bỏ qua kiểm tra quản trị viên như thế nào - kiểm tra tiêu đề hay tra cứu cơ sở dữ liệu?Đạt được sự đồng thuận trước khi triển khai.
Thêm các file liên quan:
/add src/middleware/*.js
/add src/config/index.js
/add package.json
/add tests/middleware/*.test.jsKiểm tra ngữ cảnh:
/lsChúng ta sẽ thấy các mẫu middleware và cấu trúc cấu hình.
Xây dựng bộ giới hạn tốc độ:
> Tạo middleware giới hạn tốc độ tại src/middleware/rate-limiter.js
>
> Yêu cầu từ kế hoạch của chúng ta:
> - Thuật toán Token bucket
> - Lưu trữ Redis (với dự phòng trong bộ nhớ)
> - Giới hạn có thể cấu hình từ file cấu hình
> - Trả về code 429 với tiêu đề Retry-After
>
> Làm theo các mẫu từ những file middleware hiện có.Claude tạo middleware. Xem xét nó:
> Hãy giải thích cách Token bucket được nạp lại.> Điều gì xảy ra nếu Redis không khả dụng?Khắc phục mọi sự cố:
> Logic dự phòng chưa hoàn toàn chính xác. Khi Redis gặp lỗi, nó nên:
> - Ghi nhật ký lỗi
> - Chuyển sang sử dụng bộ nhớ trong
> - Tiếp tục kiểm tra giới hạn
> Khắc phục điều này.Trước khi tích hợp, hãy viết các bài test:
> Tạo các bài test cho bộ giới hạn tốc độ tại tests/middleware/rate-limiter.test.js
>
> Các trường hợp kiểm thử:
> - Cho phép các yêu cầu dưới giới hạn
> - Chặn các yêu cầu vượt quá giới hạn
> - Trả về phản hồi 429 chính xác với Retry-After
> - Chức năng bỏ qua quản trị viên hoạt động
> - Chức năng dự phòng khi Redis gặp lỗi hoạt động
> - Giới hạn được reset sau khi cửa sổ hết hạnChạy các bài test:
> Chạy các bài test. Tất cả đều phải vượt qua.Nếu các bài test thất bại, hãy lặp lại:
> Bài kiểm thử 3 đang thất bại. Tiêu đề Retry-After không được thiết lập.
> Sửa middleware.Bây giờ hãy kết nối nó:
/add src/app.js
> Tích hợp middleware giới hạn tốc độ.
> - Áp dụng toàn hệ thống nhưng sau middleware xác thực
> - Sử dụng cấu hình cho các giá trị giới hạn
> - Thêm vào chuỗi middleware theo đúng thứ tựThêm cấu hình:
/add src/config/index.js
> Thêm cấu hình giới hạn tốc độ:
> - RATE_LIMIT_WINDOW_MS (default 60000)
> - RATE_LIMIT_MAX_REQUESTS (default 100)
> - RATE_LIMIT_ADMIN_BYPASS (default true)Cần củng cố thêm:
> Xem xét lại bộ giới hạn tốc độ cho các trường hợp ngoại lệ:
> - Điều gì xảy ra nếu thiếu API key?
> - Điều gì xảy ra nếu API key bị lỗi định dạng?
> - Còn về tình trạng tranh chấp dữ liệu trong môi trường phân tán thì sao?
> - Điều gì xảy ra nếu cấu hình giới hạn không hợp lệ?
>
> Thêm xử lý cho bất kỳ lỗ hổng nào.Claude xác định các vấn đề và khắc phục chúng.
> Tạo tài liệu cho tính năng giới hạn tốc độ:
> - Thêm phần về giới hạn tốc độ vào README
> - Thêm chú thích JSDoc nội tuyến vào middleware
> - Tài liệu hóa các tùy chọn cấu hình
> - Thêm ví dụ về cách kiểm tra giới hạn tốc độĐánh giá đầy đủ trước khi cam kết:
> Xem xét lại tất cả những gì chúng ta đã xây dựng:
> - src/middleware/rate-limiter.js
> - tests/middleware/rate-limiter.test.js
> - Các thay đổi đối với src/app.js và cấu hình
>
> Có vấn đề gì không? Thiếu trường hợp kiểm thử? Có lỗi tiềm ẩn?Chạy các bài kiểm tra cuối cùng:
> Chạy tất cả các bài kiểm tra. Xác nhận mọi thứ đều đạt.Kiểm tra trạng thái git:
git status
git diffXóa lịch sử git:
git add src/middleware/rate-limiter.js
git commit -m "feat: thêm middleware giới hạn tốc độ với lưu trữ Redis"
git add tests/middleware/rate-limiter.test.js
git commit -m "test: thêm độ phủ kiểm thử giới hạn tốc độ"
git add src/app.js src/config/index.js
git commit -m "feat: tích hợp giới hạn tốc độ toàn hệ thống"
git add README.md
git commit -m "docs: tài liệu cấu hình giới hạn tốc độ"Các cam kết logic mà mỗi cam kết có thể được hoàn tác độc lập.
Hãy tự xây dựng tính năng này bằng Claude Code:
Tính năng: Ghi nhật ký yêu cầu API
Yêu cầu:
Quy trình làm việc của bạn nên bao gồm:
Sử dụng tất cả những gì bạn đã học.
Bạn đã có nền tảng. Bây giờ:
Hãy bắt tay vào xây dựng một cái gì đó.
Bạn nên làm gì trước khi coi một tính năng là 'hoàn thành'?
Các tính năng sẵn sàng cho sản phẩm cần phải vượt qua những bài kiểm tra, xử lý các trường hợp ngoại lệ, có tài liệu và lịch sử git sạch sẽ. Code hoạt động chỉ là bước khởi đầu.
Bạn nên xử lý một tính năng trải rộng trên nhiều file như thế nào?
Các tính năng nhiều file cần những file liên quan trong ngữ cảnh để đảm bảo tính nhất quán, triển khai từng bước để phát hiện sớm các vấn đề và xác minh ở mỗi bước.
Bước đầu tiên khi bắt đầu một tính năng mới với Claude Code là gì?
Luôn bắt đầu bằng việc hiểu rõ những gì bạn đang xây dựng và lập kế hoạch tiếp cận. Bắt tay vào viết code mà không có kế hoạch sẽ dẫn đến việc phải làm lại.
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:









