0
0
Lập trình
NM

Eskema: Thư viện xác thực dữ liệu mạnh mẽ cho Dart

Đăng vào 1 tháng trước

• 3 phút đọc

Giới thiệu về Eskema

Mỗi dự án Dart đều có một file mà bạn biết rõ — file chứa đầy những câu lệnh kiểm tra như if (value == null || value is! String || value.isEmpty). Đó chính là file mà mọi người thường tránh xa vì nó trở nên phức tạp và khó hiểu. Điều này đã khiến tôi tạo ra Eskema.

Eskema là một thư viện xác thực dữ liệu mạnh mẽ, giúp bạn dễ dàng kiểm tra các giá trị mà không phải lo lắng về việc tạo mã tự động phức tạp. Thư viện này mang lại sự đơn giản và khả năng mở rộng cao, phù hợp với mọi nhu cầu xác thực của bạn.

Tại sao chọn Eskema?

Tính năng nổi bật

  • API có thể kết hợp: Các bộ xác thực trong Eskema chỉ là các hàm Dart nhận giá trị và trả về Result. Bạn có thể kết hợp chúng một cách tự do với các toán tử như all(), or(), hoặc toán tử &/|. Điều này giúp logic xác thực trở nên dễ hiểu và dễ tuỳ biến.

  • Bộ xác thực tích hợp phong phú: Eskema cung cấp nhiều kiểu kiểm tra như isString(), isInt(), isEmail(), và nhiều hơn nữa. Các kiểm tra sự hiện diện và so sánh cũng được tích hợp sẵn.

  • Cú pháp toán tử: Bạn có thể kết hợp các bộ xác thực bằng toán tử & (AND) và | (OR), và đảo ngược kiểm tra với not(). Ví dụ, thay vì viết all([isString(), isNotEmpty()]), bạn có thể viết $isString & isNotEmpty().

  • Ngữ nghĩa tùy chọn và có thể null: Mặc định, một khóa phải có mặt và không null. Bạn có thể sử dụng nullable(validator) để cho phép trường có thể là null, hoặc optional(validator) để cho phép nó không có mặt hoàn toàn.

  • API builder: Eskema cung cấp một API builder cho những ai thích một cách tiếp cận an toàn về kiểu dữ liệu. Ví dụ:

    Copy
    final userValidator = $map().schema({
      'id': $string().trim().toIntStrict().gt(0),
      'email': $string().trim().toLowerCase().email(),
      'age': $string().toIntStrict().gte(18).optional(),
    });
  • Không cần mã tự động: Eskema xác thực các bản đồ và giá trị Dart thông thường trong thời gian chạy, không cần bước dựng mã hay lớp được tạo tự động.

  • Sẵn sàng cho sản xuất: Thư viện đã được kiểm tra đầy đủ, có tài liệu và thông báo lỗi hợp lý.

Ví dụ Xác thực Chức năng

Dưới đây là một bộ xác thực cho một đối tượng người dùng sử dụng API chức năng:

dart Copy
final userSchema = eskema({
  'username': isString() & isNotEmpty(),
  'password': isString() & hasLength(8, 32),
  'email': isString() & isEmail(),
  'signupDate': optional(isDateTime()),
});

final result = userSchema.validate({
  'username': 'alice',
  'password': 'secret123',
  'email': 'alice@example.com',
  // signupDate bỏ qua là OK (tùy chọn)
});

if (!result.isValid) {
  print(result.expectations);
}

So sánh Trước và Sau khi dùng Eskema

Chúng ta đều đã từng viết mã xác thực như thế này:

dart Copy
bool validateUser(Map<String, dynamic> user) {
  if (user['username'] == null || user['username'] is! String || user['username'].isEmpty) {
    return false;
  }

  // Các kiểm tra khác...
  return true;
}

Với Eskema, bạn có thể viết lại logic này một cách rõ ràng và dễ hiểu hơn:

dart Copy
final userSchema = eskema({
  'username': isString() & isNotEmpty(),
  'password': isString() & hasLength(8, 32),
  'email': isString() & isEmail(),
});

final result = userSchema.validate({...});
print(result.isValid); // true

Sử dụng Builder

Đối với những ai thích cách tiếp cận mượt mà, API builder của Eskema cho phép bạn kết hợp các bộ xác thực một cách dễ dàng và an toàn:

dart Copy
final mapValidator = $map().schema({
  'id': $string().trim().toIntStrict().gt(0),
  'tags': $list().each($string()).lengthMin(1),
});

final res = mapValidator.validate({'id': '42', 'tags': ['dart', 'eskema']});
print(res.isValid); // true

Mẹo và Thực hành Tốt

  • Sử dụng các phím tắt $: Nhiều bộ xác thực không tham số có alias được lưu trữ.
  • Sử dụng toán tử: Làm quen với các toán tử &, |not().
  • Thông báo lỗi rõ ràng: Sử dụng > để ghi đè thông điệp.
  • Hỗ trợ bất đồng bộ: Cần kiểm tra bất đồng bộ? Chỉ cần sử dụng .validateAsync().

Kết luận

Eskema giúp bạn đơn giản hóa quá trình xác thực dữ liệu với cú pháp rõ ràng và linh hoạt. Nếu ứng dụng của bạn xử lý dữ liệu động, hãy thử Eskema. Một vài bộ xác thực tiện lợi có thể giúp bạn tránh khỏi các lỗi khó chịu và nâng cao hiệu suất lập trình.

👉 Hãy trải nghiệm ngay: Eskema trên GitHub.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào