В моем проекте используется методология DDD.Rest API и DDD
Проект имеет совокупность (сущность) Сделка. Этот агрегат имеет много вариантов использования.
Для этого агрегата мне нужно создать rest api.
Со стандартом: создавать и удалять без проблем.
1) CreateDealUseCase (имя, цена и многие другие параметры);
POST /rest/{version}/deals/
{
'name': 'deal123',
'price': 1234;
'etc': 'etc'
}
2) DeleteDealUseCase (ID)
DELETE /rest/{version}/deals/{id}
Но что делать с остальными вариантами использования?
- HoldDealUseCase (id, reason);
- UnholdDealUseCase (id);
- CompleteDealUseCase (id и многие другие параметры);
- ОтменитьDealUseCase (id, amercement, reason);
- ChangePriceUseCase (id, newPrice, reason);
- ChangeCompletionDateUseCase (id, newDate, amercement, whyChanged);
- и т.д. (всего 20 случаев использования) ...
Каковы решения?
1) Используйте глаголы:
PUT /rest/{version}/deals/{id}/hold
{
'reason': 'test'
}
Но! Глаголы не могут использоваться в URL-адресе (в теории REST).
2) Используйте завершенная состояние (который будет после случая использования):
PUT /rest/{version}/deals/{id}/holded
{
'reason': 'test'
}
Лично для меня это выглядит некрасиво. Может, я ошибаюсь?
3) Используйте 1 запрос PUT для всех операций:
PUT /rest/{version}/deals/{id}
{
'action': 'HoldDeal',
'params': {'reason': 'test'}
}
PUT /rest/{version}/deals/{id}
{
'action': 'UnholdDeal',
'params': {}
}
трудно обрабатывать во внутреннем интерфейсе. Кроме того, документ трудно документировать. Поскольку 1 действие имеет много разных вариантов запросов, из которых уже зависит от конкретных ответов.
Все решения имеют существенные недостатки.
Я прочитал много статей о REST в Интернете. Везде только теория, как быть здесь с моей конкретной проблемой?
Я не хочу заявлять следующее в качестве ответа, поэтому, возможно, другие могут дать свое мнение в том случае, если это ужасная идея. Как насчет: '/ rest/{version}/dealheld /', '/ rest/{version}/dealscompleted/{id}' и т. Д. Так как нужно знать, с каким состоянием вы имеете дело в любом случае. Может ли такая схема иметь смысл? –