ServiceStack projesinin öncü yöneticisi olarak çok benzer kullanım durumları var, ServiceStack'ın avantajları ve mesaj tabanlı tasarımının birçok doğal faydası hakkında iyi bir fikrim var .
ServiceStack, 2008 yılından bu yana, sürtünmesiz uzak hizmetlerin doğru tasarımını ve uygulanmasını teşvik etmek amacıyla, kuruluşundan bu yana OSS tarafından yürütülen bir proje olarak faaliyet göstermektedir.
Basit ve Zarif Tasarım
Nihai sadelik arayışında, MVC, WebApi'nin yaptığı gibi (özelliklerinin çoğu Microsoft'un ürettiği diğer tüm Web Servis Çerçevelerinin yanı sıra denetleyicilerinize değil, modellerinize doğal olarak bağlanan özelliklerinin çoğu ile basit ve zarif bir çekirdek etrafında inşa edilmiştir. ).
İleti tabanlı bir tasarımı benimsemek, daha genişletilebilir ve daha az kırılgan hizmetleri teşvik etmeleri, erişim ve arama kalıplarını basitleştirmeleri ve ücretsiz olarak elde ettiğiniz diğer birçok doğal faydaları içermeleri bakımından uzak hizmetler için üstün bir yaklaşım sunar .
Temel bir görev olarak, görünmez ve müdahaleci olmayan bir API tutmayı ve bugün .NET veya web hizmeti geliştiricilerine henüz aşina olmayan yeni konseptleri veya yapay yapıları tanıtmaktan kaçınarak her aşamada karmaşıklıkla mücadele ediyoruz.
Örnek olarak, IService<T>
hizmet uygulamanız yalnızca otomatik kablolu bağımlılıkları olan standart bir C # sınıfıdır. İnce ve hafif sarmalayıcılar, temel çalışma zamanı IHttpRequest ve IHttpResponse türleri etrafında tutarlı ve birleşik bir API sağlamak için kullanılır . Ayrıca, temel ASP.NET veya HttpListener'ın İstek ve Yanıt sınıflarına erişime izin verir, böylece ServiceStack kullanırken asla kısıtlanmazsınız.
WCF ve WebApi ile karşılaştırmalı
ServiceStack ve WCF'nin tanıdığı zıt API stillerine kısa bir genel bakış . WebApi, REST-ful API tasarımını teşvik ettiği için WCF'den farklıdır. 2 arasındaki örneklere gelince, bu, ServiceStack ve WebApi'de yazılmış aynı hizmetle sahip olduğum bilinen tek örnektir .
Best Practices uzaktan hizmetleri
ServiceStack, sadelik, performans ve Martin Fowlers uzaktan hizmet tasarım desenlerini olabildiğince idiomatik C # ile kucaklamak üzerine odaklanan web / uzaktan hizmet en iyi uygulamalarını tanıtmaya odaklanmıştır:
Cephe Desen Eğer işlem sınırları boyunca iletişim kurduğunuzda hiç batchful, iri taneli arayüzleri kullanımını önerir -.
DTO desen ( MSDN ) - özel amaçlı Poços kullanımını Dikte web servisleri yanıtların tel biçimini oluşturmak için.
Ağ Geçidi Desen ( MSDN ) İstemci Ağ Geçidi / DTO modelleri ve Servis Arayüz katman arasındaki istemci ve sunucu iletişimi saklanması.
Bu kalıplar, endişelerin temiz bir şekilde ayrılmasını ve sürtünmesiz yinelemeli geliştirme deneyimini sağlar.
Hizmetlerinizi güçlendirin
Özünde bir ServiceStack web hizmeti, IService<T>
temiz POCO'ları kullanarak kendi İstek ve Yanıt DTO'larınızla web hizmeti sözleşmenizi tanımlamak için tam bir özgürlük sağlayan bağımlılık gerektirmeyen ve otomatik kablolu saf C # arayüzü etrafında merkezlenmiştir - ServiceStack API'sini pratikte görünmez ve olmayan hale getirir -invaziv, yani C # hizmetleri mantığınızı ayıklamak ve bir ServiceStack ana bilgisayarının dışında çalıştırmak çok önemlidir.
Bu öz, ServiceStack'ta yalnızca 1 C # .cs sınıfıyla elde ettiğinize iyi bir örnektir :
- Kayıtlı tüm biçimler için meta veri sayfaları
- WSDL'lere, XSD'lere ve C # istemci örneklerine bağlantılar içeren
- İnsan dostu HTML rapor görünümü
- Tek bir bağımsız html sayfası anlık görüntüsü (harici referans yok). Katıştırılmış JSON web hizmeti yanıtı içerir - veri anlık görüntülerine programlı erişim sağlar.
- Dahili Mini Profiler (mükemmel MVC Mini Profiler portu )
- JSON / JSONP, XML, JSV, CSV ve SOAP uç noktaları
RestServiceBase ve ServiceBase sınıfları, mümkün olan en yüksek olası yeniden kullanım için özel C # mantığınızı barındırmayı amaçlamaktadır; örn. DTO-ilk tasarımı, aynı C # Hizmetinizin de bir MQ Ana Bilgisayarında da barındırılabileceği ve yürütülebileceği ertelenmiş ve proxy uygulamasına izin verir RedisMQ ana bilgisayarınaIMessageService
benzer bir kayıt yaptırıp hizmetinizi /asynconeway
son nokta üzerinden aradığınızda (yani client.SendOneWay()
C # İstemcilerde) olan
Ayrıca base.ResolveService<T>()
, Nortwind CustomerDetails Service örneğinde görüldüğü gibi, seçilen hizmetin otomatik kablolu örneğini döndüren yöntemi kullanarak kolayca bileşik temsilci oluşturabilir ve oluşturabilirsiniz :
var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
new Orders { CustomerId = customer.Id });
Düz C # nesnelerini döndürme
Çoğunlukla ServiceStack, çoğu C # nesnesini beklendiği gibi serileştirir - olası dönüş türlerinin listesi ( bu yanıttan ):
- Herhangi bir DTO nesnesi -> Response ContentType için serileştirilmiş
- Özelleştirilmiş HTTP yanıtı için HttpResult, HttpError, CompressedResult (IHttpResult)
Aşağıdaki türler dönüştürülmez ve doğrudan Yanıt Akışı'na yazılır:
- sicim
- Akış
- IStreamWriter
- byte [] - uygulama / octet-stream İçerik Türü ile.
Özel HTTP üstbilgileri desteğinin bir örneği, HTTP Üstbilgilerini global olarak veya hizmet başına bazda yapılandırabileceğiniz bu CORS örneği tarafından görülebilir .
HTML Desteği
ServiceStack'ta HTML'yi döndürmek için burada ayrıntılı olarak açıklanan birden fazla seçenek vardır .
.NET için en hızlı metin ve ikili serileştiricileri içerir
Esnek ve hızlı serializers hızlı tepki süreleri ve ServiceStack içerir neden olan mevcut müşterilerine kesilmez bir versionable API sağlamak için bir API birincil öneme sahip .NET için en hızlı metin serializers etkinleştirmek için bir Nuget seçeneğiyle @marcgravell 'ın Protokolü Tamponlar (.NET'in en hızlı ikili serileştiricisi).
ServiceStack'ın metin serileştiricileri çok esnektir ve hatasız aşırı sürümlere dayanabilir .
Sürtünmesiz geliştirme deneyimi Uçtan Uca
ServiceStack'ın fikirli doğası, herhangi bir kod genine sahip olmadan Sync / Async C # /. NET ve Async Silverlight istemcileri için yerleşik desteğe sahip hızlı, yazılan, kısa bir web hizmeti API'sına uçtan uca izin verir :
Senkronizasyon C # Örneği
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });
Async C # Örneği
client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });
Sadece saf JSON döndürdüğü için, diğer HTTP İstemcileriyle de önemsiz bir şekilde tüketilir, örn. JQuery kullanan JS istemcisi örneği :
$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
alert(todos.length == 1);
});
Son derece test edilebilir
Tüm C # /. NET ServiceClients , aynı birimleri test edebileceğiniz noktaya kadar son derece test edilebilir ve değiştirilebilir hale getiren aynı arayüzleri paylaşır; ayrıca XML, JSON, JSV, SOAP Entegrasyon Testi olarak da hizmet eder .
Yerleşik Zengin Doğrulama ve Hata İşleme
Sürtünmesiz ve temiz bir geliştirme deneyimi sağlama görevinde, ServiceStack ayrıca bir C # İstisnası atmanın veya yerleşik Akıcı doğrulamanın kullanılmasının istemcilere web hizmeti istemcilerinde kolayca erişilebilmesini sağlayan yerleşik doğrulama ve hata işleme içerir. , Örneğin:
try {
var client = new JsonServiceClient(BaseUri);
var response = client.Send<UserResponse>(new User());
} catch (WebServiceException webEx) {
/*
webEx.StatusCode = 400
webEx.ErrorCode = ArgumentNullException
webEx.Message = Value cannot be null. Parameter name: Name
webEx.StackTrace = (your Server Exception StackTrace - if DebugMode is enabled)
webEx.ResponseDto = (your populated Response DTO)
webEx.ResponseStatus = (your populated Response Status DTO)
webEx.GetFieldErrors() = (individual errors for each field if any)
*/
}
JavaScript hatalarını önemsiz hale getirmek için , yanıt hatalarınızı HTML form alanlarınıza tek bir kod satırıyla önemsiz bir şekilde bağlamak için hafif ss-validation.js JavaScript kitaplığını kullanabilirsiniz. SocialBootstrapApi örnek proje buna iyi tanıtım sağlar.
ASP.NET ve MVC ile Zengin Entegrasyon
ServiceStack MVC PowerPack yeniden yazıyor ve düzeltmeler onun için değiştirmeler ile ASP.NET ve MVC yerli diziler bir sürü felç edici Oturum ICacheClient ve ISession API'leri kendi temiz ve bağımlılık içermeyen uygulamasıyla ve Caching XML ipotekli ASP.NET sağlayıcılar.
ServiceStack ayrıca, birkaç farklı AuthProvider'in yerleşik olduğu daha yeni ve daha temiz bir kimlik doğrulama ve otomatikleştirme sağlayıcı modeli içerir:
- Kimlik Bilgileri - / auth / credentials hizmetine göndererek kullanıcı adı / parola kimlik bilgileriyle kimlik doğrulaması yapmak için
- Temel Kimlik Doğrulama - Kullanıcıların Temel Kimlik Doğrulama ile kimlik doğrulamasına izin verme
- Twitter OAuth - Kullanıcıların Twitter ile Kaydolmalarına ve Kimlik Doğrulamalarına İzin Ver
- Facebook OAuth - Kullanıcıların Facebook ile Kayıt Olmasına ve Kimlik Doğrulamasına İzin Ver
Kimlik Doğrulama modülü tamamen isteğe bağlıdır ve oturumlarınızın Bellek, Redis veya Memcached'de saklanmasına izin veren temiz ICacheClient / ISession API'leri ve OrmLite üzerine kurulmuştur ve UserAuth bilgileriniz OrmLite'ın desteklenen RDBMS'leri SQLServer, MySql, PostgreSQL, Sqlite as yanı sıra Redis veri deposu veya InMemory (geliştirme / test için yararlıdır).
Harika Belgeler
ServiceStack, çerçeve hakkındaki bilgilerin çoğunun GitHub wiki'de barındırıldığı yerlerde çok iyi belgelenmiştir . Çerçeve (örneğin Serileştiriciler, Redis, OrmLite) diğer parçaları için belgeler bulunabilir servicestack.net/docs/
ServiceStack.Examples iken Proje ServiceStack canlı demolar ve Starter şablonları tümü için kaynak kodu sağlar SocialBoostsrapApi projesi Twitterlar Bootstrap şablonu temel ServiceStack ve MVC ile backbone.js Tek Sayfa App geliştirme harika bir başlangıç noktası sağlamaktadır.
Yukarıdakilere ek olarak, Google Grubu içinde son yıllarda oldukça genişleyen bir bilgi hazinesi bulunmaktadır .
Her Yerde Çalışıyor
ServiceStack, ASP.NET ve HttpListener ana bilgisayarlarında çalışan ve .NET veya Mono'da barındırılabilen bir .NET 3.5 çerçevesidir (trivia: www.servicestack.net , CentOS / Mono tarafından desteklenmektedir). Bu, ServiceStack web hizmetlerinizin şunlardan birinde barındırılmasını sağlar:
.NET 3.5 ve 4.0 yüklü Windows
Mono özellikli Linux / OSX
- Apache + mod_mono
- Nginx + MonoFastCGI
- XSP
- Konsol Uygulaması
Açık Kaynak geliştirme modeli ile geliştirilmiştir
ServiceStack, açık kaynaklarda aktif olarak geliştirildiği ve kuruluşundan bu yana her zaman liberal bir OSS lisansı (Yeni BSD) altında barındırıldığı Açık Kaynak geliştirme modeline güçlü bir inanandır . Bugün itibariyle 47'den fazla geliştiriciden katkı almıştır ve şu anda GitHub'da en çok izlenen 3. C # projesinde yer almaktadır .
Dezavantajları
En büyük dezavantajın, Microsoft tarafından geliştirilmediği (veya kullanılabilir bir seçenek olarak listelenen) diğer OSS .NET projelerinin çoğu için aynı olduğuna inanıyorum. Bu, bir çerçeveyi değerlendirirken nadiren ilk tercih olduğu anlamına gelir. Çoğu benimseyen, ServiceStack'i yalnızca WCF'nin sürtünme ve kırılganlığı ya da tercih edilen Microsoft Stack'in performansı ile ilgili hayal kırıklığına uğradıkları son çare olarak değerlendirecektir.
Geribildirim ve Topluluk Kaynakları
ServiceStack, posta grubundaki olumlu duyguların görebildiği şekilde değerlendiren çoğu kişi tarafından sağlanan olumlu geri bildirimlerle çok iyi karşılandı . Bu yıl itibariyle @ServiceStack twitter hesabı, favorilerinden bahsetti ve geri bildirimleri takip ediyor .
Topluluk Kaynakları wiki sayfası Yayınlar, bakla atmalarını, Sunumlar, jeologlar ve daha Blog bağlantıları olan vahşi daha ServiceStack öğrenmek için iyi bir yerdir.