fli*_*art 298 servicestack asp.net-web-api
我想编写一个新的REST样式API并查看ServiceStack并且非常喜欢它.但是,我已经看到Microsoft已经发布了ASP.Net Web API项目,作为新MVC 4 beta的一部分.有没有人看过新的Web API项目?你能给出每个系统的优缺点吗?
myt*_*thz 387
它们具有非常相似的用例,作为ServiceStack项目的主要维护者,我很好地了解了ServiceStack的优势以及基于消息的设计的许多自然优势.
自2008年以来,ServiceStack一直是OSS运行的项目,其目标是促进无摩擦远程服务的正确设计和实施.
在追求极致简约的过程中,它围绕着一个简单而优雅的核心构建- 其大部分功能自然地与您的模型绑定,而不是您的控制器 - 这就是MVA,WebApi所做的(以及Microsoft已生成的所有其他Web服务框架) ).
采用基于消息的设计为远程服务提供了一种卓越的方法,因为它们可以促进更多可扩展和不易碎的服务,简化访问和调用模式,并包含免费获得的许多其他自然优势.
作为核心任务,我们在每个阶段都要对抗复杂性,旨在保持隐形和非侵入性API,并避免引入任何当前.NET或Web服务开发人员尚不熟悉的新概念或人工构造.
作为示例,您的IService<T>服务实现只是一个具有自动连接依赖关系的标准C#类.精简和轻量级的包装器用于围绕核心运行时IHttpRequest和IHttpResponse类型提供一致且统一的API .它们还允许访问底层的ASP.NET或HttpListener的Request和Response类,因此在使用ServiceStack时绝不会受到限制.
以下是ServiceStack和WCF推广的对比API样式的简要概述.WebApi与WCF的不同之处在于它鼓励REST-ful API设计.至于2之间的例子,这是我用ServiceStack和WebApi编写的相同服务的唯一已知示例.
ServiceStack主要关注简单性,性能以及推广Web /远程服务最佳实践,其中包括尽可能采用Martin Fowlers远程服务设计模式作为惯用的C#:
在外观模式 -这表明当你永远跨进程边界通信batchful,粗粒度接口的使用.
这些模式确保了关注点的清晰分离和无摩擦迭代开发体验.
ServiceStack Web服务的核心是以无依赖和自动连接的纯C#IService<T>接口为中心,使您可以完全自由地使用干净的POCO使用自己的请求和响应DTO定义Web服务合同 - 使ServiceStack的API几乎不可见且不可见-invasive,即提取C#服务逻辑并在ServiceStack主机之外运行它是微不足道的.
这个要点是ServiceStack中只有1个C#.cs类所得到的一个很好的例子:
RestServiceBase和ServiceBase类旨在托管您的自定义C#逻辑,以便尽可能地重复使用,例如,它的DTO优先设计通常允许延迟和代理执行,其中您的同一C#服务也可以在MQ主机中托管和执行这是当你注册一个会发生什么IMessageService样的RedisMQ主机,并通过致电您的服务/asynconeway端点(即client.SendOneWay()在C#中的客户端)
您还可以使用base.ResolveService<T>()返回所选服务的自动连接实例的方法轻松委派和创建组合服务,如Nortwind CustomerDetails服务示例中所示:
var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
new Orders { CustomerId = customer.Id });
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,ServiceStack将按预期序列化大多数C#对象 - 这是可能的返回类型列表(来自此答案):
以下类型未转换并直接写入响应流:
此CORS示例可以看到自定义HTTP标头支持的示例,您可以在其中全局或基于每个服务配置HTTP标头.
在ServiceStack中有多个返回HTML的选项,这将在此处详细说明.
弹性和快速序列化程序在API中最重要的是确保快速响应时间和版本化API,它不会破坏现有客户端,这就是为什么ServiceStack包含最快的.NET文本序列化程序,带有NuGet选项以启用@marcgravell的协议缓冲区(.NET最快的二进制序列化程序).
ServiceStack的文本序列化程序非常有弹性,可以承受极端版本而不会出错.
ServiceStack的固执性质允许端到端的快速,类型化,简洁的Web服务API,内置支持Sync/Async C#/ .NET和Async Silverlight客户端,无需任何代码:
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });
Run Code Online (Sandbox Code Playgroud)
client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });
Run Code Online (Sandbox Code Playgroud)
因为它只返回纯JSON,所以它也很容易被其他HTTP客户端使用,例如使用jQuery的JS客户端示例:
$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
alert(todos.length == 1);
});
Run Code Online (Sandbox Code Playgroud)
所有C#/ .NET ServiceClient共享相同的接口,这使得它们具有高度可测试性和可交换性,以至于您可以使用相同的单元测试作为XML,JSON,JSV,SOAP集成测试.
为了提供免费且干净的开发体验,ServiceStack还包括内置的类型验证和错误处理,其中抛出C#异常或使用其内置的Fluent验证,可以在Web服务客户端上轻松访问客户端结构化的类型错误,例如:
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)
*/
}
Run Code Online (Sandbox Code Playgroud)
为了在JavaScript中消除错误变得微不足道,您可以使用轻量级的ss-validation.js JavaScript库通过一行代码将响应错误简单地绑定到HTML表单字段.该SocialBootstrapApi示例项目提供了一个很好的示范.
该ServiceStack MVC的PowerPack重新写入,并修复了大量的ASP.NET和MVC苦恼的与替代其沉重的会议和缓存XML,ASP.NET拖累商有自己的清洁,无依赖,实现ICacheClient和的ISession的API.
ServiceStack还包括一个更新,更干净的身份验证和自动化提供程序模型,其中包含许多内置的AuthProvider:
Authentication模块完全是可选的,并且内置了干净的ICacheClient/ISession API和OrmLite,它允许您的Sessions存储在Memory,Redis或Memcached中,并且您的UserAuth信息保存在OrmLite支持的SQLServer,MySql,PostgreSQL,Sqlite的RDBMS中.以及Redis数据存储或InMemory(对开发/测试很有用).
ServiceStack有很好的文档记录,其中大部分有关框架的信息都托管在GitHub wiki上.可以在servicestack.net/docs/上找到该框架其他部分的文档(例如Serializers,Redis,OrmLite).
该ServiceStack.Examples项目提供了所有ServiceStack的现场演示和入门模板的源代码,而SocialBoostsrapApi项目提供开发Backbone.js的单页应用与ServiceStack和MVC基于Twitter的引导模板的一个很好的起点.
除了上述内容之外,谷歌集团还包含了一大堆信息,近年来这一信息已经大大扩展.
ServiceStack是一个.NET 3.5框架,可在ASP.NET和HttpListener主机上运行,可以托管在.NET或Mono上(琐事:www.servicestack.net由CentOS/Mono提供支持).这允许您的ServiceStack Web服务托管在:
ServiceStack是开源开发模型的坚定信徒,它在开放时积极开发,自开始以来一直以自由OSS许可(New BSD)为主.截至今天,它已收到超过47位开发者的贡献,目前它是GitHub上第三个最受关注的C#项目.
我认为最大的缺点是大多数其他OSS .NET项目都没有,因为微软没有开发(甚至列为可用选项).这意味着在评估框架时,它很少成为首选.大多数采用者只会评估ServiceStack作为最后的手段,他们要么对WCF的强制摩擦和脆弱性或首选Microsoft Stack的性能感到沮丧.
ServiceStack得到了很好的响应,大多数人都提供了积极的反馈,他们通过邮件组的积极情绪对其进行了评估.截至今年,@ ServiceStack Twitter帐户一直在跟踪其收藏夹中的提及和反馈.
该社区资源的wiki页面,了解更多关于ServiceStack在链接到博客,波德广播,简报,要旨,更野性的好地方.
PW *_*Kad 137
需要考虑一个新的主要区别 - 自v4起,ServiceStack不再可以自由使用. 由于SS专家有一个非常确定的答案,我想为Web API抛出一些
专业人士:
Con's:
辅助福利
(请随时在下面留下评论,添加为什么Web API有好处或有我可以添加的优点/缺点)
小智 21
我对ServiceStack说的不多,但Web API有很多很棒的功能,目前版本为2.
您可以使用Web API执行的一些操作:
async和await.作为ServiceStack的客户,ServiceStack的专业人员对我来说最重要.
https://github.com/ServiceStack/Issues/issues/606
所以.发现错误,发现错误,错误修复.同一天.非凡的支持!
| 归档时间: |
|
| 查看次数: |
84698 次 |
| 最近记录: |