
؟ إطار موجو HTTP مع أجنحة
LightBug هو إطار HTTP بسيط وحلو لـ Mojo الذي يعتمد على أفضل الممارسات من برمجة الأنظمة ، مثل Golang Fashttp و Rust May_MiniHtp.
هذا ليس جاهزًا بعد. نحن نهدف إلى مواكبة التطورات الجديدة في موجو ، ولكن قد يستغرق الأمر بعض الوقت للوصول إلى نقطة عندما يكون ذلك آمنًا لاستخدامه في تطبيقات العالم الحقيقي.
يحتوي Lightbug حاليًا على الميزات التالية:
def(العودة إلى الأعلى)
الاعتماد الصلب الوحيد لـ lightbug_http هو موجو. تعلم كيفية الاستيقاظ مع Mojo على موقع الويب المعياري. بمجرد إعداد مشروع موجو محليًا ،
أضف قناة mojo-community إلى mojoproject.toml ، على سبيل المثال:
[ project ]
channels = [ " conda-forge " , " https://conda.modular.com/max " , " https://repo.prefix.dev/mojo-community " ] أضف lightbug_http كاعتماد:
[ dependencies ]
lightbug_http = " >=0.1.5 " قم بتشغيل magic install في جذر مشروعك ، حيث يوجد mojoproject.toml
يجب الآن تثبيت Lightbug كاعتماد. يمكنك استيراد جميع الواردات الافتراضية في وقت واحد ، على سبيل المثال:
from lightbug_http import *أو استيراد الهياكل والوظائف الفردية ، على سبيل المثال
from lightbug_http.service import HTTPService
from lightbug_http.http import HTTPRequest, HTTPResponse, OK , NotFoundهناك بعض المعالجات الافتراضية التي يمكنك اللعب بها:
from lightbug_http.service import Printer # prints request details to console
from lightbug_http.service import Welcome # serves an HTML file with an image (currently requires manually adding files to static folder, details below)
from lightbug_http.service import ExampleRouter # serves /, /first, /second, and /echo routes أضف معالجك في lightbug. من خلال تمرير الهيكل الذي يرضي السمة التالية:
trait HTTPService :
fn func ( inout self , req : HTTPRequest) raises -> HTTPResponse:
... على سبيل المثال ، لتقديم خدمة Printer تطبع بعض التفاصيل حول طلب وحدة التحكم:
from lightbug_http import *
@value
struct Printer ( HTTPService ):
fn func ( inout self , req : HTTPRequest) raises -> HTTPResponse:
var uri = req.uri
print ( " Request URI: " , to_string(uri.request_uri))
var header = req.headers
print ( " Request protocol: " , req.protocol)
print ( " Request method: " , req.method)
print (
" Request Content-Type: " , to_string(header[HeaderKey. CONTENT_TYPE ])
)
var body = req.body_raw
print ( " Request Body: " , to_string(body))
return OK(body)ابدأ خادمًا يستمع على منفذ مع خدمتك مثل ذلك.
from lightbug_http import Welcome, Server
fn main () raises :
var server = Server()
var handler = Welcome()
server.listen_and_serve( " 0.0.0.0:8080 " , handler) لا تتردد في تغيير الإعدادات في listen_and_serve() للعمل على مضيف ومنفذ معين.
أرسل الآن طلبًا 0.0.0.0:8080 . يجب أن ترى بعض التفاصيل حول الطلب المطبوع إلى وحدة التحكم.
تهاني ؟ أنت تستخدم Lightbug!
التوجيه ليس في نطاق هذه المكتبة ، ولكن يمكنك بسهولة إعداد الطرق بنفسك:
from lightbug_http import *
@value
struct ExampleRouter ( HTTPService ):
fn func ( inout self , req : HTTPRequest) raises -> HTTPResponse:
var body = req.body_raw
var 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! " )
elif uri.path == " /echo " :
print (to_string(body))
return OK(body) نخطط لإضافة المزيد من وظائف التوجيه المتقدمة في مكتبة مستقبلية تسمى lightbug_api ، انظر خريطة الطريق لمزيد من التفاصيل.
(العودة إلى الأعلى)
تعرض شاشة الترحيب الافتراضية مثالاً على كيفية تقديم الملفات مثل الصور أو HTML باستخدام LightBug. لدى Mojo طرق open read و read_bytes التي يمكنك استخدامها لقراءة الملفات وخدمتها على الطريق. على افتراض أنك نسخ ملف HTML والصورة من REPO Lightbug إلى دليل static في جذر ريبو الخاص بك:
from lightbug_http import *
@value
struct Welcome ( HTTPService ):
fn func ( inout self , req : HTTPRequest) raises -> HTTPResponse:
var uri = req.uri
if uri.path == " / " :
var html : Bytes
with open ( " static/lightbug_welcome.html " , " r " ) as f:
html = f.read_bytes()
return OK(html, " text/html; charset=utf-8 " )
if uri.path == " /logo.png " :
var image : Bytes
with open ( " static/logo.png " , " r " ) as f:
image = f.read_bytes()
return OK(image, " image/png " )
return NotFound(uri.path) إنشاء ملف ، على سبيل المثال client.mojo مع الكود التالي. Run magic run mojo client.mojo لتنفيذ الطلب إلى عنوان URL معين.
from lightbug_http import *
from lightbug_http.client import Client
fn test_request ( inout client : Client) raises -> None :
var uri = URI .parse_raises( " http://httpbin.org/status/404 " )
var headers = Header( " Host " , " httpbin.org " )
var request = HTTPRequest(uri, headers)
var response = client.do(request ^ )
# print status code
print ( " Response: " , response.status_code)
# print parsed headers (only some are parsed for now)
print ( " Content-Type: " , response.headers[ " Content-Type " ])
print ( " Content-Length " , response.headers[ " Content-Length " ])
print ( " Server: " , to_string(response.headers[ " Server " ]))
print (
" Is connection set to connection-close? " , response.connection_close()
)
# print body
print (to_string(response.body_raw))
fn main () -> None :
try :
var client = Client()
test_request(client)
except e:
print (e)عميل Pure Mojo المستند إلى Mojo متاح بشكل افتراضي. يستخدم هذا العميل أيضًا داخليًا لاختبار الخادم.
بشكل افتراضي ، يستخدم LightBug تطبيق Mojo النقي للشبكات. لاستخدام مكتبة socket Python بدلاً من ذلك ، ما عليك سوى استيراد PythonServer بدلاً من Server مع السطر التالي:
from lightbug_http.python.server import PythonServer يمكنك بعد ذلك استخدام جميع أوامر الخادم العادية بنفس الطريقة كما هو الحال مع الخادم الافتراضي. ملاحظة: اعتبارًا من سبتمبر ، 2024 ، يرمي PythonServer و PythonClient خطأ في التجميع عند البدء. هناك مشكلة مفتوحة لإصلاح هذا - الترحيب بالمساهمات!

نحن نعمل على دعم ما يلي (ترحيب المساهمون!):
تتمثل الخطة في الوصول إلى مجموعة ميزات مماثلة لأطر Python مثل Starlette ، ولكن بأداء أفضل.
تتمثل رؤيتنا في تطوير ثلاث مكتبات ، مع lightbug_http (هذا الريبو) كنقطة انطلاق:
lightbug_http - HTTP Infrastructure وتطوير API الأساسيlightbug_api - (قادم في وقت لاحق في عام 2024!) لإنشاء واجهات برمجة التطبيقات الرائعة بسرعة ، مع دعم OpenAPI Spec وتصميم المجال المدفوعlightbug_web - (تاريخ الإصدار TBD) إطار عمل الويب الكامل لـ Mojo ، على غرار NextJs أو Sveltekitتتمثل الفكرة في الوصول إلى نقطة يمكن كتابة قاعدة الكود بالكامل لتطبيق الويب الحديث البسيط في موجو.
نحن لا نقدم أي وعود ، على الرغم من ذلك - هذه مجرد رؤية ، وما إذا كنا نصل إلى هناك أم لا يعتمد على العديد من العوامل ، بما في ذلك دعم المجتمع.
شاهد المشكلات المفتوحة وقدمك للمساعدة في قيادة تطوير Lightbug.
(العودة إلى الأعلى)
المساهمات هي التي تجعل مجتمع المصدر المفتوح مكانًا رائعًا للتعلم وإلهامه وإنشائه. أي مساهمات تقدمها موضع تقدير كبير . انظر المساهمة. md لمزيد من التفاصيل حول كيفية المساهمة.
إذا كان لديك اقتراح من شأنه أن يجعل هذا أفضل ، فيرجى تورك الريبو وإنشاء طلب سحب. يمكنك أيضًا فتح مشكلة مع علامة "تحسين". لا تنسى إعطاء المشروع نجمًا!
git checkout -b feature/AmazingFeature )git commit -m 'Add some AmazingFeature' )git push origin feature/AmazingFeature )(العودة إلى الأعلى)
موزعة تحت رخصة معهد ماساتشوستس للتكنولوجيا. انظر LICENSE.txt لمزيد من المعلومات.
(العودة إلى الأعلى)
فالنتين erokhin
رابط المشروع: https://github.com/saviorand/mojo-web
(العودة إلى الأعلى)
كنا نرسم الكثير على المشاريع التالية:
(العودة إلى الأعلى)
تريد اسمك لتظهر هنا؟ انظر المساهمة.
صنعت مع contrib.rocks.