Tôi đang tìm hiểu WebAPI (và REST nói chung) bằng cách chuyển đổi dịch vụ WCF hiện có thành WebAPI. Trong quá trình này, tôi trở nên bối rối như cách tốt nhất để xử lý các hoạt động phi CRUD. Đây là Hợp đồng dịch vụ của tôi:Hoạt động phi CRUD trong dịch vụ RESTful (WebAPI)
[ServiceContract]
public interface IProxyHelper
{
[OperationContract]
List<ProxyInfo> GetUsersCurrentUserCanActAsProxyFor(int positionId, int appId);
[OperationContract]
void DeleteProxy(int id);
[OperationContract]
List<ProxyInfo> GetProxyData(int appId);
[OperationContract]
bool CanPositionProxy(int positionId, int appId);
[OperationContract]
void AddProxy(
string userRacf,
string proxyAsRacf,
int userPositionId,
int proxyPositionId,
string requestedByRacf,
int appId);
[OperationContract]
int GetPositionIdByRacf(string racf);
[OperationContract]
string GetRacfByPositionId(int positionId);
}
Một số phương pháp, như DeleteProxy và AddProxy tôi có thể dễ dàng chuyển sang phương pháp dựa trên CRUD.
Những câu hỏi nảy sinh xung quanh:
GetProxyData - Hệ thống proxy được sử dụng bởi nhiều ứng dụng, và mặc dù tôi có thể làm api/Proxy/1, tôi cảm thấy đó là "lừa dối" bởi vì đó nên để nhận ProxyId 1, không phải là proxy cho ứng dụng 1.
GetUsersCurrentUserCanActAsProxyFor - Điều này gây nhầm lẫn với nhiều cấp độ đối với tôi. Tôi nên xử lý nhiều thông số như thế nào? Và nó cũng không rơi vào phương pháp CRUD.
Điều này có nghĩa là tôi nên từ bỏ chuyển đổi WebAPI? Nếu không, tôi nên giải quyết những phương pháp phi tiêu chuẩn như thế nào?
'GetUsersCurrentUserCanActAsProxyFor' không RESTful, bởi vì một yêu cầu cần kiến thức tiềm ẩn của người sử dụng "hiện tại". Thay đổi nó thành 'GetUsersUserCanActAsProxyFor (chuỗi người dùng, int positionId, int appId)' và trả về trạng thái 401 nếu người yêu cầu không được phép xem thông tin cho người dùng khác ngoài chính mình. Cả hai 'GetUsersUserCanActAsProxyFor' và' GetProxyData' dường như phù hợp với các yêu cầu cho GET (an toàn, idempotent), do đó, nó chỉ là vấn đề hương vị cách bạn thiết kế các URI của bạn. – dtb
Cảm ơn bạn đã làm rõ, dtb. Tôi nghĩ tôi sẽ đọc nhiều hơn về mô hình REST trước khi tôi tiếp tục cố gắng chuyển đổi WCF một cách mù quáng thành WebAPI. –