Sto imparando WebAPI (e REST in generale) convertendo un servizio WCF esistente in WebAPI. Nel processo, sto diventando confuso sul modo migliore per gestire le operazioni non CRUD. Qui è il mio Contratto di servizio:Operazioni non CRUD in un servizio 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);
}
Alcuni dei metodi, come DeleteProxy, e AddProxy posso facilmente passare a una metodologia CRUD-based.
Le domande sorgono intorno:
GetProxyData - Il sistema di proxy viene utilizzato da più applicazioni, e anche se ho potuto fare api/Proxy/1, mi sento che è "barare", perché che dovrebbe essere per ottenere proxyid 1, non Proxy per l'applicazione 1.
GetUsersCurrentUserCanActAsProxyFor - Questo per me è fonte di confusione su più livelli. Come dovrei gestire più parametri? E non sta cadendo ordinatamente nel metodo CRUD, neanche.
Ciò significa che dovrei abbandonare la conversione WebAPI? In caso negativo, come dovrei affrontare questi metodi non standard?
'GetUsersCurrentUserCanActAsProxyFor' non è riposante, perché un richieste ha bisogno conoscenza implicita degli utenti "corrente". Cambiarlo in 'GetUsersUserCanActAsProxyFor (string user, int positionId, int appId)' e restituire lo stato 401 se il richiedente non è autorizzato a vedere le informazioni per utenti diversi da se stesso. Sia 'GetUsersUserCanActAsProxyFor' che' GetProxyData' sembrano soddisfare i requisiti di GET (sicuro, idempotente), quindi è solo una questione di gusti su come si progettano gli URI. – dtb
Grazie per il chiarimento, dtb. Penso che leggerò di più il paradigma REST prima di continuare a convertire ciecamente il mio WCF in WebAPI. –