- Lavandula là một web framework nhẹ dựa trên ngôn ngữ C, được thiết kế cho phát triển ứng dụng web hiện đại
- Cung cấp môi trường phát triển trực quan và nhanh chóng, tập trung vào năng suất và hiệu năng mà không có các tính năng thừa
- Bao gồm hầu hết các tính năng thiết yếu như hệ thống controller/routing, pipeline middleware, framework kiểm thử, thư viện SQLite/JSON
- Trong tương lai dự kiến sẽ mở rộng thêm các tính năng như ORM, cookie phiên, phục vụ tệp tĩnh, tích hợp nhiều cơ sở dữ liệu khác nhau
- Tối đa hóa sự tiện lợi cho nhà phát triển với tạo dự án nhanh bằng CLI, unit test tích hợp sẵn, hỗ trợ biến môi trường và logging
Lavandula: Tổng quan về web framework C hiệu năng cao, gọn nhẹ
- Lavandula là một web framework nhẹ viết bằng C được thiết kế để tạo ra các ứng dụng web hiện đại một cách nhanh chóng và đơn giản
- Mục tiêu chính là đơn giản, tốc độ cao, năng suất cao; tập trung vào những phần thực sự cần thiết thay vì các tính năng phức tạp, nhằm giảm sự cồng kềnh không cần thiết của các framework nặng
Các đặc điểm chính và tính hữu dụng
- Được xây dựng trên C, chỉ bao gồm mức phụ thuộc tối thiểu
- Cung cấp controller và hệ thống routing để dễ dàng cấu hình các HTTP endpoint
- Hỗ trợ các phương thức HTTP như GET, POST cùng pipeline middleware cục bộ/toàn cục
- Hỗ trợ tạo và chạy dự án nhanh thông qua công cụ CLI (
lavu)
- Tích hợp sẵn framework unit test, xử lý biến môi trường, logging, tích hợp SQLite, thư viện JSON
Các tính năng đã hoàn thiện
- Hệ thống controller/routing
- Hỗ trợ endpoint theo từng phương thức HTTP (GET, POST, v.v.)
- Pipeline middleware (cục bộ/toàn cục)
- Mức phụ thuộc tối thiểu (dựa trên mã C thuần)
- Scaffolding dự án tiện lợi bằng CLI
- Framework unit test tích hợp sẵn
- Hỗ trợ biến môi trường, hệ thống logging
- Tích hợp SQLite/thư viện JSON tích hợp sẵn
Các tính năng đang được phát triển
- Phân tích HTTP JSON body
- Cookie phiên
- Thiết lập chính sách CORS
- Lavender ORM
- ELA(Embedded Lavandula) HTML template engine
Kế hoạch sắp tới (lộ trình)
- Giới hạn tốc độ
- Phục vụ tệp tĩnh
- Tích hợp PostgreSQL, MySQL
- Ứng viên framework tiêm phụ thuộc
- Tự động hóa danh sách endpoint/route có thể đăng ký
- Tự động tạo model JSON và hàm CRUD (dùng lệnh
'lavu model')
- Xử lý tham số URL và routing động
Khái quát cách tạo và chạy dự án
- Lệnh CLI:
lavu new my-project sẽ tự động tạo thư mục dự án và cấu trúc cơ bản
- Các tệp được tạo tự động:
- tệp cấu hình (lavandula.yml)
- mã nguồn main/controller/route
- makefile
- mã kiểm thử, v.v.
- Chạy nhanh: sau khi di chuyển vào thư mục, có thể chạy ngay máy chủ cục bộ bằng
lavu run, cổng mặc định là http://localhost:3000/
Giấy phép và thông tin khác
- Giấy phép: MIT License
- Phù hợp với tinh thần mã nguồn mở, bất kỳ ai cũng có thể cải thiện/tham gia
- Được viết trên nền C(97.3%), kèm theo một phần Makefile/Shell script
Tóm tắt các ưu điểm của Lavandula
- Là một web framework hoàn chỉnh rất hiếm thấy trong hệ sinh thái C, đặc biệt phù hợp với môi trường tài nguyên hạn chế hoặc triển khai máy chủ siêu tốc
- Được tối ưu cho tốc độ nhanh hơn và overhead thấp hơn so với nhiều framework phổ biến
- Với CLI, công cụ tích hợp và cấu trúc tối giản, nó mang lại đường cong học tập ngắn và năng suất cao
1 bình luận
Ý kiến Hacker News
#ifdefvà vô số dấu gạch dưới thì đây lại là một ví dụ rất hay để cảm nhận tính thẩm mỹ của C. Đặc biệt, đây là lần đầu tôi thấy mã kiểm thử được viết trong C theo cách như vậy. Làm rất tuyệt. Hồi còn học cấp hai, cấp ba, tôi học ngôn ngữ lập trình đầu tiên là C, và khi cài phần mềm miễn phí lên chiếc PC ở nhà, tôi biết rằng phần lớn chương trình đều được viết bằng C. Khi lần đầu tiếp cận khoa học máy tính một cách bài bản ở đại học, tôi học cấu trúc dữ liệu và thuật toán bằng C++, nhưng vì đã hiểu con trỏ từ trước nên thích nghi rất dễ. Nếu tránh được nhiều yếu tố phức tạp thì có thể thấy C là một ngôn ngữ rất gọn gàng và đơn giản. Tất nhiên, việc có thể trực tiếp chạm vào chính sự phức tạp đó cũng là sức hút của C, nhưng tôi nghĩ cân bằng hợp lý là điều quan trọng.snprintf,mallocv.v. Ngoài ra còn có cả một vòng lặp không được dùng. Có vẻ phần xử lý song song vẫn chưa được hỗ trợ nên trước mắt chưa phải vấn đề, nhưng do đặc tính của web server thì về sau việc đưa threading vào sẽ có lợi. Khi cân nhắc triển khai, tôi khuyên nên dùng thư viện như libuv.Cá nhân tôi vẫn thích sự đơn giản của C thuần, nhưng sự kết hợp giữa mã mạng viết bằng C và mã do AI tạo ra quả thật cũng hơi đáng sợ.
appRoutelàm cho kiểu và chữ ký hàm trở nên mơ hồ, đồng thời đưa vào một tầng gián tiếp không cần thiết, nên có lẽ nên bỏ nó đi. Ngoài ra, kiểuAppContexttrên thực tế đang trộn lẫn App + HTTP Request + DB cùng nhiều chức năng khác, nên có lẽRequestContexthoặcControllerContextsẽ phù hợp hơn. Ngoài ra, giống như nhiều người khác, tôi cũng rất ấn tượng với sự gọn gàng của mã nguồn; đây thực sự là một nỗ lực tuyệt vời.