0
0
Lập trình
TT

Crolite: Giải pháp nhẹ nhàng cho Cro trong Raku

Đăng vào 1 tuần trước

• 4 phút đọc

Giới thiệu

Khi bắt đầu một dự án mới trong Raku với Cro, tôi thường hình dung ra hai hoặc ba route, một định dạng phản hồi, có thể là một đoạn mã được kiểu hóa. Trong thế giới Perl, tôi đã dựa rất nhiều vào Mojolicious::Lite trong giai đoạn prototyping. Tuy nhiên, trong Cro—mặc dù mạnh mẽ và mô-đun—tôi cảm thấy thiếu một “chế độ nhẹ” ngay lập tức: không cần phải kết nối thủ công server, pipeline và router chỉ để thử nghiệm một ý tưởng. Từ những khó khăn đó, Crolite ra đời: một lớp mỏng giúp tái xuất các từ khóa định tuyến của Cro và thêm một MAIN đa dạng với các lệnh khám phá nhanh chóng.

Crolite là gì?

  • Mục tiêu: Làm cho việc tạo mẫu HTTP tối thiểu trở nên dễ dàng trong khi ý tưởng đang phát triển.
  • Cách tiếp cận: Tái sử dụng router của Cro trực tiếp; không cần DSL mới.
  • Sản phẩm: Một RouteSet được tập hợp + một CLI nhúng nhỏ.
  • Triết lý: “Bắt đầu ngay; tốt nghiệp sau với một ứng dụng Cro đầy đủ.”

Cài đặt

Từ một checkout cục bộ (trong thư mục dự án):

Copy
zef install .

Khi đã được xuất bản:

Copy
zef install Crolite

Ví dụ đầu tiên

Tạo file example.raku:

Copy
use Crolite;

get -> $any {
    content 'text/plain', "Xin chào: $any";
}

delete -> 'thing', Int $id {
    content 'application/json', %( :$id );
}

Liệt kê các route đã được tạo:

Copy
raku example.raku routes

Chạy server phát triển:

Copy
raku example.raku daemon --host=127.0.0.1 --port=3000

Kiểm tra một route mà không cần daemon cố định (yêu cầu tạm thời trong bộ nhớ):

Copy
raku example.raku GET /thing/42

Quy trình làm việc đề xuất

  1. Phác thảo các route và định dạng phản hồi.
  2. Chạy raku app.raku routes để xác nhận các mẫu.
  3. Gửi yêu cầu đơn lẻ: raku app.raku GET /foo/123.
  4. Lặp lại cho đến khi ổn định.
  5. Nâng cấp lên một dự án Cro đầy đủ nếu bạn cần middleware phong phú hơn, logging có cấu trúc, TLS, v.v.

Tùy chọn CLI

Lệnh Mục đích
routes In tóm tắt các điểm cuối đã đăng ký
daemon [--host=0.0.0.0] [--port=10000] Khởi động server Cro đơn giản
GET <path> Lấy GET trong bộ nhớ đơn lẻ
POST <path> Gửi POST đơn lẻ (không có body tùy chỉnh)
PUT <path> Gửi PUT đơn lẻ
DELETE <path> Gửi DELETE đơn lẻ
http <path> --method=<VERB> Hình thức tổng quát cho bất kỳ phương thức nào

Dừng daemon bằng Ctrl+C (SIGINT sẽ bị bắt để tắt an toàn).

Các đoạn động và kiểu dữ liệu

Copy
use Crolite;

get -> 'greet', Str $name {
    content 'text/plain', "Chào $name!";
}

post -> 'sum', Int $a, Int $b {
    content 'application/json', %( total => $a + $b );
}

Kiểm tra:

Copy
raku app.raku GET /greet/Ana
raku app.raku POST /sum/2/5

Trả về JSON

Chỉ cần tạo ra một Hash hoặc Map:

Copy
get -> 'status' {
    content 'application/json', %( service => 'ok', ts => DateTime.now );
}

Hooks (Trước / Sau)

Nếu bạn thêm thủ công các handler before hoặc after vào RouteSet cơ bản, Crolite sẽ bao gồm chúng khi kết hợp ứng dụng cho daemon:

Copy
use Crolite;

$*CRO-ROUTE-SET.before: {
    # Nhúng logging / auth đơn giản
    proceed;
}

get -> 'ping' { content 'text/plain', 'pong' }

Ví dụ hoàn chỉnh hơn

Copy
use Crolite;

get -> 'health' {
    content 'application/json', %( ok => True );
}

put -> 'echo', Str $msg {
    content 'text/plain', $msg.uc;
}

post -> 'calc', Int $x, Int $y {
    content 'application/json', %( sum => $x + $y, prod => $x * $y );
}

delete -> 'soft', Int $id {
    content 'application/json', %( deleted => $id, soft => True );
}

Kiểm tra nhanh:

Copy
raku app.raku GET /health

Chạy server:

Copy
raku app.raku daemon --port=4000

Tính năng thân thiện trong quá trình tạo mẫu

  • Thay đổi nhanh: Lưu & chạy lại; chưa có auto-reloader.
  • Kiểm tra: routes sẽ hiển thị ngay lập tức các lỗi chính tả đường dẫn.
  • Yêu cầu nguyên tử: Tránh mở terminal khác chỉ để sử dụng curl để xem nội dung.

Giới hạn hiện tại

  • Không có logging có cấu trúc sẵn.
  • Không có TLS / websockets / preset streaming tích hợp.
  • Không có hot reload.
  • API thử nghiệm (có thể thay đổi).

Khi nào nên chuyển sang ứng dụng Cro đầy đủ

  • Bạn cần middleware chuỗi (auth, tracing, giới hạn tốc độ).
  • Bạn yêu cầu phân tích / tùy chỉnh định dạng body phong phú hơn.
  • Bạn tích hợp nhiều dịch vụ hoặc thành phần được giám sát.
  • Bạn cần khả năng quan sát (metrics, distributed tracing, logging nâng cao).

Lộ trình tương lai có thể

  • Reload tùy chọn trong chế độ daemon.
  • Đầu ra bảng thay thế cho routes.
  • Trợ giúp đo độ trễ / metrics nhẹ.
  • Tạo skeleton test cho giai đoạn nâng cấp.

Mẹo thử nghiệm nhanh

  • Sử dụng CLI nhúng để xác thực hợp đồng trước khi thử nghiệm chính thức.
  • Khi chính thức hóa, tái sử dụng Cro::HTTP::Test (phản ánh những gì các động từ CLI thực hiện).

Kết luận

Crolite không cạnh tranh với sự linh hoạt đầy đủ của một dự án Cro có cấu trúc; nó giảm thời gian phản hồi hữu ích đầu tiên khi khám phá các ý tưởng HTTP trong Raku. Nếu bạn cũng cảm thấy thiếu sự nhẹ nhàng của Mojolicious::Lite, hãy thử bước đầu tiên của mỗi spike chỉ đơn giản là:

Copy
use Crolite;

Sau đó, khi hình dạng đã cứng lại, nâng cấp lên thứ gì đó mạnh mẽ hơn.


Gợi ý, vấn đề và PR đều được chào đón.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào