Каков наилучший способ интеграции сервера 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, которые быстро отвечают. Надеюсь это поможет.

Другие вопросы по тегам