Когда я начинал этот блог, главным требованием была скорость — и серверная, и клиентская. Rust оказался единственным языком, который позволил написать на одном стеке и API, и веб-интерфейс, и не идти на компромиссы.
Архитектура получилась простой: HTTP-сервер на Hyper и Screw отдаёт JSON и SSR-страницы, фронтенд на Yew собирается в WebAssembly и подхватывает гидрацию на клиенте, а нативное приложение для iOS и macOS работает через тот же самый API.
В результате один и тот же набор сущностей и валидаций живёт в крейте blog-generic, который импортируют все три цели. Изменение поля у поста требует правки в одном месте — компилятор сам напоминает обо всех остальных.
В следующих постах я расскажу про каждую часть подробнее: как устроен фронтенд на Yew, как работает ORM Rbatis, и почему я не пожалел о выборе SwiftUI для нативного клиента.