Uczę się interfejsu WebAPI (i ogólnie usługi REST), konwertując istniejącą usługę WCF do interfejsu WebAPI. W trakcie tego procesu jestem coraz bardziej zdezorientowany, jeśli chodzi o najlepszy sposób na obsługę operacji niezawierających CRUD. Oto moja Umowa serwisowa:Operacje inne niż CRUD w usłudze 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);
}
Niektóre z metod, takich jak DeleteProxy i AddProxy można łatwo przenieść do metodyki opartej na CRUD.
pytania pojawiają się wokół:
GetProxyData - System proxy jest używany przez wiele aplikacji i choć mogłem zrobić api/Proxy/1, czuję, że to "oszustwo", ponieważ to powinno być dla coraz ProxyId 1, nie Proxy do Aplikacji 1.
GetUsersCurrentUserCanActAsProxyFor - Ten jest dla mnie dezorientujący na wielu poziomach. Jak mam obsługiwać wiele parametrów? I nie jest to również zgrabna metoda CRUD.
Czy to oznacza, że powinienem zrezygnować z konwersji WebAPI? Jeśli nie, w jaki sposób mam rozwiązać te niestandardowe metody?
'GetUsersCurrentUserCanActAsProxyFor' nie jest relaksującego, gdyż wnioski potrzebuje ukrytą wiedzę o„aktualnym”użytkownika. Zmień go na 'GetUsersUserCanActAsProxyFor (string user, int positionId, int appId)' i zwróć status 401, jeśli requester nie jest uprawniony do wyświetlania informacji dla użytkowników innych niż on. Zarówno 'GetUsersUserCanActAsProxyFor' i' GetProxyData' wydają się pasować do wymagań GET (safe, idempotent), więc to tylko kwestia gustu, jak projektujesz swoje URI. – dtb
Dzięki za wyjaśnienia, dtb. Myślę, że zrobię więcej czytania w paradygmacie REST zanim pójdę dalej próbując ślepo przekonwertować moje WCF do WebAPI. –