Mojo は、Python の読みやすさと C++ の速度を組み合わせた言語です。
これは、ハードウェアに近い低レベルのコードから、バックエンド API 設計を介して、フロントエンドや Web の世界に至るまで、さまざまな用途に役立ちます。 Mojo は、最新のスタック全体にわたって拡張できるほど強力です。この言語は AI と機械学習を念頭に置いて設計されているため、AI 開発者やデータ サイエンティストにとって特に役立ちます。
モジョはまだ若いです。エコシステムには、ネットワーキングや基本的な HTTP 操作など、日常的なソフトウェア開発のためのツールが欠けています。
Lightbug 🔥🐝 は純粋な Mojo で書かれたシンプルな HTTP フレームワークであり、デフォルトでは外部依存関係がありません。これは、より複雑なプロジェクトの基盤として機能することを目的としており、静的型付けや優れたパフォーマンスなどのこの言語の機能を活用しながら、API などの Web サービスの開発、基本的なルーティングの設定、さらには Mojo で HTML ページの提供を行うことができます。 。
始めるには、単に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 スタイルの 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.🔥
を実行し、 InsomniaやBrunoなどのお気に入りの 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 にとってさらに良いものにすることができます。
次回まで!
Comments
Any performance benchmark you can share? How does it compare to FastAPI or Flask?
😊+
0 コメント:
コメントを投稿