Server
Server Tài liệu này bao quát kiến trúc, API và hướng dẫn phát triển của Enfyra server. Nội dung được tổ chức để giúp bạn tìm thông tin nhanh, dù bạn đang học những điều cơ bản hay tra cứu chi tiết cụ thể. Mới dùng Enfyra? Hãy bắt đầu với Hướng dẫn cài đặt để thiết lập workspace a
Server
Tài liệu này bao quát kiến trúc, API và hướng dẫn phát triển của Enfyra server. Nội dung được tổ chức để giúp bạn tìm thông tin nhanh, dù bạn đang học những điều cơ bản hay tra cứu chi tiết cụ thể.
Mới dùng Enfyra? Hãy bắt đầu với Hướng dẫn cài đặt để thiết lập workspace app + server.
Điều hướng nhanh
Bắt đầu
- Phương thức Repository - Hướng dẫn đầy đủ về các thao tác cơ sở dữ liệu (find, create, update, delete)
- Tham chiếu Context - Toàn bộ thuộc tính và phương thức có trong
$ctx - Vòng đời API - Cách request đi qua hệ thống
Khái niệm cốt lõi
- Hooks và Handlers - Tạo preHooks, postHooks và handler tùy chỉnh
- Guards - Bảo vệ route theo khai báo (chặn IP, giới hạn tốc độ)
- Lọc truy vấn - Toán tử lọc giống MongoDB và ví dụ
- Xử lý lỗi - Ném lỗi và xử lý ngoại lệ
Bảo mật & kiểm soát truy cập
- Quyền trường - Kiểm soát truy cập theo cột và quan hệ (mốc
isPublished+ quy tắc) - Guards - Bảo vệ route theo khai báo (chặn IP, giới hạn tốc độ)
Chủ đề nâng cao
- Hướng dẫn WebSocket - Giao tiếp WebSocket thời gian thực
- Thao tác Cache - Cache phân tán và khóa
- Xử lý tệp - Tải lên và quản lý tệp
- Kiến trúc Cluster - Phối hợp nhiều instance
- Quản trị Redis Runtime - Có trong tab Redis của Runtime Monitor thuộc app quản trị; hiển thị các nhóm Redis của app hiện tại, phân bổ user-cache và các khóa
$cachecó thể chỉnh sửa - Xem trước migration schema -
enfyra_tablePATCH, hash và cảnh báo xóa quan hệ đã được xác nhận
Tìm nội dung bạn cần
"Tôi muốn truy vấn dữ liệu từ một bảng"
Xem Tìm bản ghi
"Tôi cần tạo một bản ghi mới"
Xem Tạo bản ghi
"Tôi muốn cập nhật một bản ghi"
Xem Cập nhật bản ghi
"Tôi cần xóa một bản ghi"
Xem Xóa bản ghi
"Những thuộc tính nào có trong $ctx?"
"Làm cách nào để truy cập request body và params?"
Xem Tham chiếu Context - Dữ liệu Request
"Làm cách nào để dùng repository trong mã của tôi?"
Xem Tham chiếu Context - Repositories
"Có những hàm helper nào?"
Xem Tham chiếu Context - Helpers & Cache
"Vòng đời request hoạt động thế nào?"
Xem Vòng đời API
"Các hook thực thi theo thứ tự nào?"
Xem Vòng đời API - Thứ tự thực thi
"Tôi muốn kiểm tra dữ liệu trước khi lưu"
Xem Hooks và Handlers - preHooks
"Tôi cần chỉnh sửa dữ liệu response"
Xem Hooks và Handlers - postHooks
"Tôi muốn viết logic nghiệp vụ tùy chỉnh"
Xem Hooks và Handlers - Custom Handlers
"Làm cách nào để lọc dữ liệu với điều kiện phức tạp?"
Xem Lọc truy vấn
"Làm cách nào để ném lỗi đúng cách?"
Xem Xử lý lỗi
"Tôi muốn kiểm soát ai có thể xem các cột cụ thể"
Xem Quyền trường
"Tôi muốn bảo vệ API của mình khỏi bị lạm dụng"
Xem Guards để bảo vệ route theo khai báo, hoặc Tham chiếu Context - Helpers & Cache để giới hạn tốc độ bằng mã
"Tôi cần dùng Redis cache"
Xem Thao tác Cache
"Tôi muốn tải tệp lên"
Xem Xử lý tệp
"Tôi cần giao tiếp WebSocket thời gian thực"
"Repository hoạt động thế nào?"
"Repository có những phương thức nào?"
Xem Phương thức Repository - Danh sách đầy đủ các phương thức find, create, update, delete
Cấu trúc tài liệu
Toàn bộ tài liệu được tổ chức theo từng bước, với ví dụ và giải thích rõ ràng. Mỗi tài liệu tập trung vào một chủ đề cụ thể và gồm:
- Tổng quan - Chủ đề nói về điều gì
- Hướng dẫn từng bước - Cách sử dụng
- Ví dụ - Ví dụ mã thực tế
- Tham chiếu - Tham chiếu API đầy đủ
- Mẫu phổ biến - Thực hành tốt và mẹo
Tổng quan về phương thức Repository
Repository là cách chính để tương tác với các bảng cơ sở dữ liệu. Mỗi bảng bạn tạo tự động có một repository, có thể truy cập qua $ctx.$repos.tableName.
Các phương thức có sẵn: - Find - Truy vấn bản ghi có lọc, sắp xếp và phân trang - Create - Tạo bản ghi mới - Update - Cập nhật bản ghi hiện có theo ID - Delete - Xóa bản ghi theo ID
Mọi phương thức đều trả về dữ liệu theo định dạng nhất quán: { data: [...], meta: {...} }
Xem Hướng dẫn phương thức Repository để biết đầy đủ chi tiết.
Tổng quan về đối tượng Context
Đối tượng $ctx (context) có sẵn trong mọi hook và handler. Đối tượng này cung cấp quyền truy cập đến:
- Dữ liệu Request:
$ctx.$body,$ctx.$params,$ctx.$query,$ctx.$user - Repositories:
$ctx.$repos.tableNameđể thao tác cơ sở dữ liệu - Helpers:
$ctx.$helperscho JWT, bcrypt, thao tác tệp - Cache:
$ctx.$cachecho các thao tác Redis - Ghi log:
$ctx.$logs()để thêm log vào response - Xử lý lỗi:
$ctx.$throw['400']()để ném lỗi
Xem Tham chiếu Context để biết đầy đủ chi tiết.
Tổng quan về vòng đời API
Mỗi API request đi theo luồng sau:
- Phát hiện Route - Hệ thống khớp request với định nghĩa route
- Guards trước xác thực - Chặn IP, giới hạn tốc độ toàn cục
- Thiết lập Context - Tạo
$ctxvới repository và helper - Xác thực - Xác minh JWT và kiểm tra role
- Guards sau xác thực - Giới hạn tốc độ theo người dùng
- Thực thi preHooks - Chạy tuần tự mọi preHook khớp
- Thực thi Handler - Handler tùy chỉnh hoặc thao tác CRUD mặc định
- Thực thi postHooks - Chạy tuần tự mọi postHook khớp
- Response - Trả về dữ liệu đã xử lý
Cùng một đối tượng $ctx đi qua mọi giai đoạn, nên các thay đổi trong preHooks sẽ hiển thị cho handler và postHooks.
Xem Vòng đời API để biết đầy đủ chi tiết.
Lộ trình học
Mới dùng Enfyra Server? Hãy theo lộ trình từng bước này:
- Phương thức Repository - Bắt đầu tại đây! Học cách truy vấn, tạo, cập nhật và xóa bản ghi
- Tham chiếu Context - Hiểu mọi thuộc tính và phương thức có trong
$ctx - Vòng đời API - Tìm hiểu cách request đi qua hệ thống
- Hooks và Handlers - Tùy chỉnh hành vi API bằng hook và handler
- Guards - Bảo vệ route bằng chặn IP và giới hạn tốc độ
- Lọc truy vấn - Thành thạo việc lọc và truy vấn dữ liệu
- Xử lý lỗi - Xử lý lỗi đúng cách
Chủ đề nâng cao: - Thao tác Cache - Cache phân tán và khóa - Xử lý tệp - Tải lên và quản lý tệp - Kiến trúc Cluster - Phối hợp nhiều instance
Bước tiếp theo
- Bắt đầu với Phương thức Repository để tìm hiểu các thao tác cơ sở dữ liệu
- Đọc Tham chiếu Context để hiểu các thuộc tính có sẵn
- Xem Vòng đời API để biết mọi thành phần kết hợp với nhau thế nào
- Khám phá Hooks và Handlers để tùy chỉnh
Với câu hỏi cụ thể, hãy dùng phần Điều hướng nhanh ở trên để chuyển thẳng đến tài liệu liên quan.