19 giờ trước
- vừa được xem lúc 8 giờ trướ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)
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 (require
và permit
).
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:
Client : Để cải thiện UX (trải nghiệm người dùng).
API : Bảo vệ logic ở tầng giao tiếp giữa client và server.
Model : Đảm bảo dữ liệu luôn hợp lệ trong ứng dụng.
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ài viết tương tự
26/01/2018
- vừa được xem lúc 8 giờ trước
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
05/05/2021
- vừa được xem lúc 7 giờ trước
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
07/05/2021
- vừa được xem lúc 7 giờ trước
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
29/01/2018
- vừa được xem lúc 8 giờ trước
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
19/05/2021
- vừa được xem lúc 8 giờ trước
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
20/05/2021
- vừa được xem lúc 7 giờ trước
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