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

MIT许可证

4KB

esi

Edge Side Includes的Rust实现,通过esi_fastlycrate兼容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