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 )
- 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 /asynconeway
titik 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.