Trong dự án của tôi sử dụng phương pháp DDD.API còn lại và DDD
Dự án có Thỏa thuận tổng thể (thực thể). Tổng hợp này có nhiều trường hợp sử dụng.
Đối với tổng hợp này, tôi cần tạo api còn lại.
Với tiêu chuẩn: tạo và xóa không có vấn đề gì.
1) CreateDealUseCase (tên, giá và nhiều thông số khác);
POST /rest/{version}/deals/
{
'name': 'deal123',
'price': 1234;
'etc': 'etc'
}
2) DeleteDealUseCase (id)
DELETE /rest/{version}/deals/{id}
Nhưng phải làm gì với phần còn lại của trường hợp sử dụng?
- HoldDealUseCase (id, lý do);
- UnholdDealUseCase (id);
- CompleteDealUseCase (id và nhiều thông số khác);
- CancelDealUseCase (id, amercement, reason);
- ChangePriceUseCase (id, newPrice, lý do);
- ChangeCompletionDateUseCase (id, newDate, amercement, whyChanged);
- v.v. (tổng số 20 trường hợp sử dụng) ...
Giải pháp là gì?
1) Sử dụng động từ:
PUT /rest/{version}/deals/{id}/hold
{
'reason': 'test'
}
Nhưng! Động từ không thể được sử dụng trong url (trong lý thuyết REST).
2) Sử dụng hoàn thành trạng thái (mà sẽ được sau khi các trường hợp sử dụng):
PUT /rest/{version}/deals/{id}/holded
{
'reason': 'test'
}
Cá nhân đối với tôi nó trông xấu xí. Có lẽ tôi sai?
3) Sử dụng 1 yêu cầu PUT cho tất cả các hoạt động:
PUT /rest/{version}/deals/{id}
{
'action': 'HoldDeal',
'params': {'reason': 'test'}
}
PUT /rest/{version}/deals/{id}
{
'action': 'UnholdDeal',
'params': {}
}
Thật khó để xử lý trong backend. Hơn nữa, rất khó để ghi lại tài liệu. Vì 1 hành động có nhiều biến thể yêu cầu khác nhau, từ đó đã phụ thuộc vào các phản hồi cụ thể.
Tất cả các giải pháp đều có những hạn chế đáng kể.
Tôi đã đọc nhiều bài viết về REST trên internet. Ở khắp mọi nơi chỉ có một lý thuyết, làm thế nào để ở đây với vấn đề cụ thể của tôi?
Tôi không muốn nêu rõ câu trả lời dưới đây vì vậy có lẽ những người khác có thể đưa ra ý kiến của họ trong trường hợp đó là một ý tưởng tồi tệ. Làm thế nào về: '/ phần còn lại/{phiên bản}/dealsheld /', '/ phần còn lại/{phiên bản}/dealscompleted/{id}', vv Vì một trong những sẽ cần phải biết được nhà nước bạn đang đối phó với trong bất kỳ sự kiện. Một kế hoạch như vậy có hợp lý không? –