Rust и WebAssembly

Nov 15, 2017 11:17


Я тут неторопливо пилю веб сайт на Rust. Пока архитектура получается такая - сервер на Rust отдает и принимает Json, клиент на Elm рисует формочки и общается с сервером. Получается со стороны клиента тяжеловесно, мне не нравится. К тому же контролировать соответствие Json-а, который шлет / принимает клиент и текущего API сервера надо или вручную или какой-то генератор кода писать.

Так что последнее время я все прикидывал, а нужно ли мне смотреть в сторону WebAssembly (в который Rust компилируется), а если нужно, то зачем?

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

Это, например, полностью решает проблему валидации данных - один и тот же код валидации, написанный на Rust, выполняется и на клиенте перед посылкой данных и на сервере при приеме данных.
Previous post Next post
Up