Rest API и DDD

В моем проекте используется методология DDD.

Проект имеет совокупную (юридическую) сделку. Этот агрегат имеет много вариантов использования.

Для этого агрегата мне нужно создать остальные API.

Со стандартным: создавать и удалять не проблема.

1)CreateDealUseCase(название, цена и многие другие параметры);

POST /rest/{version}/deals/
{ 
   'name': 'deal123',
   'price': 1234;
   'etc': 'etc'
}

2)DeleteDealUseCase(Я бы)

DELETE /rest/{version}/deals/{id}

Но что делать с остальными вариантами использования?

HoldDealUseCase (идентификатор, причина);UnholdDealUseCase (ID);CompleteDealUseCase (id и многие другие параметры);CancelDealUseCase (идентификатор, начало, причина);ChangePriceUseCase (id, newPrice, причина);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 действие имеет много разных вариантов запросов, от которых уже зависят конкретные ответы.

Все решения имеют существенные недостатки.

Я прочитал много статей о ОТДЫХЕ в Интернете. Везде только теория, как быть здесь с моей конкретной проблемой?

Ответы на вопрос(4)

Ваш ответ на вопрос