ServiceStack vs ASP.Net Web API [ditutup]

299

Saya ingin menulis API gaya REST baru dan telah melihat ServiceStack dan sangat menyukainya. Namun, saya telah melihat bahwa Microsoft telah merilis proyek ASP.Net Web API sebagai bagian dari MVC 4 beta baru. Adakah yang melihat proyek API Web baru? Bisakah Anda memberikan pro / kontra dari setiap sistem?

flipchart
sumber

Jawaban:

389

Mereka memiliki kasus penggunaan yang sangat mirip, sebagai pengelola utama untuk proyek ServiceStack, saya memiliki wawasan yang baik tentang keunggulan ServiceStack dan banyak manfaat alami dari desain berbasis pesannya .

ServiceStack telah ada sejak 2008 sebagai proyek yang dijalankan OSS sejak awal dengan tujuan tunggal untuk mempromosikan desain yang benar dan implementasi layanan jarak jauh bebas gesekan.

Desain Sederhana dan Elegan

Dalam mengejar kesederhanaan tertinggi, itu dibangun di sekitar inti yang sederhana dan elegan - dengan sebagian besar fitur-fiturnya secara alami mengikat ke model Anda , bukan pengendali Anda - itulah yang dilakukan oleh MVC, WebApi (serta setiap Kerangka Layanan Web lainnya yang telah dihasilkan oleh Microsoft ).

Mengadopsi desain berbasis pesan menawarkan pendekatan yang unggul untuk layanan jarak jauh, di mana mereka mempromosikan layanan yang lebih fleksibel dan kurang rapuh, menyederhanakan pola akses dan panggilan, dan mengandung banyak manfaat alami lainnya yang Anda dapatkan secara gratis .

Sebagai misi inti, kami melawan kompleksitas di setiap tahap, bertujuan untuk menjaga API yang tidak terlihat dan tidak mengganggu dan menghindari memperkenalkan konsep baru atau konstruksi buatan yang belum dikenal oleh .NET atau pengembang layanan web saat ini.

Sebagai contoh, IService<T>implementasi layanan Anda hanyalah kelas C # standar dengan dependensi kabel otomatis. Pembungkus tipis dan ringan digunakan untuk menyediakan API yang konsisten dan terpadu di sekitar tipe run-time IHttpRequest dan IHttpResponse . Mereka juga memungkinkan akses ke kelas Permintaan dan Respons ASP.NET atau HttpListener yang mendasarinya sehingga Anda tidak pernah dibatasi saat menggunakan ServiceStack.

Berbeda dengan WCF dan WebApi

Berikut adalah ikhtisar singkat tentang gaya API kontras yang ServiceStack dan WCF promosikan . WebApi berbeda dengan WCF karena mendorong desain API REST-ful. Adapun contoh antara 2, ini adalah satu-satunya contoh yang dikenal saya miliki dengan layanan yang sama yang ditulis dalam ServiceStack dan WebApi .

Layanan jarak jauh Praktik Terbaik

ServiceStack memiliki fokus utama pada kesederhanaan, kinerja, dan dalam mempromosikan praktik terbaik web / layanan jarak jauh yang berpusat pada merangkul pola desain layanan jarak jauh Martin Fowlers dengan C # sebisa mungkin:

  • The Facade Pola - Yang menunjukkan penggunaan batchful, interface tdk halus ketika pernah Anda berkomunikasi melintasi batas-batas proses.

  • The pola DTO ( MSDN ) - Mendikte penggunaan POCOs tujuan khusus untuk menghasilkan format kawat tanggapan layanan web Anda.

  • The Gateway Pola ( MSDN ) untuk merangkum klien dan server Anda komunikasi antara model Client Gateway / DTO dan Antarmuka layanan tingkatan.

Pola-pola ini memastikan pemisahan keprihatinan yang bersih dan pengalaman pengembang yang bebas gesekan.

Memberdayakan layanan Anda

Layanan web ServiceStack pada intinya berpusat di sekitar IService<T>antarmuka C # murni yang bebas ketergantungan dan otomatis yang memberikan Anda kebebasan penuh untuk menentukan kontrak layanan web Anda dengan DTO Permintaan dan Respons Anda menggunakan POCO bersih - rendering API ServiceStack praktis tidak terlihat dan tidak -invasive, yaitu sepele untuk mengekstrak logika layanan C # Anda dan menjalankannya di luar host ServiceStack.

Intisari ini adalah contoh yang baik dari apa yang Anda dapatkan dengan hanya 1 C # .cs di ServiceStack :

  • Halaman metadata untuk semua format terdaftar
    • Dengan tautan ke WSDLs, XSDs, dan contoh klien C #
  • Tampilan laporan HTML ramah manusia
    • Snapshot halaman html tunggal mandiri (yaitu tidak ada referensi eksternal). Termasuk respons layanan web JSON tertanam - memungkinkan akses terprogram ke snapshot data.
  • Built-in Mini Profiler (port MVC Mini Profiler yang sangat baik )
    • Termasuk Profil Sql
  • JSON / JSONP, XML, JSV, CSV dan SOAP titik akhir

Kelas RestServiceBase dan ServiceBase dimaksudkan untuk meng-host logika C # kustom Anda untuk potensi penggunaan ulang semaksimal mungkin, mis. Desain DTO-pertamanya sepele memungkinkan untuk eksekusi yang ditunda dan diproksikan di mana Layanan C # yang sama Anda juga dapat di-host dan dieksekusi di Host MQ itulah yang terjadi ketika Anda mendaftar hostIMessageService seperti RedisMQ dan memanggil layanan Anda melalui /asynconewaytitik akhir (yaitu client.SendOneWay()di C # Klien)

Anda juga dapat dengan mudah mendelegasikan dan membuat layanan gabungan menggunakan base.ResolveService<T>()metode yang mengembalikan mesin virtual dari layanan yang dipilih seperti yang terlihat dalam contoh Layanan Pelanggan Nortwind :

var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
    new Orders { CustomerId = customer.Id });

Kembalikan objek C # biasa

Untuk sebagian besar ServiceStack akan membuat cerita bersambung sebagian besar objek C # seperti yang diharapkan - berikut adalah daftar kemungkinan jenis pengembalian ( dari jawaban ini ):

  • Setiap objek DTO -> diserialisasi ke Response ContentType
  • HttpResult, HttpError, CompressedResult (IHttpResult) untuk respons HTTP Khusus

Jenis-jenis berikut ini tidak dikonversi dan langsung ditulis ke Stream Respons:

  • Tali
  • Aliran
  • IStreamWriter
  • byte [] - dengan Tipe Konten aplikasi / octet-stream.

Contoh dukungan header HTTP Khusus dapat dilihat oleh contoh CORS ini di mana Anda dapat mengkonfigurasi Header HTTP secara global atau berdasarkan layanan.

Dukungan HTML

Ada beberapa opsi untuk mengembalikan HTML di ServiceStack yang dijelaskan secara rinci di sini .

Termasuk serializers teks dan biner tercepat untuk .NET

Serializers tangguh dan cepat merupakan kepentingan utama dalam API untuk memastikan waktu respon yang cepat dan API versionable yang tidak melanggar klien yang sudah ada yang mengapa ServiceStack termasuk serializers teks tercepat untuk NET dengan pilihan nuget untuk mengaktifkan @marcgravell 's Protocol Buffer (serializer biner .NET tercepat).

Serialisasi teks ServiceStack sangat ulet dan dapat menahan versi ekstrem tanpa kesalahan.

Pengalaman pengembang bebas gesekan, End-to-End

Sifat ServiceStack yang beralasan memungkinkan API layanan web cepat, diketik, singkat dari ujung ke ujung dengan dukungan bawaan untuk klien Sync / Async C # /. NET dan Async Silverlight tanpa kode-gen:

Sinkronkan C # Contoh

var response = client.Send<HelloResponse>(new Hello { Name = "World!" });

Contoh Async C #

client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
    r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });

Karena hanya mengembalikan JSON murni, itu juga sepele dikonsumsi dengan Klien HTTP lain, misalnya contoh klien JS menggunakan jQuery :

$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
    alert(todos.length == 1);
});

Sangat teruji

Semua C # / .NET ServiceClients berbagi antarmuka yang sama yang membuatnya sangat dapat diuji dan ditukar ke titik di mana Anda dapat memiliki tes unit yang sama juga berfungsi sebagai XML, JSON, JSV, SOAP Integration Test .

Validasi Kaya dan Penanganan Kesalahan bawaan

Dalam misinya untuk memberikan pengalaman pengembang yang bebas biaya dan bersih, ServiceStack juga menyertakan validasi yang diketik dan penanganan kesalahan bawaan di mana melempar C # Exception atau menggunakan validasi Fluent bawaannya memberikan klien kesalahan terstruktur, diketik yang mudah diakses pada klien layanan web , misalnya:

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)
    */
}

Untuk membuatnya sepele untuk mengkonsumsi kesalahan dalam JavaScript, Anda dapat menggunakan pustaka JavaScript ss-validation.js yang ringan untuk mengikat kesalahan respons Anda secara sepele ke bidang formulir HTML Anda dengan satu baris kode. The SocialBootstrapApi contoh proyek menyediakan demo yang baik dari ini.

Integrasi Kaya dengan ASP.NET dan MVC

The ServiceStack MVC PowerPack re-menulis dan perbaikan banyak Sakit ASP.NET dan MVC dengan pengganti yang melumpuhkan Sesi dan XML-dibebani penyedia ASP.NET Caching dengan bersih dan ketergantungan bebas pelaksanaannya sendiri ICacheClient dan ISession API.

ServiceStack juga menyertakan model penyedia autorisasi dan autentisasi yang lebih baru dan lebih bersih dengan sejumlah AuthProviders berbeda yang dibangun:

  • Kredensial - Untuk otentikasi dengan kredensial nama pengguna / kata sandi dengan memposting ke layanan / auth / kredensial
  • Authasi Dasar - Mengizinkan pengguna untuk mengotentikasi dengan Otentikasi Dasar
  • Twitter OAuth - Memungkinkan pengguna untuk Mendaftar dan Otentikasi dengan Twitter
  • Facebook OAuth - Bolehkan pengguna untuk Mendaftar dan Otentikasi dengan Facebook

Modul Otentikasi sepenuhnya opsional dan dibangun di atas ICacheClient / ISession APIs dan OrmLite yang bersih yang memungkinkan Sesi Anda disimpan dalam Memori, Redis atau Memcached dan info UserAuth Anda bertahan dalam RDBMS yang didukung oleh RDBMS dari SQLServer, MySql, PostgreSQL, Sqlite sebagai juga redis data store atau InMemory (berguna untuk dev / pengujian).

Dokumentasi Hebat

ServiceStack didokumentasikan dengan sangat baik di mana sebagian besar informasi tentang kerangka kerja di-host pada wiki GitHub . Dokumentasi untuk bagian lain dari kerangka kerja (misalnya Serializers, Redis, OrmLite) dapat ditemukan di servicestack.net/docs/

The ServiceStack.Examples Proyek menyediakan kode sumber untuk semua demo hidup ServiceStack dan Starter Template sementara proyek SocialBoostsrapApi menyediakan titik awal yang bagus untuk mengembangkan Backbone.js Page Single App dengan ServiceStack dan MVC berdasarkan template Twitters Bootstrap.

Selain hal di atas, harta karun informasi terkandung dalam Grup Google yang telah berkembang cukup pesat dalam beberapa tahun terakhir.

Berlari kemana saja

ServiceStack adalah framework .NET 3.5 yang berjalan pada host ASP.NET dan HttpListener dan dapat di-host di .NET atau Mono (trivia: www.servicestack.net didukung oleh CentOS / Mono). Ini memungkinkan layanan web ServiceStack Anda di-host di:

Windows dengan .NET 3.5 & 4.0

Linux / OSX dengan Mono

  • Apache + mod_mono
  • Nginx + MonoFastCGI
  • XSP
  • Aplikasi Konsol

Dikembangkan dengan model pengembangan Open Source

ServiceStack adalah orang yang sangat percaya dengan model pengembangan Open Source di mana ia dikembangkan secara aktif di tempat terbuka dan selalu di-host di bawah lisensi OSS liberal (BSD Baru) sejak awal. Sampai hari ini ia telah menerima kontribusi dari lebih dari 47 pengembang dan saat ini berdiri di proyek C # ke - 3 yang paling banyak ditonton di GitHub .

Kekurangan

Saya percaya kerugian terbesar adalah sama untuk sebagian besar proyek OSS NET lainnya di mana itu tidak dikembangkan (atau bahkan terdaftar sebagai pilihan yang tersedia) oleh Microsoft. Ini artinya jarang sekali menjadi pilihan pertama ketika mengevaluasi suatu kerangka kerja. Sebagian besar pengadopsi hanya akan mengevaluasi ServiceStack sebagai upaya terakhir, di mana mereka frustrasi dengan gesekan yang dipaksakan dan kerapuhan WCF atau kinerja Microsoft Stack yang disukai.

Umpan Balik dan Sumber Daya Komunitas

ServiceStack telah diterima dengan sangat baik dengan umpan balik positif yang diberikan oleh sebagian besar orang yang telah mengevaluasinya sebagai terlihat oleh sentimen positif dalam kelompok surat . Pada tahun ini akun twitter @ServiceStack telah melacak penyebutan dan umpan balik di favoritnya .

The Sumber Daya Komunitas halaman wiki adalah tempat yang baik untuk mengetahui lebih lanjut tentang ServiceStack di alam liar dengan link ke Blog Posts, Pod Pemain, Presentasi, Gists dan banyak lagi.

mitos
sumber
30
Sebagai seseorang yang telah mencoba menggunakan WCF, webapi dan sekarang ServiceStack, tetaplah menggunakan ServiceStack. 1) WCF terlalu rumit untuk kebanyakan. Ini adalah delima "mari kita selesaikan semua masalah" yang lama. 2) web-api terlalu baru. Tunggu rilis terakhir. Bahkan tidak mendukung posting bentuk muli-bagian. Kode dalam keadaan fluks. Saya tidak akan menjalankan aplikasi komersial. BTW, pertanyaan ini seharusnya tidak ditutup.
Michael Silver
13
Bisakah Anda mengedit ini untuk ASP.NET WebAPI yang baru saja dirilis.
Blake Niemyjski
26
Harap jadikan situs web Anda lebih ramah pengguna. Ini sepertinya alat yang hebat. Tetapi situs Anda membingungkan. Tidak jelas apa proyek itu dan apa tujuan penyelesaiannya. Sebaliknya, jawaban ini fantastis.
Kugel
82
Ini sepertinya tidak terlalu dibandingkan dengan Web API. Masuk akal - pada saat jawabannya, Web API adalah merek baru. Ini bukan masalahnya lagi. Saya akan sangat senang melihat gangguan yang sebenarnya dan saya khawatir jawaban ini sudah ketinggalan zaman.
George Mauer
35
Mungkin perlu menunjukkan bahwa ServiceStack pindah ke distribusi komersial / biner pada v4.0. Lihat pos Google+ Demis untuk detailnya.
Nick Jones
137

Ada perbedaan utama baru yang perlu dipertanggungjawabkan - ServiceStack tidak lagi bebas untuk digunakan pada v4. Karena ada jawaban yang cukup pasti pada SS pro, saya ingin membuang pasangan untuk Web API

API web

Pro:

  1. Bebas untuk digunakan dalam proyek Anda (asalkan Anda memiliki lisensi VS yang memungkinkan penggunaan komersial)
  2. Dukungan gratis sangat tinggi tersedia dari Microsoft dan seluruh web, termasuk di sini di StackOverflow.com.
  3. Dengan cepat terintegrasi dengan tumpukan teknologi Microsoft lainnya seperti ASP.NET MVC yang sangat populer di toko-toko Microsoft
  4. Dukungan bawaan untuk otentikasi dan otorisasi yang tenang di tumpukan Microsoft Anda

Con's:

  1. Tidak mendukung SABUN

Manfaat Tambahan

(Jangan ragu untuk meninggalkan komentar di bawah ini untuk menambahkan mengapa API Web memiliki manfaat atau memiliki pro / kontra yang dapat saya tambahkan)

PW Kad
sumber
84
Tidak yakin bahwa tidak mendukung SOAP adalah con
D.Rosado
11
Faktanya MVC dan WebAPI hidup berdampingan, adalah sebuah CON.
Phill
4
ServiceStack v3 masih bebas untuk digunakan dan AFAIK akan selalu, saya tidak berpikir apa pun yang disebutkan mitos adalah spesifik v4.
Kyle Gobel
14
Wow, "tidak lagi gratis" adalah pernyataan yang meremehkan. $ 999 per pengembang untuk perusahaan dengan lebih dari sepuluh karyawan?
Ryan Lundy
7
Alasan terbesar saya untuk beralih dari Service Stack ke Web API adalah Service Stack v3 tidak lagi didukung di iOS (menggunakan Xamarin) dengan persyaratan arsitektur 64 bit yang baru. Tentu saja, pembaruan dalam v4 yang merupakan versi berbayar.
SgtRock
21

Saya tidak bisa mengatakan banyak tentang ServiceStack, tetapi Web API memiliki banyak fitur hebat dan saat ini di versi 2.

Beberapa hal yang dapat Anda lakukan dengan API Web:

  • Host otomatis dalam aplikasi OWIN (mis. Berjalan di mana saja).
  • Dukungan penuh untuk asyncdan await.
  • Templat default yang bagus dan banyak contoh sumber terbuka.
  • Digunakan serializer JON.Net JSON yang hebat.
  • Istirahatkan secara default (Anda harus melakukan hypermedia sendiri).
  • dan banyak lagi ...
pengguna3377837
sumber
1
Segala sesuatu dalam daftar ini juga hadir di ServiceStack atau dapat dilihat sebagai penipu. Serializer JSON ServiceStack, meskipun kurang populer, jauh lebih cepat daripada JSON.NET. Dukungan OWIN tidak mungkin diterapkan karena @mythz memiliki pendapat yang kuat terhadap teknologi ini, yang cukup masuk akal ( lihat komentarnya tentang permintaan fitur ini ).
ygormutti
3
Melihat paket nuget OWIN yang belum ditingkatkan sejak diterbitkan tiga tahun lalu, saya tidak benar-benar mengerti maksud semua hype seputar dukungan OWIN ini. Sepertinya orang benar-benar ingin memiliki OWIN karena Microsoft pernah berkata itu keren. Kalau tidak, Anda mungkin tidak akan pernah mendengar tentang OWIN sama sekali. Microsoft dengan senang hati menjatuhkannya demi mainan baru mereka K. Ini mengurangi argumen "Microsoft ada di balik ini sehingga akan hidup selamanya" karena Microsoft memiliki kecenderungan kuat untuk membunuh proyek-proyek yang sangat didorong oleh mereka.
Alexey Zimarev
Mengapa menjawab jika Anda tidak memiliki pengalaman dengan ServiceStack?
Brian Ogden
6

Sebagai pelanggan ServiceStack di sini adalah pro untuk ServiceStack yang paling penting bagi saya.

https://github.com/ServiceStack/Issues/issues/606

Begitu. Bug ditemukan, bug diidentifikasi, bug diperbaiki. Hari yang sama. Dukungan luar biasa!

labilbe
sumber
3

Sudah satu tahun saya menggunakan SS dan semuanya hebat. ORMLite adalah sihir murni. Saya dapat memetakan kembali MySQL DB yang mengerikan untuk diintegrasikan dalam aplikasi seluler. Tidak ada perubahan pada database karena digunakan dengan backend php dengan aplikasi lain ...

Mythz adalah contoh tentang dukungan dan penjelasan. Itu meningkatkan pengetahuan saya tentang desain aplikasi dan kesederhanaan dalam pemeliharaan. Silakan coba dan Anda akan mengerti.

Juga, jangan bandingkan SS dengan WebAPI. Itu tidak cukup, SS membawa lebih banyak ke kotak peralatan Anda. ServiceStack.Text juga merupakan Automapper yang hebat.

André Leblanc
sumber