В Cloudflare внедрили поддержку создания воркеров на Rust без использования JavaScript. Соответствующий код опубликован на GitHub.
Cloudflare Workers представили в 2018 году. Этот инструмент позволяет разворачивать JS-скрипты по всей облачной сети компании в пределах 30 секунд. Это позволяет перенаправлять запросы периферии, которая ближе всего к пользователю, что сокращает среднее время отклика и увеличивает производительность веб-приложений. Воркеры основаны на стандартном API от W3C для скриптов, работающих в фоновом режиме в браузере и перехватывающих HTTP-запросы, но код запускается не в браузере, а на серверах компании. Администраторы могут, в частности, перехватывать и модифицировать HTTP-запросы и высылать URL, статус, содержимое контейнеров header и body, отвечать на запросы из воркеров, отправлять HTTP-запросы сторонним серверам, управлять другими функциями CloudFlare, в том числе, кэшированием, создавать бессерверные приложения на веб-API и так далее.
Воркеры уже поддерживают запуск на многих языках с помощью WebAssembly. Однако для взаимодействия Rust с JavaScript API нужно было выполнить несколько шагов. Кроме того, не включалась поддержка API-интерфейсов Cloudflare, таких как KV и Durable Objects.
Теперь разработчики Rust могут работать с воркерами, выполняя код внутри движка V8 WebAssembly:
use worker::*;
#[event(fetch)]
pub async fn main(req: Request, env: Env) -> Result<Response> {
console_log!(
"{} {}, located at: {:?}, within: {}",
req.method().to_string(),
req.path(),
req.cf().coordinates().unwrap_or_default(),
req.cf().region().unwrap_or("unknown region".into())
);
if !matches!(req.method(), Method::Post) {
return Response::error("Method Not Allowed", 405);
}
if let Some(file) = req.form_data().await?.get("file") {
return match file {
FormEntry::File(buf) => {
Response::ok(&format!("size = {}", buf.bytes().await?.len()))
}
_ => Response::error("`file` part of POST form must be a file", 400),
};
}
Response::error("Bad Request", 400)
}
Чтобы создать собственный воркер в Rust, требуется одна команда:
# see installation instructions for our `wrangler` CLI at https://github.com/cloudflare/wrangler
# (requires v1.19.2 or higher)
$ wrangler generate --type=rust my-project
Таким образом, разработчики убрали весь связующий код и встроили компоненты, необходимые для создания небольших скриптов или полноценных приложений на Rust: маршрутизатор, функции HTTP, хранилища воркеров KV и переменные среды.
В Cloudflare отметили, что выбрали Rust как растущий язык с мощной экосистемой. Команда заявила, что ждет отзывы и правки от разработчиков, а также расширяет штат, в том числе, открывает вакансии инженеров Rust.