Mojo — это язык, сочетающий в себе читабельность Python со скоростью C++.
Он полезен для разных целей: от низкоуровневого кода, близкого к аппаратному обеспечению, через дизайн Back-End API до мира Front-End и Интернета. Mojo достаточно мощный, чтобы масштабироваться по всему современному стеку. Язык также был разработан с учетом ИИ и машинного обучения, поэтому он будет особенно полезен для разработчиков ИИ и специалистов по обработке данных.
Хотя Моджо еще молод. В экосистеме отсутствуют инструменты для повседневной разработки программного обеспечения, такие как работа в сети или базовые операции HTTP.
Вот тут и прилетает Лайтбаг 🔥🐝 .
Lightbug 🔥🐝 — это простой HTTP-фреймворк, написанный на чистом Mojo, без внешних зависимостей по умолчанию. Он предназначен служить основой для более сложных проектов и позволяет разрабатывать веб-сервисы, такие как API, настраивать базовую маршрутизацию или даже обслуживать HTML-страницы с помощью Mojo, используя при этом преимущества этого языка, такие как статическая типизация и высокая производительность. .
Для начала просто установите Mojo и Git , затем клонируйте репозиторий 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:8080
или 0.0.0.0:8080
в браузере — вы должны увидеть вводный экран. Добро пожаловать в Интернет в стиле Mojo! Теперь давайте перейдем к реальному кодированию.
Хотя Lightbug еще молод, основные функциональные возможности, которые люди ожидают разработать для современной сети, уже существуют.
Обратите внимание: поскольку менеджера пакетов пока нет, вам следует просто включить lightbug_http
в качестве подпапки внутри вашего собственного проекта. Он будет работать как пакет Mojo и позволит вам импортировать из Lightbug такие инструменты, как веб-примитивы, серверы и многое другое.
Например, добавьте это в начало файла, чтобы импортировать сервер:
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.🔥
и отправьте запрос на адрес 0.0.0.0:8080
от ваших любимых клиентов API, таких как Insomnia или Bruno . Вы должны увидеть некоторые подробности запроса, выведенные на консоль.
Поздравляю! Теперь вы официально веб-разработчик Mojo 🔥.
В этом примере мы инициализируем переменную с именем handler
с помощью let
(это означает, что ее нельзя переназначить) и передаем ее в 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/first
, localhost:8080/second
, чтобы увидеть изменения.
Эта функциональность должна дать вам основу для разработки ваших собственных приложений, библиотек и сервисов, использующих HTTP, используя при этом преимущества гибкости и возможностей настройки, которые может предоставить облегченная платформа/набор инструментов, который представляет собой lightbug_http
.
В будущем мы планируем сделать маршрутизацию, а также другие задачи, такие как разработка и генерация API на основе спецификации OpenAPI, проектирование вашей модели данных и создание веб-приложений, еще более приятными за счет создания пакетов lightbug_api
и lightbug_web
. Подробности смотрите в нашей дорожной карте .
Вот и все знакомство с Lightbug 🔥🐝 ! Надеюсь, это было полезно.
Это некоммерческий общественный проект с открытым исходным кодом.
Пожалуйста, поставьте лайк ⭐ нашему репозиторию на Github , присоединитесь к Discord и узнайте, как внести свой вклад с помощью своего кода, чтобы мы могли сделать его еще лучше для других моджичан.
До следующего раза!