Relic

A modern, high-performance, and type-safe web server framework for Dart.

Giới thiệu

Relic là một framework máy chủ web hiện đại dành cho ngôn ngữ Dart, được phát triển bởi đội ngũ Serverpod. Lấy cảm hứng từ thư viện shelf (tiêu chuẩn cũ của cộng đồng Dart), Relic ra đời để giải quyết các vấn đề về hiệu năng và tính an toàn của kiểu dữ liệu (type safety). Dự án này cung cấp nền tảng vững chắc để xây dựng các ứng dụng web scalable, API backend, hoặc microservices với Dart. Nó đặc biệt hữu ích cho các lập trình viên Flutter muốn sử dụng cùng một ngôn ngữ cho cả Frontend và Backend mà vẫn đảm bảo tốc độ và độ tin cậy cao.

Tính năng chính

  • Type-safe API: Hệ thống headers, cookies và context được định kiểu mạnh mẽ, giảm thiểu lỗi runtime thường gặp khi xử lý chuỗi thô.
  • Hiệu năng cao: Sử dụng bộ định tuyến (router) dựa trên cấu trúc cây trie, giúp xử lý hàng ngàn route cực nhanh.
  • Hỗ trợ WebSockets: Tích hợp sẵn WebSockets, cho phép xây dựng các tính năng thời gian thực (real-time) dễ dàng.
  • Phục vụ file tĩnh (Static Files): Hỗ trợ sẵn các tính năng như ETag, cache busting và MIME types chính xác.
  • Middleware mạnh mẽ: Dễ dàng tích hợp logic xử lý trung gian (logging, auth) vào quy trình xử lý request.
  • Hỗ trợ Hot Reload: Tăng tốc độ phát triển với khả năng cập nhật code mà không cần khởi động lại server thủ công.

Hướng dẫn cài đặt Local (macOS)

Để chạy Relic trên macOS, bạn cần cài đặt Dart SDK trước.

  1. Cài đặt Dart (qua Homebrew):
    brew tap dart-lang/dart
    brew install dart
    
  2. Tạo dự án mới:
    dart create -t console-full my_relic_server
    cd my_relic_server
    
  3. Thêm thư viện Relic:
    dart pub add relic
    
  4. Chạy thử: Sau khi viết code vào bin/my_relic_server.dart (xem phần Ví dụ Code), chạy lệnh:
    dart run bin/my_relic_server.dart
    

Hướng dẫn Docker

Relic hoạt động tốt trong môi trường container. Dưới đây là Dockerfile cơ bản để build image cho ứng dụng Relic:

  1. Tạo file Dockerfile trong thư mục gốc:
    # Sử dụng Dart image chính thức
    FROM dart:stable AS build
    
    WORKDIR /app
    COPY pubspec.* ./
    RUN dart pub get
    
    COPY . .
    RUN dart pub get --offline
    RUN dart compile exe bin/my_relic_server.dart -o bin/server
    
    # Build runtime image nhỏ gọn
    FROM scratch
    COPY --from=build /runtime/ / 
    COPY --from=build /app/bin/server /app/bin/
    
    # Expose port (mặc định Relic dùng 8080)
    EXPOSE 8080
    CMD ["/app/bin/server"]
    

    (Lưu ý: Nếu image scratch quá tối giản gây lỗi thiếu thư viện hệ thống, hãy đổi FROM scratch thành FROM debian:stable-slim).

  2. Build và Run:
    docker build -t relic-server .
    docker run -p 8080:8080 relic-server
    

Ví dụ Code (Example Code)

Dưới đây là một ví dụ đơn giản về cách khởi tạo server, định nghĩa route và middleware với Relic:

import 'package:relic/relic.dart';

Future<void> main() async {
  // Khởi tạo ứng dụng Relic
  final app = RelicApp()
    // Thêm middleware log request
    ..use('/', logRequests())
    
    // Định nghĩa route GET cơ bản
    ..get('/', (request) => Response.ok(
      body: Body.fromString('Chào mừng đến với Relic Server! 🚀')
    ))
    
    // Định nghĩa route với tham số động
    ..get('/user/:name', (request) {
      final name = request.pathParameters['name'];
      return Response.ok(
        body: Body.fromString('Xin chào, $name!')
      );
    });

  print('Server đang chạy tại http://localhost:8080');
  // Lắng nghe requests (mặc định port 8080)
  await app.serve();
}

Sources

Github Page

https://github.com/serverpod/relic

Tags: github
Share: X (Twitter) Facebook LinkedIn