- vừa được xem lúc

Hiểu về xác thực: Client, API, Model, and Database Layers

0 0 1

Người đăng: Bùi Văn Thượng

Theo Viblo Asia

1. Validate Client (Frontend Validation)

  • Mục đích: Kiểm tra và ngăn chặn dữ liệu không hợp lệ trước khi gửi đến server.
  • Công cụ thường dùng:
    • HTML5: Các thuộc tính như required, maxlength, pattern, min, max.
    • JavaScript: Viết mã để kiểm tra các logic phức tạp hơn.
    • Thư viện: React Hook Form, Formik, VeeValidate (Vue.js).
  • Ví dụ:
    <form> <input type="text" name="username" required pattern="[a-zA-Z0-9]+" maxlength="20"> <input type="email" name="email" required> <button type="submit">Submit</button>
    </form>
    
  • Ưu điểm:
    • Trải nghiệm người dùng tốt hơn với phản hồi nhanh.
    • Giảm tải cho server vì yêu cầu sai không được gửi đi.
  • Nhược điểm:
    • Không đáng tin cậy: Người dùng có thể bỏ qua bằng cách tắt JavaScript hoặc chỉnh sửa request trực tiếp.

2. Validate API

  • Mục đích: Kiểm tra dữ liệu từ request trước khi backend xử lý.
  • Áp dụng: Khi ứng dụng của bạn có giao tiếp API (REST, GraphQL).
  • Công cụ thường dùng:
    • Rails: Strong Parameters (requirepermit).
    • OpenAPI hoặc JSON Schema để định nghĩa các rule kiểm tra.
  • Ví dụ trong Rails:
    def create user_params = params.require(:user).permit(:username, :email, :password) @user = User.new(user_params) if @user.save render json: @user, status: :created else render json: @user.errors, status: :unprocessable_entity end
    end
    
  • Ưu điểm:
    • Xác thực dữ liệu ngay khi request đến server.
    • Dễ mở rộng và áp dụng cho các API công khai.
  • Nhược điểm:
    • Yêu cầu đồng bộ với các tầng khác như model hoặc database.

3. Validate Model (Backend Validation)

  • Mục đích: Kiểm tra tính hợp lệ của dữ liệu trước khi lưu vào cơ sở dữ liệu.
  • Công cụ thường dùng:
    • Rails: Validation trong model (validates).
    • Django: validators trong model.
  • Ví dụ trong Rails:
    class User < ApplicationRecord validates :username, presence: true, uniqueness: true, length: { maximum: 20 } validates :email, presence: true, format: { with: URI::MailTo::EMAIL_REGEXP }
    end
    
  • Ưu điểm:
    • Đảm bảo dữ liệu hợp lệ trước khi lưu.
    • Cung cấp các thông báo lỗi cụ thể để gửi phản hồi cho client.
  • Nhược điểm:
    • Validation trong model có thể trùng lặp với tầng API.

4. Validate Database

  • Mục đích: Bảo vệ dữ liệu ở tầng thấp nhất, đảm bảo tính toàn vẹn dù có lỗi ở các tầng khác.
  • Công cụ thường dùng: Constraint trong database (PostgreSQL, MySQL,...).
  • Ví dụ:
    CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
    );
    
    • NOT NULL: Đảm bảo trường không được để trống.
    • UNIQUE: Đảm bảo giá trị không trùng lặp.
    • CHECK: Kiểm tra dữ liệu theo điều kiện (ví dụ, tuổi > 18).
    • FOREIGN KEY: Ràng buộc dữ liệu giữa các bảng.
  • Ưu điểm:
    • Đảm bảo dữ liệu luôn chính xác ngay cả khi truy cập trực tiếp vào database.
  • Nhược điểm:
    • Lỗi khó đọc hơn nếu không xử lý tốt (ví dụ, "Unique Constraint Violated").
    • Không phù hợp để kiểm tra các logic phức tạp.

So sánh các tầng Validation

Loại Validation Vị trí Mục đích Ưu điểm Nhược điểm
Client Frontend Ngăn dữ liệu sai trước khi gửi đến server. Phản hồi nhanh, giảm tải server. Không đáng tin cậy, dễ bị bỏ qua.
API Controller hoặc Schema Xác thực request từ client trước khi xử lý trong backend. Tách biệt rõ ràng logic với tầng khác. Phức tạp nếu phải đồng bộ với các tầng khác.
Model Backend (Model) Đảm bảo dữ liệu hợp lệ trước khi lưu vào database. Gắn chặt với logic của ứng dụng. Dễ bị trùng lặp với tầng API.
Database Tầng cơ sở dữ liệu Đảm bảo tính toàn vẹn dữ liệu ở cấp thấp nhất. Chắc chắn và bảo vệ dữ liệu mạnh mẽ. Khó phản hồi lỗi chi tiết cho người dùng.

Khi nào nên sử dụng?

  • Sử dụng kết hợp tất cả các tầng để đạt hiệu quả tối đa:
    1. Client: Để cải thiện UX (trải nghiệm người dùng).
    2. API: Bảo vệ logic ở tầng giao tiếp giữa client và server.
    3. Model: Đảm bảo dữ liệu luôn hợp lệ trong ứng dụng.
    4. Database: Bảo vệ dữ liệu, ngăn chặn thao tác không hợp lệ ở tầng thấp nhất.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tìm hiểu về Jquery Validation (Phần 1)

Sau đây, tôi sẽ giới thiệu với bạn về Jquery Validation - một Plugin mà tôi đang dùng trong dự án. Jquery Validation giúp cho việc validate ở clientside trở nên dễ dàng hơn, trong khi vẫn cung cấp nhi

0 0 35

- vừa được xem lúc

Đừng validation bằng tay trong Spring Boot (phần 1)

Bài hôm nay mình sẽ trình bày một khái niệm cực kì quan trọng với mọi hệ thống backend. Hẳn mọi người đã từng nghe điều này.

0 0 76

- vừa được xem lúc

Cơ bản về Validation trong Laravel

Cho dù các bạn đang sử dụng ngôn ngữ lập trình nào thì việc kiểm tra tính hợp lệ của dữ liệu khi người dùng gửi lên cũng đều rất cần thiết. Trong bài viết này mình sẽ giới thiệu với các bạn về việc xử

0 0 158

- vừa được xem lúc

Validation trong Laravel (P1)

Giới thiệu. Khi làm việc với bất kì ngôn ngữ lập trình nào thì việc kiểm tra tính hợp lệ của các dữ liệu input là điều không thể thiếu, đặc biệt khi dữ liệu input đến từ phía người sử dụng thông qua c

0 0 35

- vừa được xem lúc

How To Make Responsive Login Form Using HTML CSS JavaScript with Validation

How To Make Responsive Login Form Using HTML CSS JavaScript with Validation. . In this video, we will Make Responsive Login Form Using HTML CSS JavaScript with Validation. .

0 0 107

- vừa được xem lúc

How To Make Gooey Button Hover Effect Using HTML and CSS

How To Make Gooey Button Hover Effect Using HTML and CSS. . In this video, we will Make Gooey Button Hover Effect Using HTML and CSS. .

0 0 67