我正在通過將現有的WCF服務轉換爲WebAPI來學習WebAPI(以及一般的REST)。在這個過程中,我對處理非CRUD操作的最佳方式感到困惑。這裏是我的服務合同:RESTful(WebAPI)服務中的非CRUD操作
[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);
}
一些方法,如DeleteProxy和AddProxy我可以很容易地遷移到一個基於CRUD-方法。
的問題出現了圍:
GetProxyData - 代理系統所使用的多個應用程序,雖然我能做的API /代理/ 1,我覺得的「欺騙」,因爲這應該是越來越ProxyId 1,而不是應用程序1的代理。
GetUsersCurrentUserCanActAsProxyFor - 這是一個讓我困惑的多層次。我應該如何處理多個參數?它也不會完全落入CRUD方法中。
這是否意味着我應該放棄WebAPI轉換?如果不是,我應該如何處理這些非標準方法?
'GetUsersCurrentUserCanActAsProxyFor'是不是平安,因爲請求需要的「當前」用戶的隱性知識。將其更改爲'GetUsersUserCanActAsProxyFor(string user,int positionId,int appId)',並且如果請求者未被授權查看除自己以外的用戶的信息,則返回狀態401。 'GetUsersUserCanActAsProxyFor'和'GetProxyData'似乎都符合GET(安全,冪等)的要求,所以這只是你如何設計你的URI的品味問題。 – dtb
謝謝澄清,dtb。在我進一步試圖盲目地將我的WCF轉換爲WebAPI之前,我想我會更多地閱讀REST範例。 –