本文主要講述如何在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加密