Mojo 是一种结合了 Python 的可读性和 C++ 的速度的语言。 它对于不同的事情很有用,从接近硬件的低级代码,通过后端 API 设计,到前端和 Web 世界。 Mojo 功能强大,足以扩展到整个现代堆栈。该语言的设计还考虑到了人工智能和机器学习,因此它对于人工智能开发人员和数据科学家特别有用。 不过,Mojo 还很年轻。该生态系统一直缺少日常软件开发的工具,例如网络或基本的 HTTP 操作。 这就是 飞来的地方。 Lightbug 🔥🐝 是一个用纯 Mojo 编写的简单 HTTP 框架,默认没有外部依赖。它旨在作为更复杂项目的基础,并允许您开发 API 等 Web 服务、设置基本路由,甚至使用 Mojo 提供 HTML 页面,同时利用该语言的功能,例如静态类型和出色的性能。 Lightbug 🔥🐝 首先,只需 和 ,然后克隆 Lightbug Github 存储库: 安装 Mojo Git 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... 现在,您可以开始向服务器发出请求,或者尝试在浏览器中打开 或 — 您应该会看到介绍屏幕。欢迎来到 Mojo 风格的网络!现在,让我们开始一些真正的编码。 localhost:8080 0.0.0.0:8080 虽然 Lightbug 还很年轻,但人们期望能够为现代 Web 开发的核心功能已经存在。 请注意,由于还没有包管理器,您只需将 作为子文件夹包含在您自己的项目中即可。这将作为 运行,并允许您从 Lightbug 导入 Web 原语、服务器等工具。 lightbug_http Mojo 包 例如,将其添加到文件顶部以导入服务器: from lightbug_http.sys.server import SysServer 这将导入纯 Mojo 中的服务器实现。如果您想使用 Python 实现,请导入 。它将以同样的方式工作。 PythonServer 要创建 HTTP 服务,只需创建一个满足 结构,这意味着它有一个带有以下签名的 方法: HTTPService 特征的 func trait HTTPService: fn func(self, req: HTTPRequest) raises -> HTTPResponse: ... 它使用内置原语来接收 ,执行您在 Mojo 或 Python 中编写的任何自定义逻辑,并将包含一些数据的 对象返回给 API 使用者。 HTTPRequest HTTPResponse 让我们创建一个服务,将发送到 的所有请求打印到控制台。为此,请创建一个名为 的文件,并粘贴以下内容: 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) 运行 ,然后从您最喜欢的 API 客户端(例如 或 将请求发送到 。您应该会看到有关打印到控制台的请求的一些详细信息。 mojo my_awesome_service.🔥 Insomnia Bruno ) 0.0.0.0:8080 恭喜!您现在正式成为一名 Mojo Web 开发人员 🔥。 在示例中,为了清楚起见,我们使用 初始化一个名为 的变量(意味着它不能重新分配)并将其作为第二个参数传递给 。 let handler listen_and_serve 添加 装饰器是可选的:如果您是高级 Mojician,则可以添加 。效果是一样的; 只是自动生成这个方法和其他有用的方法。 @value __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/first localhost:8080/second 此功能应该为您开发自己的使用 HTTP 的应用程序、库和服务奠定基础,同时利用 轻量级框架/工具包可以提供的灵活性和自定义选项。 lightbug_http 我们计划在未来通过构建 和 包,使路由以及其他任务(例如根据 OpenAPI 规范编写和生成 API、设计数据模型以及构建 Web 应用程序)变得更加有趣。查看我们的 了解详细信息。 lightbug_api lightbug_web 路线图 的介绍就到这里了 !希望它有用。 Lightbug 🔥🐝 这是一个开源、非商业社区项目。 请为我们的 加注星标,加入 ,并查看如何贡献您的代码,以便我们为其他 Mojicians 做得更好。 Github 存储库 Discord 下次见!