paint-brush
Lightbug 🔥🐝 — первый HTTP-фреймворк Mojoк@a2svior
4,699 чтения
4,699 чтения

Lightbug 🔥🐝 — первый HTTP-фреймворк Mojo

к Valentin Erokhin5m2024/01/10
Read on Terminal Reader

Слишком долго; Читать

Mojo — это язык, сочетающий в себе читаемость Python со скоростью C++. Он полезен для разных целей: от низкоуровневого кода, близкого к аппаратному обеспечению, через дизайн Back-End API до мира Front-End и Интернета. Mojo достаточно мощный, чтобы масштабироваться по всему современному стеку.
featured image - Lightbug 🔥🐝 — первый HTTP-фреймворк Mojo
Valentin Erokhin HackerNoon profile picture
0-item

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 и узнайте, как внести свой вклад с помощью своего кода, чтобы мы могли сделать его еще лучше для других моджичан.


До следующего раза!