3个不稳定版本
0.2.0 | 2020年11月20日 |
---|---|
0.1.1 | 2020年11月15日 |
0.1.0 | 2020年11月14日 |
#480 在 HTTP服务器
18KB
159 行
阿普罗拉
0.2.0版本的README.md
阅读其他语言
简介
阿普罗拉是用Rust编程语言开发的一个简单服务器框架。它只是一个玩具服务器,不够强大以构建真正的Web服务器,但它易于使用,特别是对于Rust的初学者。通过导入aphrora
,你可以仅使用处理请求的闭包来建立一个简单的服务器,并且它将在浏览器中自动显示主页。
阿普罗拉不仅是一个构建简单浏览器的解决方案,你还可以使用它通过Web页面和HTTP通信为你的Rust应用程序创建GUI。
如何使用
以下是一些如何使用此框架的示例。
Hello World
首先,你需要将aphrora
添加到你的Cargo.toml
依赖项中
# file: Cargo.toml
# -- snip --
[dependencies]
aphrora = "0.2.0"
构建cargo build
之后,你可以在应用程序中将aphrora
作为一个模型来使用。
以下是一个如何使用它的示例
use aphrora::http::{Request, Response, RequestMethod, ResponseStatus};
use aphrora::run_server;
fn main() {
run_server(|request| {
println!("view of request: {}", request.view);
Response{
status: ResponseStatus::OK,
message: String::from("hello"),
}
});
}
aphrora::http
是一个包含一些基本struct
和enum
的模型。你可以使用它们将响应和请求作为对象来处理,而不是String
。
启动服务器时,你只需要像示例中那样调用带有闭包的run_server()
函数。将有一个包含http请求中结构化信息的http::Request
对象,并且你的代码应该返回一个http::Response
对象。
在这个例子中,当您访问任何视图时,代码会返回一个 hello
到您的浏览器,正如您可以在浏览器网页中看到一行 hello
。您还可以将 hello
替换为从 example.html
文件中读取的字符串,然后它将在浏览器网页中显示该文件。
服务器中必须有各种功能,所以您应该使用类似 match
表达式的某种东西来处理。您可以匹配 Request
的 view
属性,然后调用某个函数来处理它。
启用文件
自版本 0.2.0 以来,此框架提供了 file.rs
模块,这使得处理文件更加方便。通过调用 aphrora::file::try_under_root()
,您可以从某个根路径下尝试读取文件。
use aphrora::{
http::Response,
run_server,
file::try_under_root,
};
const ROOT_PATH: &str = "d:/you/can/also/use/relative/path";
fn main() {
run_server(|request| {
match request.view_str() {
// means might be sth error here.
"" => Response::void_404(),
"/" => {
match try_under_root(ROOT_PATH, "/index.html") {
Option::None => Response::void_404(),
Option::Some(file_string) => Response::ok(
file_string
),
}
},
_ => {
match try_under_root(ROOT_PATH, request.view_str()) {
Option::None => Response::void_404(),
Option::Some(file_string) => Response::ok(
file_string
),
}
}
}
});
}
这些代码将使您能够在浏览器中访问本地页面(文件)。
/
是主页或索引页所在的位置,此 file::try_under_root()
函数通常在 _
分支的 match
表达式中调用。
关于结构
这里是一些在 aphrora::http
中的源代码,通过这些代码您可以更好地了解数据结构。
pub struct Request {
pub method: RequestMethod,
pub view: String,
pub message: String,
}
pub enum RequestMethod {
GET,
POST,
Unsupported,
}
pub struct Response {
pub status: ResponseStatus,
pub message: String,
}
pub enum ResponseStatus {
OK,
NotFound,
Forbidden,
InternalServerError,
}
由于 unfinished
和 under development
,此crate目前不支持完整的HTTP,但它仅使用这些结构即可提供许多常用工具。
所以尽情享受吧,此项目仍在开发中,它将逐渐变得更加强大。
设置目标(即将推出版本)
版本 0.2.1
-
更好地支持文件访问和禁止。
-
更好的文档(
rustdoc
)。 -
在
http.rs
中添加更多常用方法。
版本 0.3.x
-
配置系统:
config.rs
-
配置默认端口和首选端口
-
配置主页(索引页)路径
-
发布说明
版本 0.2.0
-
支持获取文件。
-
通过几个常用方法改进
http.rs
。 -
添加更多文档(然而,仍然不够)
版本 0.1.1
-
添加基本注释以使开发者更加方便。
-
初始化国际支持框架。
-
开始中文(简体)翻译。
版本 0.1.0
-
构建基本结构。
-
初始化基本结构并可供使用。