Mojo est un langage qui combine la lisibilité de Python avec la rapidité du C++.
Il est utile pour différentes choses, du code de bas niveau proche du matériel, en passant par la conception de l'API Back-End, jusqu'au monde du Front-End et du Web. Mojo est suffisamment puissant pour s'adapter à l'ensemble de la pile moderne. Le langage a également été conçu en pensant à l’IA et au Machine Learning – il sera donc particulièrement utile pour les développeurs d’IA et les Data Scientists.
Mojo est encore jeune. L'écosystème manque des outils nécessaires au développement de logiciels quotidiens, comme la mise en réseau ou les opérations HTTP de base.
C'est ici que Lightbug 🔥🐝 arrive.
Lightbug 🔥🐝 est un framework HTTP simple écrit en pur Mojo, sans dépendances externes par défaut. Il est destiné à servir de base à des projets plus complexes et permet de développer des services Web comme des API, de mettre en place un routage de base ou même de servir des pages HTML avec Mojo, tout en profitant des fonctionnalités de ce langage, comme le typage statique et d'excellentes performances. .
Pour commencer, installez simplement Mojo et Git , puis clonez le dépôt Lightbug Github :
git clone https://github.com/saviorand/lightbug_http.git
Une fois cloné, basculez vers le répertoire dans votre ligne de commande :
cd lightbug_http
Ensuite, lancez le serveur (oui, c'est l'extension du fichier Mojo ! 🔥) :
mojo lightbug.🔥
Vous devriez voir la ligne suivante imprimée sur la console :
🔥🐝 Lightbug is listening on 0.0.0.0:8080 Ready to accept connections...
Maintenant, vous pouvez commencer à faire des requêtes à votre serveur ou essayer d'ouvrir localhost:8080
ou 0.0.0.0:8080
dans le navigateur — vous devriez voir l'écran d'introduction. Bienvenue sur le Web, à la manière de Mojo ! Passons maintenant au vrai codage.
Bien que Lightbug soit encore jeune, les fonctionnalités de base que les gens s'attendent à pouvoir développer pour le Web moderne sont déjà là.
Notez que comme il n'y a pas encore de gestionnaire de paquets, vous devez simplement inclure lightbug_http
comme sous-dossier dans votre propre projet. Cela fonctionnera comme un package Mojo et vous permettra d'importer des outils tels que des primitives Web, des serveurs et bien plus encore depuis Lightbug.
Par exemple, ajoutez ceci en haut de votre fichier pour importer le serveur :
from lightbug_http.sys.server import SysServer
Cela importera une implémentation de serveur en pur Mojo. Si vous souhaitez utiliser l'implémentation Python, importez plutôt le PythonServer
. Cela fonctionnera de la même manière.
Pour créer un service HTTP, créez simplement une structure qui satisfait au trait HTTPService
, ce qui signifie qu'elle possède une méthode func
avec la signature suivante :
trait HTTPService: fn func(self, req: HTTPRequest) raises -> HTTPResponse: ...
Cela utilise les primitives intégrées pour intégrer un HTTPRequest
, exécuter toute logique personnalisée que vous écrivez dans Mojo ou Python et renvoyer un objet HTTPResponse
avec certaines données au consommateur de l'API.
Créons un service qui imprime toutes les requêtes envoyées à 0.0.0.0:8080
sur la console. Pour ce faire, créez un fichier appelé my_awesome_service.🔥
et collez ce qui suit :
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)
Exécutez mojo my_awesome_service.🔥
et envoyez la requête à 0.0.0.0:8080
à partir de vos clients API préférés, comme Insomnia ou Bruno . Vous devriez voir quelques détails sur la demande imprimés sur la console.
Bravo! Vous êtes désormais officiellement développeur web Mojo 🔥.
Dans l'exemple, nous initialisons une variable appelée handler
avec let
(ce qui signifie qu'elle ne peut pas être réaffectée) et la transmettons à listen_and_serve
comme deuxième paramètre pour plus de clarté.
L'ajout d'un décorateur @value
est facultatif : si vous êtes un Mojicien avancé, vous pouvez ajouter une méthode constructeur __init__
à la place. Cela fonctionnera de la même manière ; @value
génère simplement cette méthode et d'autres méthodes utiles automatiquement.
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)
Vous me direz peut-être, mais ce n'est qu'un itinéraire ! Les API modernes nécessitent bien plus que cela.
Lightbug peut également effectuer un routage de base :
@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)
Ajoutez ceci à votre my_awesome_service.🔥
et transmettez-le en tant que gestionnaire au serveur :
fn main() raises: var server = SysServer() let handler = ExampleRouter() server.listen_and_serve("0.0.0.0:8080", handler)
Vous pouvez maintenant ouvrir votre navigateur et accéder à localhost:8080/first
, localhost:8080/second
pour voir les modifications.
Cette fonctionnalité devrait vous donner une base pour développer vos propres applications, bibliothèques et services qui utilisent HTTP, tout en profitant de la flexibilité et des options de personnalisation qu'un framework/boîte à outils léger qu'est lightbug_http
peut fournir.
Nous prévoyons de rendre le routage, ainsi que d'autres tâches telles que la création et la génération d'API à partir d'une spécification OpenAPI, la conception de votre modèle de données et la création d'applications Web encore plus agréables à l'avenir en créant des packages lightbug_api
et lightbug_web
. Consultez notre feuille de route pour plus de détails.
Voilà pour une introduction à Lightbug 🔥🐝 ! J'espère que cela a été utile.
Il s'agit d'un projet communautaire open source et non commercial.
Veuillez mettre en vedette ⭐ notre dépôt Github , rejoindre le Discord et découvrir comment contribuer avec votre code, afin que nous puissions le rendre encore meilleur pour les autres Mojiciens.
À la prochaine fois !