Rust 單人 web 框架:Loco

Loco 被稱爲面向業餘項目和初創公司的 Rust 單人框架。Loco 深受 Rails 的啓發,如果你瞭解 Rails 和 Rust,你會覺得很自在。如果你不瞭解 Rails,那麼你會發現 Loco web 框架令人耳目一新。

在這篇文章中,我們將演示一個不需要數據庫的簡單示例。

首先,安裝 Loco:

cargo install loco-cli

建立一個項目,如果你還沒有一個工作目錄,則創建一個文件夾來保存你所有的項目:

mkdir myprojects
cd myprojects

在工作目錄下,運行以下命令創建一個新應用程序:

loco new

這將詢問項目名稱 (默認爲 myapp),然後它將使用該名稱創建一個文件夾。

它還會詢問項目的類型,爲你提供三個選擇:

爲簡單起見,我們使用默認名稱,並選擇第一個不需要數據庫的項目類型。

這樣,就創建了一個名爲 myapp 的文件夾,它是一個初始化的 Rust Crate 的 git 存儲庫,其中包含許多文件:

$ tree
.
├── Cargo.lock
├── Cargo.toml
├── README.md
├── config
│   ├── development.yaml
│   ├── production.yaml
│   └── test.yaml
├── src
│   ├── app.rs
│   ├── bin
│   │   └── main.rs
│   ├── controllers
│   │   ├── home.rs
│   │   └── mod.rs
│   ├── lib.rs
│   └── views
│       ├── home.rs
│       └── mod.rs
└── tests
    ├── mod.rs
    └── requests
        ├── home.rs
        ├── mod.rs
        └── snapshots
            └── can_get_home@home_request.snap

啓動開發服務器:

cargo loco start

這將安裝一堆 crate,並在端口 3000 上啓動 web 應用程序,

訪問 http://localhost:3000/api,網頁顯示 “{"app_name":"loco"}”。

我們也可以使用以下命令運行測試:

cargo test

下面,我們添加一個新的 api。在 src/views 目錄中,創建一個 hello.rs 文件,代碼如下:

use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, Serialize)]
pub struct HelloResponse {
    pub name: String,
}

impl HelloResponse {
    #[must_use]
    pub fn new(name: &str) -> Self {
        Self {
            name: name.to_string(),
        }
    }

    pub fn hello(&self) -> String {
        format!("Hello, {}", self.name)
    }
}

修改 src/views/mod.rs 文件:

pub mod hello;
pub mod home;

在 src/controllers 目錄下,創建一個 hello.rs 文件,代碼如下:

use loco_rs::prelude::*;

use crate::views::hello::HelloResponse;

async fn hello() -> Result<Json<String>> {
    format::json(HelloResponse::new("Loco").hello())
}

pub fn routes() -> Routes {
    Routes::new().add("/hello", get(hello))
}

修改 src/controllers/mod.rs 文件:

pub mod hello;
pub mod home;

最後,修改 src/app.rs 文件:

pub struct App;

#[async_trait]
impl Hooks for App {
    ......

    fn routes() -> AppRoutes {
        AppRoutes::empty()
            .prefix("/api")
            .add_route(controllers::home::routes())
            .add_route(controllers::hello::routes())
    }

    ......
}

啓動服務器:

cargo loco start

訪問 http://localhost:3000/api/hello,網頁顯示 "Hello, Loco"。

這是一個很有前途的 web 框架,我們將拭目以待。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/-6o2dkrLNDj2vjieZVA2Bw