2024年8月11日日曜日

Lightbug 🔥🐝 - 最初の Mojo HTTP フレームワーク に Valentin Erokhin 5 分 read 2024/01/11

featured image - Lightbug 🔥🐝 - 最初の Mojo HTTP フレームワーク
このオーディオは、ストーリーの元の言語で制作されています。
1x
Read by Dr. Onevoice-avatar
オーディオ提供者
Mongo DB-icon
Valentin Erokhin HackerNoon profile picture
0-item

Mojo は、Python の読みやすさと C++ の速度を組み合わせた言語です。


これは、ハードウェアに近い低レベルのコードから、バックエンド API 設計を介して、フロントエンドや Web の世界に至るまで、さまざまな用途に役立ちます。 Mojo は、最新のスタック全体にわたって拡張できるほど強力です。この言語は AI と機械学習を念頭に置いて設計されているため、AI 開発者やデータ サイエンティストにとって特に役立ちます。


モジョはまだ若いです。エコシステムには、ネットワーキングや基本的な 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:8080または0.0.0.0:8080を開いてみてください。イントロ画面が表示されるはずです。 Mojo スタイルの Web へようこそ!それでは、実際のコーディングに移りましょう。


Lightbug はまだ若いですが、現代の Web 向けに開発できると人々が期待しているコア機能はすでに存在しています。


まだパッケージ マネージャーがないため、独自のプロジェクト内のサブフォルダーとしてlightbug_httpを含める必要があることに注意してください。これはMojo パッケージとして機能し、Web プリミティブ、サーバーなどのツールを Lightbug からインポートできるようになります。


たとえば、サーバーをインポートするには、これをファイルの先頭に追加します。


 from lightbug_http.sys.server import SysServer


これにより、純粋な Mojo にサーバー実装がインポートされます。 Python 実装を使用する場合は、代わりにPythonServerをインポートします。同じように動作します。


HTTP サービスを作成するには、 HTTPService traitを満たす構造体を作成するだけです。つまり、次のシグネチャを持つ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.🔥を実行し、 InsomniaBrunoなどのお気に入りの API クライアントから0.0.0.0:8080にリクエストを送信します。リクエストに関する詳細がコンソールに出力されるはずです。


おめでとうございます!これであなたは正式に Mojo Web 開発者です 🔥。


この例では、わかりやすくするために、 handlerという変数をletで初期化し (再割り当てできないことを意味します)、それを 2 番目のパラメータとして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に移動して変更を確認できます。


この機能は、 lightbug_httpである軽量フレームワーク/ツールキットが提供できる柔軟性とカスタマイズ オプションを活用しながら、HTTP を利用する独自のアプリ、ライブラリ、およびサービスを開発するための基礎を提供します。


私たちは、 lightbug_apiおよびlightbug_webパッケージを構築することで、ルーティングだけでなく、OpenAPI 仕様からの API の作成と生成、データ モデルの設計、Web アプリケーションの構築などの他のタスクを将来的にさらに楽しくする予定です。詳細については、ロードマップをご覧ください。


Lightbugの紹介は以上です🔥🐝 !お役に立てば幸いです。


これはオープンソースの非営利コミュニティ プロジェクトです。


私たちのGithub リポジトリにスターを付けてください ⭐ Discordに参加して、あなたのコードに貢献する方法をチェックしてください。そうすれば、他の Mojicians にとってさらに良いものにすることができます。


次回まで!

Mongo DB

About Author

Valentin Erokhin HackerNoon profile picture
Valentin Erokhin@a2svior
Back-End Developer at Nexyo

Comments


Mojo is going places 🔥

😊+

 0 0


Any performance benchmark you can share? How does it compare to FastAPI or Flask?

😊+

 0 0



0 コメント:

コメントを投稿