这些是 RestSharp 和 ServiceStack 的客户端代码之间的主要区别吗? [关闭]
Posted
技术标签:
【中文标题】这些是 RestSharp 和 ServiceStack 的客户端代码之间的主要区别吗? [关闭]【英文标题】:Are these the main differences between RestSharp and ServiceStack's Client Code? [closed] 【发布时间】:2012-04-24 10:23:45 【问题描述】:我无法做出明确的选择,希望有人(或几个人的组合)能指出使用 RestSharp 与 ServiceStack 的客户端服务之间的区别(请记住,我已经在使用 ServiceStack我的服务)。这是我到目前为止所拥有的(仅差异)。该列表相当小,因为它们确实非常相似:
服务栈
优点
来自我已经创建的服务 POCO 对象的流利验证 一个用于客户端和服务的 API 代码可读性更好(即 Get()、Post())缺点
必须写出我的一些字符串(即,如果我使用查询参数发出 GET 请求,我必须在我的代码中创建该字符串) 我必须为每个请求/响应类型(JsonServiceClient、XmlServiceClient)创建一个不同的类RestSharp
优点
几乎所有东西都可以是 POCO(即,如果我使用查询参数发出 GET 请求,我只需通过代码添加参数) 请求/响应类型之间的切换很简单(request.RequestFormat = DataFormat.Json/Xml)缺点
手动验证(超出数据注释中的验证) 要学习的两个 API(这是次要的,因为它们都相当简单) 代码一目了然(几乎没有)可读性(即 request.Method = Get/Post.. 并且主要调用是 Execute())我倾向于 RestSharp,因为它更倾向于直接使用 POCO 和很少的字符串操作,但是我认为 ServiceStack 可能是可以接受的,以获得更容易阅读的验证和代码。
所以,这里有问题:
您更喜欢哪个? 为什么一个比另一个?我知道这不是一个完全主观的问题,但至少我正在寻找这个问题的答案(这是主观的):
我的任何发现是否不正确和/或是否有任何遗漏?【问题讨论】:
遗憾的是,我认为这个问题会被关闭,因为它太主观了。我没有使用过 servicestack,所以我无法比较它们,但我可以回答或澄清任何 restsharp 问题。 通过两个API来学习你的意思是服务端的servicestack和消费端的restsharp? 我联系了 Demis 来代表他的球队 :) 我的猜测是,如果您在服务器端使用 servicestack,那么在消费端使用它可能会更好。 restsharp 真正适用于任意 3rd-party HTTP/REST APIs @John Sheehan:你完全应该自己参与进来 :) 【参考方案1】:作为ServiceStack的项目负责人,我可以列出ServiceStack服务客户端的一些特性:
ServiceStack 服务客户端在使用 ServiceStack Web 服务及其约定方面固执己见。即它们内置了对structured validation and error handling 的支持,并且所有客户端都实现了相同的接口,因此您可以在每个JSON、JSV、XML、SOAP 甚至Protobuf 服务客户端上使用same unit test to be used as an integration test - 允许您无需更改代码即可轻松更改服务使用的端点/格式。
基本上,如果您正在使用 ServiceStack Web 服务,我建议您使用 ServiceStack 客户端,这将允许您重用您定义 Web 服务的 DTO,从而为您提供端到端的类型化 API。
如果您使用的是第 3 方 API,我会推荐 RestSharp,它是一个更通用的 REST 客户端,非常适合该任务。此外,由于 ServiceStack 只是通过线路返回干净的 DTO,它也可以从 RestSharp 轻松使用,如果您更喜欢它的 API,这也是一个不错的选择。
更新 - 使用 ServiceStack 的 HTTP 客户端工具
ServiceStack 现在提供了一个使用 3rd 方 API 的替代选项,其 HTTP Client Util extension methods 提供了围绕常见 HttpWebRequest 访问模式的 DRY、可读 API,例如:
List<GithubRepo> repos = "https://api.github.com/users/0/repos".Fmt(user)
.GetJsonFromUrl()
.FromJson<List<GithubRepo>>();
网址扩展
var url ="http://api.twitter.com/statuses/user_timeline.json?screen_name=0"
.Fmt(name);
if (sinceId != null)
url = url.AddQueryParam("since_id", sinceId);
if (maxId != null)
url = url.AddQueryParam("max_id", maxId);
var tweets = url.GetJsonFromUrl()
.FromJson<List<Tweet>>();
替代内容类型
var csv = "http://example.org/users.csv"
.GetStringFromUrl(acceptContentType:"text/csv");
更多示例可从HTTP Utils wiki page获得。
【讨论】:
作为 RestSharp 的项目负责人,我完全赞同这个答案。 谢谢! +1 并被接受。 很高兴看到你们相处融洽:D 我想补充一点,我认为ServiceStack的项目负责人并没有意识到他拥有什么。 ServiceStack 使创建服务变得更容易和更快,并且平等地使用他们自己的服务,因此它也使得使用 3rd 方 REST API 的超级容易。其简单的请求 DTO 序列化为查询字符串,以及其简单快速地解析 JSON 以响应 DTO,具有出色的 API,仅用作针对 Google 和许多其他 REST API 的客户端。没有什么不利于 RestSharp,但在我看来,ServiceStack 作为客户端使用起来更容易、更干净。 不要使用 RestSharp。使用仍在开发中的东西。以上是关于这些是 RestSharp 和 ServiceStack 的客户端代码之间的主要区别吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 RestSharp 使用 JWT 访问令牌和用户声明