FastUI: Tạo web UI nhanh hơn và tốt hơn bằng Python
(github.com/pydantic)- FastUI là một cách mới để xây dựng giao diện người dùng cho ứng dụng web bằng mã Python khai báo
- Một tập hợp các mô hình Pydantic và interface TypeScript dùng để định nghĩa giao diện người dùng
- Nếu là nhà phát triển Python, bạn có thể xây dựng web app phản hồi bằng React mà không cần dùng JavaScript hay npm
- Nhà phát triển frontend có thể tập trung xây dựng các component có thể tái sử dụng mà không phải sao chép-dán lặp đi lặp lại
- Với tất cả người dùng, có thể đạt được sự phân tách trách nhiệm thực sự: backend định nghĩa toàn bộ ứng dụng còn frontend chỉ triển khai giao diện người dùng
- Cung cấp sẵn nhiều component: xác thực dựa trên token, GitHub OAuth, Markdown, Text, Paragraph, Heading, Code, Button, Link, Navbar, Modal, ServerLoad, Image, Iframe, Video, Table, Pagination, ModelForm
Cách dùng thực tế
- FastUI gồm bốn phần:
- Gói PyPI
fastui: cung cấp các mô hình Pydantic và utility cho UI component. Hoạt động rất tốt với FastAPI nhưng không phụ thuộc vào FastAPI, và cũng có thể dùng với các web framework Python khác. - Gói npm
@pydantic/fastui: gói React TypeScript cho phép tái sử dụng cơ chế và kiểu của FastUI khi triển khai component riêng. - Gói npm
@pydantic/fastui-bootstrap: triển khai/tùy biến toàn bộ component FastUI bằng Bootstrap. - Gói npm
@pydantic/fastui-prebuilt: cung cấp phiên bản dựng sẵn của ứng dụng FastUI React mà không cần cài gói npm hay tự build bất kỳ thứ gì. Gói Python cung cấp một trang HTML đơn giản để phục vụ ứng dụng này.
- Gói PyPI
Nguyên tắc (bản dài)
- FastUI là một triển khai của các nguyên tắc RESTful, nhưng không theo cách thường được hiểu, mà theo các nguyên tắc được định nghĩa trong luận án tiến sĩ của Roy Fielding.
- Theo các nguyên tắc RESTful, frontend không cần biết về ứng dụng đang được xây dựng, mà chỉ cần cung cấp mọi component cần thiết để cấu thành giao diện.
- Xây dựng ứng dụng theo cách này mang lại nhiều lợi ích quan trọng:
- Chỉ cần viết mã ở một nơi để xây dựng tính năng mới.
- Có thể tách biệt hoàn toàn việc triển khai frontend và backend.
- Có thể tái sử dụng bộ component mã nguồn mở, vì các component không cần biết ngữ cảnh mà chúng sẽ được dùng.
- Có thể dùng Pydantic, TypeScript và JSON schema để đảm bảo hai phía đang giao tiếp bằng một schema đã được thống nhất.
Vượt ra ngoài Python và React
- Nguyên tắc này không chỉ giới hạn ở ứng dụng Python và React; miễn là giao tiếp bằng cùng schema và cách mã hóa đã thống nhất, nó có thể được dùng bởi bất kỳ frontend và backend nào triển khai schema đó.
Ý kiến của GN⁺
- FastUI có tiềm năng đơn giản hóa quy trình phát triển bằng cách cung cấp cho nhà phát triển backend một phương thức hiệu quả để mở rộng ứng dụng mà không cần phát triển frontend.
- Công nghệ này làm rõ sự phân chia vai trò giữa frontend và backend, qua đó tạo ra môi trường giúp tận dụng tối đa chuyên môn của từng bên.
- Hiện tại FastUI vẫn là một dự án đang trong quá trình phát triển, vì vậy cần xem xét kỹ về độ ổn định và tính năng trước khi sử dụng trong môi trường production thực tế.
- Khi áp dụng FastUI, cần cân nhắc khả năng tương thích với quy trình phát triển frontend hiện có, khả năng tái sử dụng và mở rộng của component, cũng như khía cạnh bảo trì dài hạn của dự án.
- Lợi ích khi chọn công nghệ này là rút ngắn thời gian phát triển và thúc đẩy quy trình phát triển lấy backend làm trung tâm, nhưng đổi lại độ linh hoạt của frontend có thể bị hạn chế, đồng thời sự hỗ trợ từ cộng đồng và tài liệu có thể còn tương đối thiếu.
1 bình luận
Ý kiến trên Hacker News
Ý kiến về việc ghép chặt tầng trình bày với mã nguồn
Kinh nghiệm phát triển ứng dụng với FastUI và Streamlit
Ý kiến về Django và HTMX
Tính thực dụng của ứng dụng nội bộ trong việc xử lý sự kiện phía máy chủ
Sự gia tăng của các framework frontend cần backend server
So sánh trải nghiệm giữa FastUI và NiceGUI
Ảnh hưởng của sự phát triển AI tới use case của dự án
Kinh nghiệm phát triển side project bằng Dart/Flutter
So sánh với Java Server Faces và giới hạn của trừu tượng hóa phía máy chủ
Câu hỏi liệu round trip tới server có phù hợp để xây dựng giao diện người dùng hay không