Chúng có các trường hợp sử dụng rất giống nhau, với tư cách là người duy trì chính cho dự án ServiceStack, tôi hiểu rõ về các ưu điểm của ServiceStack và nhiều lợi ích tự nhiên của thiết kế dựa trên thông điệp của nó .
ServiceStack đã xuất hiện từ năm 2008 với tư cách là một dự án do OSS điều hành từ khi thành lập với mục tiêu duy nhất là thúc đẩy thiết kế chính xác và triển khai các dịch vụ từ xa không ma sát.
Thiết kế đơn giản và thanh lịch
Để theo đuổi sự đơn giản tối đa, nó được xây dựng dựa trên lõi đơn giản và thanh lịch - với hầu hết các tính năng của nó liên kết tự nhiên với các mô hình của bạn , không phải bộ điều khiển của bạn - đó là những gì MVC, WebApi làm (cũng như mọi Khung dịch vụ web khác mà Microsoft đã sản xuất ).
Việc áp dụng một thiết kế dựa trên thông điệp cung cấp một cách tiếp cận ưu việt cho các dịch vụ từ xa, trong đó chúng thúc đẩy các dịch vụ mở rộng hơn và ít giòn hơn, đơn giản hóa các mẫu truy cập và gọi điện thoại và chứa nhiều lợi ích tự nhiên khác mà bạn nhận được miễn phí .
Là một nhiệm vụ cốt lõi, chúng tôi chống lại sự phức tạp ở mọi giai đoạn, nhằm giữ một API vô hình và không xâm phạm và tránh đưa ra bất kỳ khái niệm mới hoặc cấu trúc nhân tạo nào chưa quen thuộc với .NET hoặc các nhà phát triển dịch vụ web ngày nay.
Ví dụ, IService<T>
việc triển khai dịch vụ của bạn chỉ là một lớp C # tiêu chuẩn với các phụ thuộc có dây tự động. Mỏng và giấy gói trọng lượng nhẹ được sử dụng để cung cấp một API nhất quán và thống nhất quanh lõi thời gian chạy IHttpRequest và IHttpResponse loại. Chúng cũng cho phép truy cập vào các lớp Yêu cầu và Phản hồi của ASP.NET hoặc HttpListener để bạn không bao giờ bị hạn chế khi sử dụng ServiceStack.
Tương phản với WCF và WebApi
Dưới đây là tổng quan ngắn gọn về các kiểu API tương phản mà ServiceStack và WCF quảng bá . WebApi khác với WCF ở chỗ nó khuyến khích thiết kế API REST-Ful. Đối với các ví dụ giữa 2, đây là ví dụ duy nhất tôi biết có cùng dịch vụ được viết bằng cả ServiceStack và WebApi .
Thực tiễn tốt nhất dịch vụ từ xa
ServiceStack tập trung chính vào sự đơn giản, hiệu suất và trong việc thúc đẩy các thực tiễn tốt nhất về dịch vụ web / từ xa tập trung vào việc nắm lấy các mẫu thiết kế dịch vụ từ xa của Martin Fowlers dưới dạng C # thành ngữ nhất có thể:
Mẫu mặt tiền - Điều này gợi ý việc sử dụng các giao diện hàng loạt, chi tiết thô khi bạn giao tiếp qua các ranh giới quy trình.
Mẫu DTO ( MSDN ) - Chỉ định sử dụng POCO cho mục đích đặc biệt để tạo định dạng dây cho các phản hồi dịch vụ web của bạn.
Mẫu cổng ( MSDN ) để đóng gói các liên lạc máy khách và máy chủ của bạn giữa các mô hình Cổng khách / DTO và các tầng Giao diện dịch vụ.
Những mô hình này đảm bảo phân tách rõ ràng các mối quan tâm và trải nghiệm lặp đi lặp lại không ma sát.
Trao quyền cho dịch vụ của bạn
Một dịch vụ web ServiceStack ở cốt lõi tập trung vào IService<T>
giao diện C # thuần không phụ thuộc và có dây tự động , cho phép bạn hoàn toàn tự do xác định hợp đồng dịch vụ web của mình với các DTO yêu cầu và phản hồi của riêng bạn bằng cách sử dụng POCO sạch - hiển thị API của ServiceStack thực tế vô hình và không - xâm nhập, tức là việc trích xuất logic dịch vụ C # của bạn và chạy nó bên ngoài máy chủ ServiceStack.
Ý chính này là một ví dụ tốt về những gì bạn nhận được chỉ với lớp 1 C # .cs trong ServiceStack :
- Trang siêu dữ liệu cho tất cả các định dạng đã đăng ký
- Với các liên kết đến các ví dụ máy khách WSDL, XSD và C #
- Chế độ xem báo cáo HTML thân thiện với con người
- Ảnh chụp nhanh trang html độc lập (nghĩa là không có ref bên ngoài). Bao gồm phản hồi dịch vụ web JSON được nhúng - cho phép truy cập theo chương trình vào các ảnh chụp nhanh dữ liệu.
- Mini Profiler tích hợp (cổng của MVC Mini Profiler tuyệt vời )
- Các điểm cuối JSON / JSONP, XML, JSV, CSV và SOAP
Các lớp RestServiceBase và ServiceBase được dự định lưu trữ logic C # tùy chỉnh của bạn để sử dụng lại tiềm năng tối đa nhất có thể, ví dụ như thiết kế đầu tiên DTO của nó cho phép thực hiện trì hoãn và ủy quyền trong đó Dịch vụ C # tương tự của bạn cũng có thể được lưu trữ và thực thi trong Máy chủ MQ đó là những gì xảy ra khi bạn đăng ký IMessageService
như máy chủ RedisMQ và gọi dịch vụ của bạn qua /asynconeway
điểm cuối (tức là client.SendOneWay()
trong Khách hàng C #)
Bạn cũng có thể dễ dàng ủy quyền và tạo các dịch vụ tổng hợp bằng cách sử dụng base.ResolveService<T>()
phương thức trả về một phiên bản tự động có dây của dịch vụ đã chọn như trong ví dụ về Dịch vụ khách hàng của Nortwind :
var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
new Orders { CustomerId = customer.Id });
Trả về các đối tượng C # đơn giản
Đối với hầu hết các phần, ServiceStack sẽ tuần tự hóa hầu hết các đối tượng C # như mong đợi - đây là danh sách các loại trả về có thể có ( từ câu trả lời này ):
- Bất kỳ đối tượng DTO nào -> được tuần tự hóa thành ContentType
- HttpResult, HttpError, CompcedResult (IHttpResult) cho phản hồi HTTP được tùy chỉnh
Các loại sau không được chuyển đổi và được ghi trực tiếp vào Luồng phản hồi:
- Chuỗi
- Suối
- IStreamWriter
- byte [] - với Kiểu Nội dung của ứng dụng / octet-stream.
Có thể thấy một ví dụ về hỗ trợ tiêu đề HTTP tùy chỉnh trong ví dụ CORS này nơi bạn có thể định cấu hình Tiêu đề HTTP trên toàn cầu hoặc trên cơ sở mỗi dịch vụ.
Hỗ trợ HTML
Có nhiều tùy chọn để trả về HTML trong ServiceStack được giải thích chi tiết tại đây .
Bao gồm văn bản tuần tự và nhị phân nhanh nhất cho .NET
Các trình tuần tự hóa nhanh và linh hoạt có tầm quan trọng hàng đầu trong API để đảm bảo thời gian phản hồi nhanh và API có thể phiên bản không phá vỡ các máy khách hiện tại, đó là lý do ServiceStack bao gồm các trình tuần tự văn bản nhanh nhất cho .NET với tùy chọn NuGet để bật Giao thức của @marcgravell Bộ đệm (serializer nhị phân nhanh nhất của .NET).
Trình tuần tự hóa văn bản của ServiceStack rất linh hoạt và có thể chịu được phiên bản cực đoan mà không gặp lỗi.
Trải nghiệm dev không ma sát End-to-End
Bản chất quan điểm của ServiceStack cho phép kết thúc API dịch vụ web nhanh, được gõ, nhanh chóng với sự hỗ trợ tích hợp cho các máy khách Sync / Async C # /. NET và Async Silverlight mà không cần bất kỳ mã gen nào:
Ví dụ đồng bộ hóa C #
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });
Ví dụ Cync
client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });
Vì nó chỉ trả về JSON thuần nên nó cũng được tiêu thụ một cách tầm thường với các Máy khách HTTP khác, ví dụ: ví dụ máy khách JS sử dụng jQuery :
$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
alert(todos.length == 1);
});
Rất có thể kiểm tra
Tất cả C # /. NET ServiceClients chia sẻ các giao diện tương tự mà làm cho họ đánh giá cao thể kiểm chứng và swappable tới điểm mà bạn có thể có các đơn vị kiểm tra tương tự cũng đóng vai trò như một XML, JSON, JSV, SOAP Tích hợp thử nghiệm .
Xác thực và xử lý lỗi tích hợp
Trong nhiệm vụ cung cấp trải nghiệm phát triển sạch và không có lỗi, ServiceStack cũng bao gồm xác thực gõ và xử lý lỗi được tích hợp trong đó ném ngoại lệ C # hoặc sử dụng xác thực Fluent tích hợp của nó cung cấp cho khách hàng các cấu trúc lỗi, gõ dễ dàng truy cập trên các máy khách dịch vụ web , ví dụ:
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)
*/
}
Để làm cho việc tiêu thụ lỗi trong JavaScript trở nên tầm thường, bạn có thể sử dụng mức độ nhẹ thư viện JavaScript ss-verify.js để liên kết các lỗi phản hồi của bạn với các trường mẫu HTML của bạn bằng một dòng mã. Các ví dụ dự án SocialBootstrapApi cung cấp một bản demo tốt về điều này.
Tích hợp phong phú với ASP.NET và MVC
Các ServiceStack MVC PowerPack tái viết và sửa chữa rất nhiều các ails của ASP.NET MVC và với thay thế cho sản phẩm làm tê liệt phiên và Caching XML vướng bận các nhà cung cấp ASP.NET với thực hiện sạch và phụ thuộc miễn phí riêng của mình ICacheClient và ISession API.
ServiceStack cũng bao gồm một mô hình nhà cung cấp xác thực và xác thực mới hơn và sạch hơn với một số AuthProviders khác nhau được xây dựng:
- Thông tin xác thực - Để xác thực bằng thông tin đăng nhập tên người dùng / mật khẩu bằng cách đăng lên dịch vụ / auth / thông tin đăng nhập
- Basic Auth - Cho phép người dùng xác thực với Xác thực cơ bản
- Twitter OAuth - Cho phép người dùng đăng ký và xác thực với Twitter
- Facebook OAuth - Cho phép người dùng đăng ký và xác thực với Facebook
Mô-đun xác thực là hoàn toàn tùy chọn và được tích hợp sẵn các API ICacheClient / ISession và OrmLite sạch, cho phép các Phiên của bạn được lưu trữ trong Bộ nhớ, Redis hoặc Memcached và thông tin UserAuth của bạn vẫn tồn tại trong RDBMS của SQLServer, MySql, cũng như Redis lưu trữ dữ liệu hoặc InMemory (hữu ích cho dev / thử nghiệm).
Tài liệu tuyệt vời
ServiceStack được ghi lại rất tốt trong đó hầu hết các thông tin về khung được lưu trữ trên wiki GitHub . Tài liệu cho các phần khác của khung (ví dụ: Bộ nối tiếp, Redis, OrmLite) có thể được tìm thấy trên servicestack.net/docs/
Các ServiceStack.Examples Dự án cung cấp mã nguồn cho tất cả các bản demo sống ServiceStack và Người khởi xướng Templates trong khi các dự án SocialBoostsrapApi cung cấp một điểm khởi đầu tuyệt vời của việc phát triển một trang Backbone.js ứng dụng đơn với ServiceStack và MVC dựa trên Twitters Bootstrap mẫu.
Ngoài những thông tin quý giá ở trên, Tập đoàn Google đã được mở rộng khá nhiều trong những năm gần đây.
Chạy mọi nơi
ServiceStack là một khung công tác .NET 3.5 chạy trên các máy chủ ASP.NET và HttpListener và có thể được lưu trữ trên .NET hoặc Mono (trivia: www.servicestack.net được cung cấp bởi CentOS / Mono). Điều này cho phép các dịch vụ web ServiceStack của bạn được lưu trữ trên một trong hai:
Windows với .NET 3.5 & 4.0
Linux / OSX với Mono
- Apache + mod_mono
- Nginx + MonoFastCGI
- XSP
- Ứng dụng bảng điều khiển
Được phát triển với mô hình phát triển Nguồn mở
ServiceStack là một người tin tưởng mạnh mẽ vào mô hình phát triển Nguồn mở, nơi nó được phát triển tích cực trong mở và luôn được lưu trữ theo giấy phép OSS tự do (BSD mới) kể từ khi thành lập. Tính đến hôm nay, nó đã nhận được sự đóng góp từ hơn 47 nhà phát triển và hiện đang đứng ở dự án C # được xem nhiều thứ 3 trên GitHub .
Nhược điểm
Tôi tin rằng nhược điểm lớn nhất là giống nhau đối với hầu hết các dự án OSS .NET khác, nơi nó không được phát triển (hoặc thậm chí được liệt kê dưới dạng tùy chọn khả dụng) của Microsoft. Điều này có nghĩa là hiếm khi nó là lựa chọn đầu tiên khi đánh giá một khung. Hầu hết những người dùng sẽ chỉ đánh giá ServiceStack như là phương sách cuối cùng, trong đó họ sẽ thất vọng với ma sát và tính giòn giã của WCF hoặc hiệu suất của Microsoft Stack ưa thích.
Phản hồi và tài nguyên cộng đồng
ServiceStack đã được đón nhận rất tốt với phản hồi tích cực được cung cấp bởi hầu hết những người đã đánh giá nó là có thể nhìn thấy bởi tình cảm tích cực trong nhóm gửi thư . Kể từ năm nay, tài khoản twitter @ServiceStack đã theo dõi đề cập và phản hồi trong mục yêu thích của nó .
Các tài nguyên cộng đồng trang wiki là một nơi tốt để tìm hiểu thêm về ServiceStack trong tự nhiên có liên hệ với Blog bài viết, Pod phôi, trình bày, GIST và nhiều hơn nữa.