Я разрабатываю API RESTful. Это мой первый API, но и мой первый действительно большой проект кодирования. Таким образом, я все еще многому учусь об архитектуре и т.д.
В настоящее время у меня есть настройка api в следующих слоях:
- Уровень HTTP
- Уровень ресурсов
- Модель домена/бизнес-логика
- Уровень доступа к данным/репозитория
- Постоянное хранилище/уровень БД
Проблема, с которой я столкнулся в данный момент, - где мне нужно разместить объекты/менеджеры рабочего процесса? По рабочим процессам я имею в виду код, который оценивает, что следующий шаг требуется конечному пользователю. Например, рабочий процесс электронной торговли. Пользователь добавляет товар в корзину, затем проверяет, затем заполняет личные данные, а затем платит. Рабочий процесс будет отвечать за принятие решения о следующих шагах, а также о том, какие шаги НЕ допускаются. Например, пользователь не мог вызвать ошибки в API, пытаясь оплатить, прежде чем они ввели личные данные (возможно, они напомнят URI для платежей и попытаются пропустить шаг). Рабочий процесс будет проверять, чтобы все предыдущие шаги были завершены, если нет, не разрешат оплату.
В настоящее время моя логика рабочего процесса находится в Уровне ресурсов. Я использую гипермедиа-ссылки для представления рабочего процесса пользователю, например. обеспечивая ссылку "следующего шага". Проблема, с которой я сталкиваюсь, заключается в том, что уровень ресурсов является слоем верхнего уровня и более согласован с презентацией. Я считаю, что ему нужно слишком много знать о базовой модели домена, чтобы эффективно оценивать рабочий процесс, то есть ему нужно было знать, что он должен проверить объект personal_detail
до разрешения оплаты.
Теперь это приводит меня к мысли, что рабочие процессы принадлежат модели домена. Это имеет гораздо больший смысл, поскольку действительно рабочие процессы являются частью бизнес-логики, и поэтому я считаю, что они лучше всего размещаются на уровне домена. В конце концов, замените Resource Layer на что-то еще, и вам все равно понадобятся основные рабочие процессы.
Но теперь проблема заключается в том, что для завершения их логических процессов требуется знание нескольких объектов домена. Теперь он чувствует себя хорошо, что, возможно, идет в своем собственном слое? Между ресурсом и уровнем домена?
- Уровень HTTP
- Уровень ресурсов
- Уровень рабочего процесса
- Модель домена/бизнес-логика
- Уровень доступа к данным/репозитория
- Постоянное хранилище/уровень БД
Мне просто интересно, есть ли у кого-нибудь другие взгляды или мысли вокруг этого? Как я уже сказал, у меня нет опыта прошлых приложений, чтобы знать, где должны быть размещены рабочие процессы. Я действительно просто изучаю это в первый раз, поэтому хочу убедиться, что я подойду к нему правильным путем.
Ссылки на статьи или блоги, которые охватывают это, будут очень признательны. Любите читать разные версии.
ИЗМЕНИТЬ
Чтобы уточнить, я выпускаю, что HATEOAS позволяет клиенту перемещаться по "рабочему процессу", но в моем API должно быть что-то, что знает, какие ссылки показывать, то есть он действительно определяет рабочий процесс, который разрешен. Он представляет связанные с рабочим процессом ссылки в ресурсе, но дополнительно проверяет, что запросы синхронизируются с рабочим процессом. Хотя я согласен с тем, что клиент, возможно, будет следовать только ссылкам, предоставленным в ресурсе, опасностью (и красотой) отдыха, является то, что его URI управляется, поэтому нет ничего, что останавливало бы вредного клиента, пытающегося "пропустить" шаги в рабочем процессе делая образованную догадку в URI. API должен определить это и вернуть ответ 302.