4个版本
0.1.3 | 2021年3月12日 |
---|---|
0.1.2 | 2021年3月12日 |
0.1.1 | 2021年3月12日 |
0.1.0 | 2021年3月12日 |
#4 in #esi
4KB
esi
Edge Side Includes的Rust实现,通过esi_fastly
crate兼容Fastly Compute@Edge。
目标是完全实现ESI语言规范1.0。
支持的标签
<esi:include>
(+alt
,onerror="continue"
)<esi:注释>
<esi:删除>
使用方法
Compute@Edge
esi_fastly
crate提供了一个实现,该实现将自动将请求传递给与请求主机名匹配的后端。确保为您的应用程序要服务的每个主机创建一个后端。
Cargo.toml
[dependencies]
esi_fastly = "^0.1"
src/main.rs
use fastly::{Error, Request, Response};
use esi_fastly::process_esi;
#[fastly::main]
fn main(req: Request) -> Result<Response, Error> {
// Send request to backend.
let beresp = req.send("backend")?;
// Process and execute ESI tags within the response body.
// Make sure you have backends defined for any included hosts.
// Their names should match the hostname, e.g. "developer.fastly.com"
let result = process_esi(req, beresp)?;
// Return the updated response to the client.
Ok(result)
}
独立Rust
要在没有第三方ExecutionContext
的情况下使用esi
crate,您必须自己实现。下面的示例展示了具有使用reqwest
crate的请求处理器的基本执行上下文。
Cargo.toml
[dependencies]
esi = "^0.1"
src/main.rs
pub struct ReqwestHandler;
impl esi::ExecutionContext for ReqwestHandler {
fn send_request(&self, url: &str) -> Result<String, esi::Error> {
match reqwest::blocking::get(url) {
Ok(resp) => Ok(resp.text().unwrap()),
Err(err) => Err(esi::Error::from_message(&format!("{:?}", err)))
}
}
}
use esi::transform_esi_string;
let exec_context = ReqwestHandler {};
let response_body = send_request_to_backend();
match transform_esi_string(response_body, &exec_context) {
Ok(body) => send_body_to_client(body),
Err(err) => panic!()
}
许可证
本项目的源代码和文档在MIT许可证下发布。
依赖项
~7–9.5MB
~198K SLoC