Обслуживание веб-страницы с Redstone
Я занимаюсь разработкой веб-приложения с использованием Dart с использованием Redstone и полимера. Поскольку Dart обеспечивает разработку на стороне сервера и клиента, мне интересно, каков хороший шаблон для веб-приложения (особенно для Dart)?
Опция 1:
Есть сервер, скажем, /bin/server.dart
1.1. получить запрос и ответить с помощью JSON
@app.Route("/user/:id", methods: const [app.GET])
getUser(int id) { ... }
есть клиент, то есть web/user.html и web / user.dart
2.1 в user.dart сделать запрос к серверу
2.2 получить JSON и сформировать правильный user.html
Вариант 2:
Есть сервер / бин / сервер
1.1 получить запрос и ответить HTML-страницей, аналогичной
@app.Route("/")
helloWorld() => "Hello, World!";
Если в первом случае я более или менее знаю (и понимаю), как заставить вещи работать, в то время как я нахожу действительно разочаровывающим, что я не использую преимущества совместного использования кода сервером-клиентом Дарт: мне нужно кодировать и декодировать обратно json чтобы получить те же данные. Есть ли способ избежать этого?
Второй вариант для меня гораздо менее понятен: как бы я обслуживал веб-страницу таким образом? Как бы я заставил Polymer выполнять свою работу?
Ответы на вопросы в тексте и общее объяснение дурного способа разработки веб-приложений очень приветствуются.
2 ответа
Вы можете увидеть пример приложения Redstone + Polymer здесь: https://github.com/luizmineo/io_2014_contacts_demo
В основном это работает как Option 1
: Клиент и сервер обмениваются данными через сервисный API, а данные кодируются в формате JSON. Хотя Редстоун использует shelf_static
пакет для обслуживания клиентского кода в браузере.
Если вы предпочитаете, также возможно использовать механизм шаблонов на стороне сервера, такой как усы, для создания HTML-страниц на сервере, хотя, я думаю, было бы действительно сложно интегрировать это с Polymer.
И, наконец, вы всегда должны каким-то образом кодировать данные при передаче данных между клиентом и сервером, но это не означает, что они не могут совместно использовать код. Например, они могут использовать одни и те же классы домена. Проверьте образец приложения, указанный выше, для более подробной информации.
Я не думаю, что вариант 2 возможен. Полимер зависит от dart:html, который не разрешен на стороне сервера.