Я тут неторопливо
пилю веб сайт на Rust. Пока архитектура получается такая - сервер на Rust отдает и принимает Json, клиент на Elm рисует формочки и общается с сервером. Получается со стороны клиента
тяжеловесно, мне не нравится. К тому же контролировать соответствие Json-а, который шлет / принимает клиент и текущего API сервера надо или вручную или какой-то генератор кода писать.
Так что последнее время я все прикидывал, а нужно ли мне смотреть в сторону WebAssembly (в который Rust компилируется), а если нужно, то зачем?
И сегодня до индейца Джо дошло, что в сарае нет стены. Если мы можем строить из Rust-а код, исполняемый в браузере, а этот код может выставлять интерфейс в Js, то нам вообще не надо делать какое-то API сайта. Клиентское приложение на Js (хоть на Elm, хоть на б-гомерзких реактах с ангулярами) скачивает с сервера WebAssembly библиотеку, собранную из тех же исходников, что и сам сервер, а значит гарантированно совместимую с сервером по всем интерфейсам и структурам данных. Библиотека эта общается с сервером как захочет сама, скорее всего через web socket, бинарными данными. Любые изменения в протокол обмена можно вносить не трогая фронтенд. И вместо дрочения Json-а клиентское приложение просто вызывает обычные функции через
js api.
Это, например, полностью решает проблему валидации данных - один и тот же код валидации, написанный на Rust, выполняется и на клиенте перед посылкой данных и на сервере при приеме данных.