CodePaste Logo
New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets Web Code Search Snippets Search
Sign inor Register
Language: C#

REST API prototype - Authoring a resource

602 Views
Copy Code Show/Hide Line Numbers
routes.AddRoute<OrdersResource>("/Orders");
routes.AddRoute<OrdersResource>("/Orders/{Order}")
 
public class OrdersResource {
  //dependencies can be injected
  public OrdersResource(IRepository<Order> orderRepository) {
  }
 
  public JsonResponseMessage GetOrders() {}  // allows explict mapping for contentneg based on return value
  public XmlResponseMessage GetOrders() {}
  public JpegResponseMessage GetOrders() {}
  public HttpResponseMessage GetOrders() {} // fall through, or you can use this style for handling neg dynamically
  public HttpResponseMessage GetOrder(Order o, HttpRequestMessage request) {}  //can mix and match strongly typed params with direct access to the request
  public HttpResponseMessage PostOrder(Order o) {}
  public HttpResponseMessage PutOrder(Order o) {}
  public HttpResponseMessage DeleteOrder (int orderID) {}
}
 
// iteration 2
 
routes.AddRoute<OrdersResource>("/Orders");
routes.AddRoute<OrderResource>("/Order/{Order}")
 
public class OrderResource {
  //dependencies can be injected
  public OrderResource(IRepository<Order> orderRepository) {
  }
 
  public ResourceResponse Get(Order o, HttpRequestMessage request) {}  //can mix and match strongly typed params with direct access to the request
  public ResourceResponse Put(Order o) {}
  public ResourceResponse Delete (int orderID) {}
}
 
public class OrdersResource {
  public OrdersResource(IRepository<Order> orderRepository) {}
 
  public ResourceResponse Get() {}  // allows explict mapping for contentneg based on return value
  public ResourceResponse Post(Order o) {}
}
 
public class ResourceResponse {
  public HttpStatusCode StatusCode {get;set;}
  public ResponseHeaders Headers {get;set;}
  public object Content {get;set;}  //will be formatted elsewhere
}
 
 
by Glenn Block
  June 26, 2010 @ 11:50am
Tags:
Description:
Illustrates an API for authoring restful resources.
- Method prefixes conventionally map to verbs
- Automatically handles contentneg by mapping against return values.
- Allows dependencies to be injectd- Can automatically map params in the uri / query string against the method signature.
- Allows direct access to the request.
- HttpResponse is very light, and can easily be tested.
- Request can easily be mocked.

Add a comment


Report Abuse
brought to you by:
West Wind Techologies



If you find this site useful and use it frequently please consider making a donation to support this free service.
Donate