title: Non-CRUD Operations in a RESTful (WebAPI) Service
body: <p>I'm learning WebAPI (and REST in general) by converting an existing WCF service to WebAPI.  In the process, I'm becoming confused as to the best way to handle the non-CRUD operations.  Here is my Service Contract:</p>
  
  <pre><code>[ServiceContract]
  public interface IProxyHelper
  {
      [OperationContract]
      List&lt;ProxyInfo&gt; GetUsersCurrentUserCanActAsProxyFor(int positionId, int appId);
  
      [OperationContract]
      void DeleteProxy(int id);
  
      [OperationContract]
      List&lt;ProxyInfo&gt; 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);
  }
  </code></pre>
  
  <p>Some of the methods, like DeleteProxy, and AddProxy I can easily move to a CRUD-based methodology.  </p>
  
  <p>The questions arise around:</p>
  
  <p>GetProxyData - The proxy system is used by multiple applications, and though I could do api/Proxy/1, I feel that's "cheating" because that should be for getting ProxyId 1, not Proxies for Application 1.</p>
  
  <p>GetUsersCurrentUserCanActAsProxyFor - This one is confusing on multiple levels for me.  How should I handle multiple parameters?  And it's not falling neatly into the CRUD method, either.</p>
  
  <p>Does this mean I should abandon the WebAPI conversion?  If not, how should I tackle these non-standard methods?</p>