Mojo là ngôn ngữ kết hợp khả năng đọc của Python với tốc độ của C++.
Nó hữu ích cho nhiều thứ khác nhau, từ mã cấp thấp gần với phần cứng, thông qua thiết kế API Back-End, cho đến thế giới Front-End và Web. Mojo đủ mạnh để mở rộng quy mô trên toàn bộ hệ thống hiện đại. Ngôn ngữ này cũng được thiết kế dành cho AI và Machine Learning - vì vậy nó sẽ đặc biệt hữu ích cho các nhà phát triển AI và Nhà khoa học dữ liệu.
Mojo vẫn còn trẻ. Hệ sinh thái đang thiếu các công cụ để phát triển phần mềm hàng ngày, như kết nối mạng hoặc các hoạt động HTTP cơ bản.
Đây là nơi Lightbug 🔥🐝 bay vào.
Lightbug 🔥🐝 là một khung HTTP đơn giản được viết bằng Mojo thuần túy, không có phần phụ thuộc bên ngoài theo mặc định. Nó nhằm mục đích làm nền tảng cho các dự án phức tạp hơn và cho phép bạn phát triển các dịch vụ Web như API, thiết lập định tuyến cơ bản hoặc thậm chí phục vụ các trang HTML bằng Mojo, đồng thời tận dụng các tính năng của ngôn ngữ này, như gõ tĩnh và hiệu suất tuyệt vời .
Để bắt đầu, chỉ cần cài đặt Mojo và Git , sau đó sao chép repo Lightbug Github:
git clone https://github.com/saviorand/lightbug_http.git
Sau khi được sao chép, hãy chuyển sang thư mục trong dòng lệnh của bạn:
cd lightbug_http
Sau đó chạy máy chủ (vâng, đó là phần mở rộng của tệp Mojo! 🔥):
mojo lightbug.🔥
Bạn sẽ thấy dòng sau được in ra bàn điều khiển:
🔥🐝 Lightbug is listening on 0.0.0.0:8080 Ready to accept connections...
Bây giờ, bạn có thể bắt đầu thực hiện yêu cầu tới máy chủ của mình hoặc thử mở localhost:8080
hoặc 0.0.0.0:8080
trong trình duyệt - bạn sẽ thấy màn hình giới thiệu. Chào mừng đến với Web, theo phong cách Mojo! Bây giờ, chúng ta hãy chuyển sang một số mã hóa thực sự.
Mặc dù Lightbug vẫn còn non trẻ nhưng chức năng cốt lõi mà mọi người mong đợi có thể phát triển cho Web hiện đại đã có sẵn.
Lưu ý rằng vì chưa có trình quản lý gói nên bạn chỉ cần đưa lightbug_http
làm thư mục con bên trong dự án của riêng mình. Điều này sẽ hoạt động như một gói Mojo và sẽ cho phép bạn nhập các công cụ như nguyên gốc web, máy chủ, v.v. từ Lightbug.
Ví dụ: thêm phần này vào đầu tệp của bạn để nhập máy chủ:
from lightbug_http.sys.server import SysServer
Điều này sẽ nhập triển khai máy chủ trong Mojo thuần túy. Nếu bạn muốn sử dụng triển khai Python, thay vào đó hãy nhập PythonServer
. Nó sẽ hoạt động theo cách tương tự.
Để tạo một dịch vụ HTTP, chỉ cần tạo một cấu trúc thỏa mãn đặc điểm HTTPService
, nghĩa là nó có phương thức func
với chữ ký sau:
trait HTTPService: fn func(self, req: HTTPRequest) raises -> HTTPResponse: ...
Điều này sử dụng các nguyên hàm tích hợp sẵn để nhận HTTPRequest
, thực thi bất kỳ logic tùy chỉnh nào bạn viết bằng Mojo hoặc Python và trả về một đối tượng HTTPResponse
cùng với một số dữ liệu cho người dùng API.
Hãy tạo một dịch vụ in tất cả các yêu cầu được gửi tới 0.0.0.0:8080
tới bảng điều khiển. Để thực hiện việc này, hãy tạo một tệp có tên my_awesome_service.🔥
và dán đoạn sau:
from lightbug_http import * @value struct Printer(HTTPService): fn func(self, req: HTTPRequest) raises -> HTTPResponse: let body = req.body_raw print(String(body)) return OK(body) fn main() raises: var server = SysServer() let handler = Printer() server.listen_and_serve("0.0.0.0:8080", handler)
Chạy mojo my_awesome_service.🔥
và gửi yêu cầu tới 0.0.0.0:8080
từ các ứng dụng khách API yêu thích của bạn, như Insomnia hoặc Bruno . Bạn sẽ thấy một số chi tiết về yêu cầu được in ra bảng điều khiển.
Chúc mừng! Bây giờ bạn đã chính thức là nhà phát triển web Mojo 🔥.
Trong ví dụ này, chúng ta khởi tạo một biến có tên là handler
bằng let
(có nghĩa là nó không thể được gán lại) và chuyển nó tới listen_and_serve
làm tham số thứ hai cho rõ ràng.
Việc thêm trình trang trí @value
là tùy chọn: nếu bạn là một Mojician nâng cao, thay vào đó, bạn có thể thêm phương thức hàm tạo __init__
. Nó sẽ hoạt động như nhau; @value
chỉ tự động tạo ra phương thức này và các phương thức hữu ích khác.
struct Printer(HTTPService): fn __init__(inout self): print("Printer initialized!") fn func(self, req: HTTPRequest) raises -> HTTPResponse: let body = req.body_raw print(String(body)) return OK(body)
Bạn có thể nói, nhưng đó chỉ là một con đường! API hiện đại đòi hỏi nhiều hơn thế.
Lightbug cũng có thể thực hiện một số định tuyến cơ bản:
@value struct ExampleRouter(HTTPService): fn func(self, req: HTTPRequest) raises -> HTTPResponse: let body = req.body_raw let uri = req.uri() if uri.path() == "/": print("I'm on the index path!") if uri.path() == "/first": print("I'm on /first!") elif uri.path() == "/second": print("I'm on /second!") return OK(body)
Thêm phần này vào my_awesome_service.🔥
của bạn và chuyển nó dưới dạng trình xử lý đến máy chủ:
fn main() raises: var server = SysServer() let handler = ExampleRouter() server.listen_and_serve("0.0.0.0:8080", handler)
Bây giờ bạn có thể mở trình duyệt của mình và truy cập localhost:8080/first
, localhost:8080/second
để xem các thay đổi.
Chức năng này sẽ cung cấp cho bạn cơ sở để phát triển các ứng dụng, thư viện và dịch vụ sử dụng HTTP của riêng bạn, đồng thời tận dụng các tùy chọn linh hoạt và tùy chỉnh mà khung/bộ công cụ nhẹ mà lightbug_http
có thể cung cấp.
Chúng tôi dự định thực hiện việc định tuyến cũng như các tác vụ khác như soạn thảo và tạo API từ đặc tả OpenAPI, thiết kế mô hình dữ liệu của bạn và xây dựng các ứng dụng web thậm chí còn thú vị hơn trong tương lai bằng cách xây dựng các gói lightbug_api
và lightbug_web
. Hãy xem Lộ trình của chúng tôi để biết chi tiết.
Thế là xong phần giới thiệu về Lightbug 🔥🐝 ! Hy vọng nó hữu ích.
Đây là một dự án cộng đồng mã nguồn mở, phi thương mại.
Vui lòng gắn dấu sao ⭐ kho lưu trữ Github của chúng tôi, tham gia Discord và xem cách đóng góp bằng mã của bạn để chúng tôi có thể làm cho mã của bạn trở nên tốt hơn nữa.
Hẹn lần sau nhé!