Как лучше всего интегрировать сервер Aqueduct с существующим клиентским веб-приложением Dart?

Я пытаюсь связать сервер акведука с моим существующим проектом дротика. Я знаю об акведуках HTTPFileController и о том, как вы можете обслуживать статические файлы, но я искал представление о том, как лучше всего интегрировать полное клиентское веб-приложение, написанное на дротике, с фреймворком aqueduct. Т.е. выполнение вызовов методов API из компонента, которые говорят, что возвращают список пользователей или что-то в этом роде. Пакет RPC предлагает что-то вроде этого, но я хотел бы использовать акведук, поскольку он более надежен и предлагает больше функций.

В настоящее время моя общая структура проекта выглядит так: Любые предложения приветствуются!

  • my_proj
    • build
    • lib
      • components
        • (dart components serving html)
      • controller
        • (aqueduct controllers)
      • model
        • (aqueduct models)
      • my_proj.dart
      • my_proj_sink.dart
    • миграции
    • тест
    • web
      • main.dart
      • index.html

person Arthur Daniel    schedule 16.06.2017    source источник


Ответы (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 мы больше сосредоточены на предоставлении инструментария, который работает с ним. (Я также посмотрю, может ли один из членов нашей команды, сосредоточившийся на этой части головоломки, заглянуть сюда с некоторыми дополнительными мыслями.)

Не стесняйтесь сообщить о проблеме и для этого, чтобы вы могли отслеживать его прогресс. Точно так же у нас есть люди в Gitter dart-lang / server, которые быстро отвечают. Надеюсь это поможет.

person Joe Conway    schedule 17.06.2017
comment
Извините, я неправильно понял вопрос. Я думал (почему я не знаю), что OP спрашивал об использовании Aqueduct вместе с существующим приложением Flutter, а не веб-приложением Dart. - голосование "против" невозможно? ... ???? - person cseder; 01.09.2020
comment
По-видимому, вам нужно отредактировать ответ, прежде чем я смогу проголосовать за него обратно после отрицательного. Итак, это означает, что на SO нельзя менять свое мнение после того, как осознали, что это была ошибка. Это не очень гибко, правда? Угадайте, если я попытаюсь отредактировать его, то при голосовании я получу другую ошибку, так как это было мое изменение ... - person cseder; 03.09.2020