paint-brush
Lightbug 🔥🐝 - 第一个 Mojo HTTP 框架by@a2svior
3,530
3,530

Lightbug 🔥🐝 - 第一个 Mojo HTTP 框架

Valentin Erokhin5m2024/01/10
Read on Terminal Reader

Mojo 是一种结合了 Python 的可读性和 C++ 的速度的语言。它对于不同的事情很有用,从接近硬件的低级代码,通过后端 API 设计,到前端和 Web 世界。 Mojo 功能强大,足以扩展到整个现代堆栈。
featured image - Lightbug 🔥🐝 - 第一个 Mojo HTTP 框架
Valentin Erokhin HackerNoon profile picture
0-item

Mojo 是一种结合了 Python 的可读性和 C++ 的速度的语言。


它对于不同的事情很有用,从接近硬件的低级代码,通过后端 API 设计,到前端和 Web 世界。 Mojo 功能强大,足以扩展到整个现代堆栈。该语言的设计还考虑到了人工智能和机器学习,因此它对于人工智能开发人员和数据科学家特别有用。


不过,Mojo 还很年轻。该生态系统一直缺少日常软件开发的工具,例如网络或基本的 HTTP 操作。


这就是Lightbug 🔥🐝飞来的地方。


Lightbug 🔥🐝是一个用纯 Mojo 编写的简单 HTTP 框架,默认没有外部依赖。它旨在作为更复杂项目的基础,并允许您开发 API 等 Web 服务、设置基本路由,甚至使用 Mojo 提供 HTML 页面,同时利用该语言的功能,例如静态类型和出色的性能。


首先,只需安装 MojoGit ,然后克隆 Lightbug Github 存储库:


 git clone https://github.com/saviorand/lightbug_http.git


克隆后,切换到命令行中的目录:


 cd lightbug_http


然后运行服务器(是的,这就是 Mojo 文件扩展名!🔥):


 mojo lightbug.🔥


您应该看到以下行打印到控制台:


 🔥🐝 Lightbug is listening on 0.0.0.0:8080 Ready to accept connections...


现在,您可以开始向服务器发出请求,或者尝试在浏览器中打开localhost:80800.0.0.0:8080 — 您应该会看到介绍屏幕。欢迎来到 Mojo 风格的网络!现在,让我们开始一些真正的编码。


虽然 Lightbug 还很年轻,但人们期望能够为现代 Web 开发的核心功能已经存在。


请注意,由于还没有包管理器,您只需将lightbug_http作为子文件夹包含在您自己的项目中即可。这将作为Mojo 包运行,并允许您从 Lightbug 导入 Web 原语、服务器等工具。


例如,将其添加到文件顶部以导入服务器:


 from lightbug_http.sys.server import SysServer


这将导入纯 Mojo 中的服务器实现。如果您想使用 Python 实现,请导入PythonServer 。它将以同样的方式工作。


要创建 HTTP 服务,只需创建一个满足HTTPService特征的结构,这意味着它有一个带有以下签名的func方法:


 trait HTTPService: fn func(self, req: HTTPRequest) raises -> HTTPResponse: ...


它使用内置原语来接收HTTPRequest ,执行您在 Mojo 或 Python 中编写的任何自定义逻辑,并将包含一些数据的HTTPResponse对象返回给 API 使用者。


让我们创建一个服务,将发送到0.0.0.0:8080的所有请求打印到控制台。为此,请创建一个名为my_awesome_service.🔥的文件,并粘贴以下内容:


 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)


运行mojo my_awesome_service.🔥 ,然后从您最喜欢的 API 客户端(例如InsomniaBruno )将请求发送到0.0.0.0:8080 。您应该会看到有关打印到控制台的请求的一些详细信息。


恭喜!您现在正式成为一名 Mojo Web 开发人员 🔥。


在示例中,为了清楚起见,我们使用let初始化一个名为handler的变量(意味着它不能重新分配)并将其作为第二个参数传递给listen_and_serve


添加@value装饰器是可选的:如果您是高级 Mojician,则可以添加__init__构造函数方法。效果是一样的; @value只是自动生成这个方法和其他有用的方法。


 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)


您可能会说,但这只是一条路线!现代 API 需要的远不止这些。


Lightbug 还可以进行一些基本的路由:


 @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)


将其添加到您的my_awesome_service.🔥 ,并将其作为处理程序传递到服务器:


 fn main() raises: var server = SysServer() let handler = ExampleRouter() server.listen_and_serve("0.0.0.0:8080", handler)


您现在可以打开浏览器并转到localhost:8080/firstlocalhost:8080/second来查看更改。


此功能应该为您开发自己的使用 HTTP 的应用程序、库和服务奠定基础,同时利用lightbug_http轻量级框架/工具包可以提供的灵活性和自定义选项。


我们计划在未来通过构建lightbug_apilightbug_web包,使路由以及其他任务(例如根据 OpenAPI 规范编写和生成 API、设计数据模型以及构建 Web 应用程序)变得更加有趣。查看我们的路线图了解详细信息。


Lightbug的介绍就到这里了🔥🐝 !希望它有用。


这是一个开源、非商业社区项目。


请为我们的Github 存储库加注星标,加入Discord ,并查看如何贡献您的代码,以便我们为其他 Mojicians 做得更好。


下次见!