[Rust]使用Rocket框架搭建簡單Web服務

MisakaE發表於2024-08-04

本文主要講述如何在Rust中使用Rocket搭建簡易Web服務

1.新增Rocket庫

Cargo.toml

[dependencies]
rocket = { version = "0.5.1", features = ["secrets"] }

2.建立服務

2.1 建立一個啟動指令碼

main.rs

use rocket::{launch,routes};

 #[launch]
 fn rocket() -> _ {
     rocket::build().mount("/", routes![]) //這裡先將網站掛載到根目錄
}

2.2 建立服務

2.2.1 建立一個Get方式
  • 簡單的get響應
    main.rs
use rocket::get;

#[get("/hello_world")]
async fn hello_world() -> String {
    "Hello World".to_string()
}
  • 從get(瀏覽器輸入的路徑)獲取引數
    main.rs
#[get("/hello/<id>")]
async fn get_id(id:String) -> String{
    id
}
  • 輸入檔名並讀取HTML格式檔案並返回
    main.rs
use std::fs;
use std::path::Path;
use rocket::http::ContentType;

#[get("/html/<id>")]
async fn code(id:String) -> Option<(ContentType,String)>{
    let path = Path::new(&id);
    if let Ok(s) = fs::read_to_string(path){
        Some((ContentType::HTML,s))
    } else {
        None
    }
}
2.2.2 建立一個靜態檔案服務
use std::path::PathBuf;
use rocket::fs::NamedFile;

#[get("/<file..>")] 
async fn html(file: PathBuf) -> Option<NamedFile> {
    NamedFile::open(Path::new("./").join(file)).await.ok()
	//如果將檔案放在了xxx資料夾,就將Path::new("./")改為Path::new("./xxx/")
}
2.3 掛載服務
  • 讓我們回到 2.1 時建立的啟動指令碼,將上面的幾個服務掛載上去
    main.rs
 #[launch]
 fn rocket() -> _ {
     rocket::build().mount("/", routes![hello_world,get_id,code,html])
}

此時輸入 cargo run 就會發現服務已經執行在 127.0.0.1:8000

3 配置檔案

  • 在網站目錄下(跟Cargo.toml同級的目錄)建立一個名為 Rocket.toml 的檔案
[global]
port = 80
address = "127.0.0.1"
secret_key = "MTE0NTE0MTkxOTgxMDExNDUxNDE5MTk4MTAxMTQ1MTQxMTQ1MTQxOTE5ODEwMTE0NTE0MTkxOTgxMDExNDUxNA=="
//secret_key請輸入隨機base64加密的256-bit金鑰
//可以使用命令 openssl rand -base64 32 生成
//或者隨機輸入64個字母或者數字進行base64加密

大功告成,此時一個基本的web服務就搭建好了

相關文章