The Northwind Web Services Example project explores different features of ServiceStack using data from Northwind SQlite Database.
ServiceStack's REST Services, are just normal Web Services with the addition of a [Route] attribute that allows you to provide the canonical / permanent location for your web service.
|Customer Maria Anders||customers/ALFKI||jsonxmlhtmlcsvjsvx-vcard||CustomerDetailsService.cs|
|Customer Maria Anders Orders||customers/ALFKI/orders||jsonxmlhtmlcsvjsv||OrdersService.cs|
|Latest Orders - page 2||orders/page/2||jsonxmlhtmlcsvjsv||OrdersService.cs|
|Northwind AutoQuery Services|
|Countries Starting With 'U'||CountryStartsWith=U||jsonxmlhtmlcsvjsv||AutoQuery.cs|
|Customers IN (CHOPS,FRANK)||Ids=CHOPS,FRANK||jsonxmlhtmlcsvjsv||AutoQuery.cs|
|Freight more than $300||Freight>=300||jsonxmlhtmlcsvjsv||AutoQuery.cs|
|Orders by Customer, Id Desc||OrderBy=CustomerId,-Id||jsonxmlhtmlcsvjsv||AutoQuery.cs|
|AutoQuery UI for Northwind Services|
The Northwind database also includes the addition of the VCard custom media format.
Checkout the walk thru to see how to create your own Custom Media Types with ServiceStack:
As it's important for high-performance web services, ServiceStack includes a rich caching provider framework with Redis, Memcached, Memory and FileSystem-based cache providers available.
To compare the difference with caching enabled, below are the 'cached versions' of the REST services above.
|Customer Maria Anders||cached/customers/ALFKI||jsonxmlhtmlcsvjsv||CachedServices.cs|
|Customer Maria Anders Orders||cached/customers/ALFKI/orders||jsonxmlhtmlcsvjsv||CachedServices.cs|
|Latest Orders - page 2||cached/orders/page/2||jsonxmlhtmlcsvjsv||CachedServices.cs|
Note: The most optimal result is cached, i.e. if your browser supports gzip/deflate it will cache the compressed output. Caching also supports all user-defined formats.
The Northwind project is also an example of how much can be achieved with a minimal amount of effort and code. This entire website literally just consists of these three classes . Everything else seen here is automatically provided by ServiceStack using a code-first, convention-based approach. ServiceStack can infer a richer intelligence about your services to better able to provide more generic and re-usable functionality for free!
You're unlikley to ever see the same WCF SOAP service, generating a visually informative HTML view of your data, allow it to be exposed over REST-ful interfaces or be able to export it to a CSV data file. With ServiceStack not only is this possible - it comes out-of-the-box, config-pain-free :)
No other config, code-gen are required and you do not need to learn any other artificial constructs and concepts to get started. The logic of your services simply live in a pure C#, dependency-free and testable class.
The initial difficulty to new developers coming to ServiceStack is having to un-learn WCFs RPC approach to web services. In our opinion the problem with WCF is not that it's an abstract walled-interface forcing you to develop all your Network services in.
The main problem is it forcing all network requests to marshal onto a C# method, we believe is an un-natural fit, leading to the creation of slow, chatty APIs. ServiceStack believes this is an anti-pattern which produces more friction then its preferred strong-typed DTO approach.