Rust单人web框架:Loco

740次阅读  |  发布于11月以前

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框架,我们将拭目以待。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8