
- เฟรมเวิร์ก Mojo HTTP ที่มีปีก
Lightbug เป็นกรอบ HTTP ที่เรียบง่ายและหวานสำหรับ Mojo ที่สร้างแนวปฏิบัติที่ดีที่สุดจากการเขียนโปรแกรมระบบเช่น Golang Fasthttp และ Rust May_minihttp
นี่ยังไม่พร้อมการผลิต เรากำลังตั้งเป้าที่จะติดตามการพัฒนาใหม่ใน Mojo แต่อาจต้องใช้เวลาพอสมควรในการไปถึงจุดที่ปลอดภัยในการใช้งานในแอปพลิเคชันจริง
LIGHBUG ปัจจุบันมีคุณสมบัติดังต่อไปนี้:
def(กลับไปด้านบน)
การพึ่งพาอย่างหนักสำหรับ lightbug_http คือ MOJO เรียนรู้วิธีการทำงานกับ Mojo บนเว็บไซต์โมดูลาร์ เมื่อคุณมีโครงการ 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 " Run 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 คุณควรเห็นรายละเอียดบางอย่างเกี่ยวกับคำขอที่พิมพ์ออกมาในคอนโซล
ยินดีด้วย ? คุณกำลังใช้ไฟลิฟท์!
การกำหนดเส้นทางไม่ได้อยู่ในขอบเขตสำหรับไลบรารีนี้ แต่คุณสามารถตั้งค่าเส้นทางด้วยตัวเองได้อย่างง่ายดาย:
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 ดู ROADMAP สำหรับรายละเอียดเพิ่มเติม
(กลับไปด้านบน)
หน้าจอต้อนรับเริ่มต้นแสดงตัวอย่างของวิธีการให้บริการไฟล์เช่นรูปภาพหรือ HTML โดยใช้ LIGHBUG Mojo มีวิธีการ open read และ read_bytes ในตัวที่คุณสามารถใช้ในการอ่านไฟล์และให้บริการบนเส้นทาง สมมติว่าคุณคัดลอกไฟล์ HTML และรูปภาพจาก repo lightbug ไปยังไดเรกทอรี static ที่ที่รูทของ repo ของคุณ:
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 ด้วยรหัสต่อไปนี้ เรียกใช้ 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)ไคลเอนต์ที่ใช้ Mojo Pure มีให้โดยค่าเริ่มต้น ไคลเอนต์นี้ยังใช้ภายในสำหรับการทดสอบเซิร์ฟเวอร์
โดยค่าเริ่มต้น Lightbug ใช้การใช้งาน Mojo บริสุทธิ์สำหรับการสร้างเครือข่าย หากต้องการใช้ไลบรารี socket ของ Python แทนเพียงแค่นำเข้า PythonServer แทน Server ที่มีบรรทัดต่อไปนี้:
from lightbug_http.python.server import PythonServer จากนั้นคุณสามารถใช้คำสั่งเซิร์ฟเวอร์ปกติทั้งหมดในลักษณะเดียวกับเซิร์ฟเวอร์เริ่มต้น หมายเหตุ: ณ เดือนกันยายน 2024, PythonServer และ PythonClient โยนข้อผิดพลาดในการรวบรวมเมื่อเริ่มต้น มีปัญหาที่เปิดกว้างสำหรับการแก้ไขสิ่งนี้ - ยินดีต้อนรับผลงาน!

เรากำลังดำเนินการสนับสนุนสิ่งต่อไปนี้ (ยินดีต้อนรับผู้สนับสนุน!):
แผนคือการไปที่ชุดคุณสมบัติคล้ายกับเฟรมเวิร์ก Python เช่น Starlette แต่มีประสิทธิภาพที่ดีขึ้น
วิสัยทัศน์ของเราคือการพัฒนาสามห้องสมุดด้วย lightbug_http (repo นี้) เป็นจุดเริ่มต้น:
lightbug_http - โครงสร้างพื้นฐาน HTTP และการพัฒนา API ขั้นพื้นฐานlightbug_api - (มาในภายหลังในปี 2024!) เครื่องมือสร้าง API ที่ยอดเยี่ยมอย่างรวดเร็วด้วยการรองรับ OpenAPI Spec และ Domain Driven Designlightbug_web - (วันที่รีลีส TBD) Full -Stack Web Framework สำหรับ Mojo คล้ายกับ NextJs หรือ Sveltekitแนวคิดคือการไปถึงจุดที่รหัสฐานทั้งหมดของเว็บแอปพลิเคชันที่ทันสมัยเรียบง่ายสามารถเขียนใน Mojo ได้
เราไม่ได้ทำสัญญาใด ๆ - นี่เป็นเพียงวิสัยทัศน์และไม่ว่าเราจะไปถึงที่นั่นหรือไม่ขึ้นอยู่กับปัจจัยหลายประการรวมถึงการสนับสนุนของชุมชน
ดูปัญหาที่เปิดกว้างและส่งของคุณเองเพื่อช่วยผลักดันการพัฒนาของ Lightbug
(กลับไปด้านบน)
การมีส่วนร่วมคือสิ่งที่ทำให้ชุมชนโอเพ่นซอร์สเป็นสถานที่ที่น่าทึ่งในการเรียนรู้สร้างแรงบันดาลใจและสร้าง การมีส่วนร่วมใด ๆ ที่คุณทำ จะได้รับการชื่นชมอย่างมาก ดูการสนับสนุน MD สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการมีส่วนร่วม
หากคุณมีข้อเสนอแนะที่จะทำให้สิ่งนี้ดีขึ้นโปรดแยก repo และสร้างคำขอดึง นอกจากนี้คุณยังสามารถเปิดปัญหาด้วยแท็ก "การปรับปรุง" อย่าลืมให้โครงการเป็นดารา!
git checkout -b feature/AmazingFeature )git commit -m 'Add some AmazingFeature' )git push origin feature/AmazingFeature )(กลับไปด้านบน)
แจกจ่ายภายใต้ใบอนุญาต MIT ดู LICENSE.txt สำหรับข้อมูลเพิ่มเติม
(กลับไปด้านบน)
Valentin Erokhin
ลิงค์โครงการ: https://github.com/saviorand/mojo-web
(กลับไปด้านบน)
เรากำลังวาดรูปมากในโครงการต่อไปนี้:
(กลับไปด้านบน)
ต้องการให้ชื่อของคุณปรากฏที่นี่หรือไม่? ดูการสนับสนุน. md!
ทำด้วย contrib.rocks