API Web ServiceStack vs ASP.Net [đã đóng]


299

Tôi muốn viết API kiểu REST mới và đã xem ServiceStack và khá thích nó. Tuy nhiên, tôi đã thấy rằng Microsoft đã phát hành dự án API Web ASP.Net như là một phần của phiên bản MVC 4 beta mới. Có ai đã xem dự án API Web mới chưa? Bạn có thể đưa ra bất kỳ ưu / nhược điểm của từng hệ thống?

Câu trả lời:


389

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 IHttpRequestIHttpResponse 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 )
    • Bao gồm hồ sơ Sql
  • 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ý IMessageServicenhư 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 # /. NETAsync 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.


30
Là một người đã thử sử dụng WCF, webapi và giờ là ServiceStack, gắn bó với ServiceStack. 1) WCF là quá phức tạp đối với hầu hết. Đó là delima "hãy giải quyết tất cả các vấn đề" cũ. 2) web-api quá mới. Chờ phát hành cuối cùng. Nó thậm chí không hỗ trợ bài viết của các hình thức phần khác nhau. Mã này là trong một tình trạng thông lượng. Tôi sẽ không chạy các ứng dụng thương mại trên đó. BTW, câu hỏi này không nên được đóng lại.
Michael Silver

13
Bạn có thể vui lòng chỉnh sửa cái này cho ASP.NET WebAPI vừa được phát hành.
Blake Niemyjski

26
Vui lòng làm cho trang web của bạn thân thiện hơn. Đây dường như là một công cụ tuyệt vời. Nhưng trang web của bạn là khó hiểu. Không rõ dự án là gì và mục đích của nó là gì. Ngược lại, câu trả lời này là tuyệt vời.
Kugel

82
Điều này thực sự dường như không có nhiều so sánh với API Web. Điều này có ý nghĩa - tại thời điểm trả lời, API Web là hoàn toàn mới. Đây không phải là trường hợp nữa. Tôi thực sự rất thích nhìn thấy một sự cố thực sự và tôi sợ câu trả lời này đã lỗi thời.
George Mauer

35
Có thể đáng để chỉ ra rằng ServiceStack đang chuyển sang phân phối nhị phân / chỉ thương mại kể từ phiên bản 4.0. Xem bài đăng trên Google+ của Demis để biết chi tiết.
Nick Jones

137

Có một sự khác biệt chính mới cần được tính đến - ServiceStack không còn miễn phí sử dụng kể từ phiên bản 4. Vì có một câu trả lời khá dứt khoát về SS pro, tôi muốn đưa ra một vài cho API Web

API web

Chuyên nghiệp:

  1. Sử dụng miễn phí trong dự án của bạn (miễn là bạn có giấy phép VS cho phép sử dụng thương mại)
  2. Mức hỗ trợ miễn phí cực kỳ cao có sẵn từ Microsoft và trên tất cả các trang web, bao gồm cả ở đây trên StackOverflow.com.
  3. Tích hợp nhanh chóng với các ngăn xếp công nghệ khác của Microsoft như ASP.NET MVC, công cụ cực kỳ phổ biến trong các cửa hàng của Microsoft
  4. Được hỗ trợ để xác thực và ủy quyền RESTful trong ngăn xếp Microsoft của bạn

Con:

  1. Không hỗ trợ SOAP

Lợi ích phụ trợ

(Xin vui lòng để lại nhận xét bên dưới thêm vào lý do tại sao API Web có lợi ích hoặc có ưu / nhược điểm tôi có thể thêm)


84
Không chắc chắn rằng không hỗ trợ SOAP là một kẻ lừa đảo
D.Rosado

11
Thực tế MVC và WebAPI cùng tồn tại, là một CON.
Phill

4
ServiceStack v3 vẫn miễn phí sử dụng và AFAIK sẽ luôn như vậy, tôi không nghĩ bất cứ điều gì huyền thoại được đề cập là v4 cụ thể.
Kyle Gobel

14
Wow, "không còn miễn phí" là một cách đánh giá thấp. $ 999 mỗi nhà phát triển cho một công ty có hơn mười nhân viên?
Ryan Lundy

7
Lý do lớn nhất của tôi để chuyển từ Service Stack sang Web API là Service Stack v3 không còn được hỗ trợ trên iOS (sử dụng Xamarin) với yêu cầu kiến ​​trúc 64 bit mới. Tất nhiên, các bản cập nhật trong phiên bản 4 là phiên bản trả phí.
SgtRock 17/2/2015

21

Tôi thực sự không thể nói nhiều về ServiceStack, nhưng API Web có rất nhiều tính năng tuyệt vời và hiện đang ở phiên bản 2.

Một số điều bạn có thể làm với API Web:

  • Tự lưu trữ trong một ứng dụng OWIN (tức là chạy mọi nơi).
  • Hỗ trợ đầy đủ cho asyncawait.
  • Mẫu mặc định tốt và hàng tấn ví dụ nguồn mở.
  • Được sử dụng nối tiếp JSON Json.Net tuyệt vời.
  • Rest-ish theo mặc định (bạn sẽ phải tự làm hypermedia).
  • và hơn thế nữa...

1
Mọi thứ trong danh sách này cũng có trong ServiceStack hoặc có thể được xem như một con lừa. JSON serializer ServiceStack, mặc dù là ít phổ biến, là nhiều hơn nhanh hơn JSON.NET. Hỗ trợ của OWIN khó có thể được triển khai vì @mythz có ý kiến ​​mạnh mẽ chống lại công nghệ này, điều này khá hợp lý ( xem nhận xét của anh ấy về yêu cầu tính năng này ).
ygormutti

3
Nhìn vào gói nuget OWIN chưa được nâng cấp kể từ khi nó được xuất bản ba năm trước, tôi thực sự không thấy điểm nào trong tất cả sự cường điệu này xung quanh sự hỗ trợ của OWIN. Có vẻ như mọi người thực sự muốn có OWIN bởi vì Microsoft đã từng nói nó rất tuyệt. Nếu không, có lẽ bạn sẽ không bao giờ nghe về OWIN cả. Microsoft vui vẻ bỏ nó để ủng hộ món đồ chơi mới của họ. Điều này làm giảm nhẹ lập luận "Microsoft đứng sau việc này vì vậy nó sẽ tồn tại mãi mãi" vì Microsoft có xu hướng mạnh mẽ để tiêu diệt các dự án bị họ đẩy mạnh.
Alexey Zimarev

Tại sao trả lời nếu bạn không có kinh nghiệm với ServiceStack?
Brian Ogden


3

Đó là một năm tôi sử dụng SS và tất cả đều tuyệt vời. ORMLite là ma thuật thuần túy. Tôi đã có thể ánh xạ lại một DB DB tuyệt vời để tích hợp trong một ứng dụng di động. Không có thay đổi trên cơ sở dữ liệu vì nó sử dụng với phụ trợ php với các ứng dụng khác ...

Mythz là một ví dụ liên quan đến hỗ trợ và giải thích. Nó nâng cấp kiến ​​thức của tôi về thiết kế ứng dụng và đơn giản về bảo trì. Hãy thử nó và bạn sẽ hiểu.

Ngoài ra, đừng so sánh SS với WebAPI. Vẫn chưa đủ, SS mang nhiều hơn nữa vào hộp công cụ của bạn. ServiceStack.Text cũng là một Automapper tuyệt vời.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.