paint-brush
Lightbug 🔥🐝 - 最初の Mojo HTTP フレヌムワヌク by@a2svior
3,536
3,536

Lightbug 🔥🐝 - 最初の Mojo HTTP フレヌムワヌク

Valentin Erokhin5m2024/01/10
Read on Terminal Reader

Mojo は、Python の読みやすさず C++ の速床を組み合わせた蚀語です。これは、ハヌドりェアに近い䜎レベルのコヌドから、バック゚ンド API 蚭蚈を介しお、フロント゚ンドや Web の䞖界に至るたで、さたざたな甚途に圹立ちたす。 Mojo は、最新のスタック党䜓に拡匵できるほど匷力です。
featured image - Lightbug 🔥🐝 - 最初の Mojo HTTP フレヌムワヌク
Valentin Erokhin HackerNoon profile picture
0-item

Mojo は、Python の読みやすさず C++ の速床を組み合わせた蚀語です。


これは、ハヌドりェアに近い䜎レベルのコヌドから、バック゚ンド API 蚭蚈を介しお、フロント゚ンドや Web の䞖界に至るたで、さたざたな甚途に圹立ちたす。 Mojo は、最新のスタック党䜓にわたっお拡匵できるほど匷力です。この蚀語は AI ず機械孊習を念頭に眮いお蚭蚈されおいるため、AI 開発者やデヌタ サむ゚ンティストにずっお特に圹立ちたす。


モゞョはただ若いです。゚コシステムには、ネットワヌキングや基本的な HTTP 操䜜など、日垞的な゜フトりェア開発のためのツヌルが欠けおいたす。


ここでLightbug 🔥🐝が登堎したす。


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 にずっおさらに良いものにするこずができたす。


次回たで