gpt4 book ai didi

rest - 这些是 RestSharp 和 ServiceStack 的客户端代码之间的主要区别吗?

转载 作者:行者123 更新时间:2023-12-03 07:40:21 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

7年前关闭。




Improve this question




我一直无法做出明确的选择,并希望有人(或几个人的组合)可以指出使用 RestSharp 与 ServiceStack 的客户端服务之间的区别(请记住,我已经在使用 ServiceStack 作为我的服务) .这是我到目前为止所拥有的(仅差异)。该列表相当小,因为它们确实非常相似:

服务栈

优点

  • 来自我已经创建的服务 POCO 对象的流利验证
  • 一个用于客户端和服务的 API
  • 代码可读性更好(即 Get<>()、Post<>())

  • 缺点
  • 我的一些字符串必须写出(即,如果我使用查询参数发出 GET 请求,我必须在我的代码中创建该字符串)
  • 我必须为每个请求/响应类型(JsonServiceClient、XmlServiceClient)创建一个不同的类

  • RestSharp

    优点
  • 几乎所有东西都可以是 POCO(即,如果我使用查询参数发出 GET 请求,我只需通过代码添加参数)
  • 请求/响应类型之间的切换很简单(request.RequestFormat = DataFormat.Json/Xml)

  • 缺点
  • 手动验证(超出数据注释中的验证)
  • 需要学习的两个 API(这是次要的,因为它们都相当简单)
  • 代码一目了然(几乎没有)可读性(即 request.Method = Get/Post.. 并且主要调用是 Execute< T >())

  • 我倾向于 RestSharp,因为它更倾向于直接使用 POCO 和很少的字符串操作,但是我认为 ServiceStack 可能是可以接受的,以获得更容易阅读的验证和代码。

    所以,这里有几个问题:
  • 你喜欢哪个?
  • 为什么一个比另一个?

  • 我知道这不是一个完全主观的问题,但至少我正在寻找这个问题的答案(这是主观的):
  • 我的任何发现是否不正确和/或我错过了什么?
  • 最佳答案

    作为ServiceStack的项目负责人我可以列出 ServiceStack 服务客户端的一些特性:

    ServiceStack 服务客户端在使用 ServiceStack Web 服务及其约定方面固执己见。即,它们内置了对 structured validation and error handling 的支持以及所有客户端都实现相同的接口(interface),因此您可以拥有 same unit test to be used as an integration test在每个 JSON、JSV、XML、SOAP 甚至 Protobuf 上服务客户端 - 允许您轻松更改服务使用的端点/格式,而无需更改代码。

    基本上,如果您正在使用 ServiceStack Web 服务,我建议您使用 ServiceStack 客户端,这将允许您重用您定义 Web 服务的 DTO,从而为您提供端到端的类型化 API。

    如果您使用的是第 3 方 API,我会推荐 RestSharp,它是一个更通用的 REST 客户端,非常适合该任务。此外,由于 ServiceStack 只是通过线路返回干净的 DTO,它也可以从 RestSharp 轻松使用,如果您更喜欢它的 API,它也是一个不错的选择。

    更新 - 使用 ServiceStack 的 HTTP 客户端工具

    ServiceStack 现在通过其 HTTP Client Util extension methods 提供了使用 3rd 方 API 的替代选项。围绕常见的 HttpWebRequest 访问模式提供干燥、可读的 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 获得.

    关于rest - 这些是 RestSharp 和 ServiceStack 的客户端代码之间的主要区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10117376/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com