ServiceStack ve ASP.Net Web API'sı [kapalı]


299

Yeni bir REST stili API yazmak istiyorum ve ServiceStack baktım ve oldukça beğendim. Ancak, Microsoft'un yeni MVC 4 beta sürümünün bir parçası olarak ASP.Net Web API projesini yayımladığını gördüm. Yeni Web API projesine bakan var mı? Her sistemin artılarını / eksilerini verebilir misiniz?

Yanıtlar:


389

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 )
    • Sql Profili içerir
  • 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 /asynconewayson 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.


30
WCF, webapi ve şimdi ServiceStack'ı kullanmayı deneyen biri olarak ServiceStack'a sadık kalın. 1) WCF çoğu için gereksiz yere çok karmaşıktır. Eski "tüm sorunları çözelim" delima. 2) web-api çok yeni. Son sürümü bekleyin. Çok parçalı formların gönderilerini bile desteklemez. Kod akış halindedir. Üzerinde ticari uygulamalar çalıştırmazdım. BTW, bu soru kapatılmamalıdır.
Michael Silver

13
Lütfen yeni yayımlanan ASP.NET WebAPI için bunu düzenleyebilir misiniz?
Blake Niemyjski

26
Lütfen web sitenizi daha kullanıcı dostu hale getirin. Bu harika bir araç gibi görünüyor. Ancak siteniz kafa karıştırıcı. Projenin ne olduğu ve neyi çözmeyi hedeflediği net değil. Buna karşılık, bu cevap harika.
Kugel

82
Bu gerçekten Web API ile bir karşılaştırma gibi görünmüyor. Bu mantıklı - yanıt anında Web API yepyeni. Artık durum böyle değil. Gerçekten bir arıza görmeyi çok isterim ve bu cevabın güncel olmadığından korkuyorum.
George Mauer

35
ServiceStack'ın v4.0'dan itibaren yalnızca ticari / ikili bir dağılıma geçtiğini belirtmek gerekebilir. Ayrıntılar için Demis'in Google+ yayınına bakın.
Nick Jones

137

Hesaplanması gereken yeni bir ana fark var - ServiceStack v4'ten itibaren artık ücretsiz değil. SS pro's üzerinde oldukça kesin bir cevap olduğundan, Web API için bir çift dışarı atmak istedim

Web API'sı

Profesyoneller:

  1. Projenizde kullanmak ücretsiz (ticari kullanıma izin veren bir VS lisansınız varsa)
  2. StackOverflow.com da dahil olmak üzere, Microsoft ve web üzerinden olağanüstü yüksek düzeyde ücretsiz destek.
  3. Microsoft mağazalarında son derece popüler olan ASP.NET MVC gibi diğer Microsoft teknolojisi yığınlarıyla hızla bütünleşir
  4. Microsoft yığınızda RESTful kimlik doğrulaması ve yetkilendirme için yerleşik destek

Eksileri :

  1. SOAP'ı desteklemiyor

Yan Avantajlar

(Lütfen, Web API'nın neden ekleyebileceğine veya ekleyebileceğim artıları / eksileri olduğunu ekleyerek aşağıdaki yorumları bırakmaktan çekinmeyin)


84

11
MVC ve WebAPI'nin birlikte var olması bir CON.
Phill

4
ServiceStack v3 hala ücretsiz ve AFAIK her zaman olacak, mythz'ın bahsettiği hiçbir şeyin v4'e özgü olduğunu düşünmüyorum.
Kyle Gobel

14
Vay be, "artık özgür değil" bir yetersizlik. Ondan fazla çalışanı olan bir şirket için geliştirici başına 999 ABD doları ?
Ryan Lundy

7
Hizmet Yığını'ndan Web API'sına geçmemin en büyük nedeni, Servis Yığını v3'ün artık yeni 64 bit mimari gereksinimi ile iOS'ta (Xamarin kullanarak) desteklenmemesidir. Tabii ki, güncellemeler ücretli sürüm olan v4'te.
SgtRock

21

ServiceStack hakkında çok fazla şey söyleyemem, ancak Web API'nin birçok harika özelliği var ve şu anda sürüm 2'de.

Web API ile yapabileceğiniz şeylerden bazıları:

  • Bir OWIN uygulamasında self host (her yerde çalışır).
  • İçin tam destek asyncve await.
  • İyi varsayılan Şablonlar ve tonlarca açık kaynak örneği.
  • Büyük Json.Net JSON serileştirici kullanıldı.
  • Rest-ish varsayılan olarak (hiper ortamını kendiniz yapmanız gerekir).
  • ve dahası...

1
Bu listedeki her şey ServiceStack'ta da mevcuttur veya bir con olarak görülebilir. ServiceStack'ın JSON serileştiricisi, daha az popüler olmasına rağmen, JSON.NET'ten çok daha hızlıdır. Omy destek uygulaması pek mümkün değildir, çünkü @ mythz bu teknolojiye karşı oldukça sağlam görüşlere sahiptir ( bu özellik isteği hakkındaki yorumlarına bakın ).
ygormutti

3
Üç yıl önce yayınlandığından beri yükseltilmemiş olan OWIN nuget paketine baktığımda, OWIN desteğinin etrafındaki tüm bu yutturmacadaki noktayı gerçekten görmüyorum. İnsanların gerçekten OWIN'e sahip olmak istedikleri anlaşılıyor çünkü Microsoft bir zamanlar havalı olduğunu söyledi. Aksi takdirde muhtemelen asla OWIN hakkında duymak olmazdı. Microsoft mutlu bir şekilde yeni oyuncakları K'nin lehine düşürdü. Bu, Microsoft'un yoğun bir şekilde ittiği projeleri öldürme eğilimi gösterdiği için "Microsoft bunun arkasında sonsuza kadar yaşayacak" argümanını hafifletiyor.
Alexey Zimarev

ServiceStack ile ilgili deneyiminiz yoksa neden cevap veresiniz?
Brian Ogden


3

SS'yi kullanmam bir yıl oldu ve hepsi harika. ORMLite saf bir sihirdir. Mobil uygulamalara entegre etmek için kötü bir MySQL DB'yi yeniden eşleştirebildim. Veritabanında değişiklik olmaması, başka bir uygulama ile bir php arka ucuyla kullanılmasına neden olur ...

Mythz destek ve açıklama ile ilgili bir örnektir. Uygulama tasarımı ve bakımla ilgili basitlik hakkındaki bilgilerimi yükseltti. Lütfen deneyin ve anlayacaksınız.

Ayrıca, SS'yi WebAPI ile karşılaştırmayın. Bu yeterli değil, SS araç kutunuza çok daha fazlasını getiriyor. ServiceStack.Text de harika bir Automapper.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.