Каков наилучший способ интеграции сервера Aqueduct с существующим клиентским веб-приложением Dart?
Я пытаюсь связать сервер акведука с моим существующим проектом дартс. Я знаю об акведуках HTTPFileController и о том, как вы можете обслуживать статические файлы, но я искал понимание наилучшего способа интеграции полнофункционального веб-приложения на стороне клиента, написанного в dart, с каркасом aqueduct. Т.е. делать вызовы API-методов из компонента, которые говорят, что возвращают список пользователей или что-то подобное. Пакет RPC предлагает что-то подобное, но я бы хотел использовать акведук, так как он более надежный и предлагает больше функций.
В настоящее время моя общая структура проекта выглядит следующим образом: Любые предложения приветствуются!
- my_proj
- строить
- Lib
- компоненты
- (дартс компоненты, обслуживающие HTML)
- контроллер
- (контроллеры акведука)
- модель
- (модели акведука)
- my_proj.dart
- my_proj_sink.dart
- компоненты
- миграции
- тестовое задание
- Web
- main.dart
- index.html
1 ответ
Хорошая идея держать проекты отдельно. Таким образом, вы можете иметь отдельные ограничения зависимостей для обеих платформ, которые будут иметь смысл по мере роста вашего приложения. Это также даст вам максимальную гибкость в развертывании.
Вот пример репозитория; они находятся в стадии разработки, поэтому приложение Flutter подключено к API Aqueduct, а приложение Angular2 не было затронуто. Flutter имеет похожий компонентный подход.
shared
Каталог будет наиболее интересным для вас - в нем есть модель и сервисы для звонков в API. И приложения Flutter, и Angular2 используют его как зависимость.
В этом примере сервер работает с aqueduct serve --port 8082
от server/
и веб-приложение запускается с pub serve
от angular2/
, По мере развития экосистемы Dart с такими вещами, как DDC, вам, скорее всего, лучше всего будет принять такой шаблон разработки / развертывания, который работает в этом наборе инструментов.
Если вы планируете обслуживать сгенерированные файлы HTML/CSS/JS из Aqueduct, хорошей идеей будет иметь HTTPFileController
ссылаться на build/web
папка в вашем проекте Angular2. Таким образом, вы можете иметь структуру папок, например:
project/
server/
pubspec.yaml
lib/
sink.dart
controllers/
model/
client/
pubspec.yaml
lib/
web/
И ваше соединение маршрута выглядит так:
router
.route("/*")
.pipe(new HTTPFileController("../client/build/web"));
Другой подход заключается в создании сценария сборки, который записывает файлы в каталог внутри каталога сервера; это может быть полезно для развертывания.
Команда Aqueduct в настоящее время изучает различные варианты и инструменты для этой цели. С недавним выпуском DDC мы больше сосредоточены на предоставлении инструментария, который работает с ним. (Я также посмотрю, может ли один из членов нашей команды, сосредоточенный на этой части головоломки, зайти сюда с некоторыми дополнительными мыслями.)
Пожалуйста, не стесняйтесь подать проблему для этого, чтобы вы могли отслеживать ее прогресс. Аналогично, у нас есть люди в https://gitter.im/dart-lang/server, которые быстро отвечают. Надеюсь это поможет.