【问题标题】:Where should I begin for making a RESTful web service based on the .NET framework?我应该从哪里开始制作基于 .NET 框架的 RESTful Web 服务?
【发布时间】:2012-01-17 08:06:59
【问题描述】:

我正在创建一个需要通过 Web 服务连接到数据库的 iOS 应用程序。我只知道使用 RESTful Web 服务的基本知识,我之前从未编写过自己的内容,想知道您是否可以给我任何建议,告诉我在哪里可以找到如何编写自己的 RESTful Web 服务。

在我的 iOS 程序中,我将向 Web 服务发送零件编号,然后 Web 服务将需要返回零件的颜色和尺寸信息。我不确定 XML 是最好的格式还是有更好的格式?

我想我的问题是双重的:

  1. 这是我应该使用 RESTful Web 服务做的事情吗?
  2. 在哪里可以找到有关创建基于 .NET 的 RESTful Web 服务的教程?

【问题讨论】:

    标签: c# .net rest


    【解决方案1】:

    您可以使用 WCF 来创建 RESTful 服务,也可以使用 Nancy:

    我建议使用 json 作为数据格式,请参阅此处以获取一些出色的链接:iPhone/iOS JSON parsing tutorial

    在 wcf 中,您将着手创建这样的服务:请参阅此处以获取合理的示例:http://blogs.msdn.com/b/kaevans/archive/2008/04/03/creating-restful-services-using-wcf.aspx

    [ServiceContract]
    public interface IServeStuff
    {
        [OperationContract]
        [WebGet(UriTemplate = "/stuff/{id}", 
                ResponseFormat = WebMessageFormat.Json)]
        Stuff GetStuff(string id);
    }
    
    public class StuffService : IServeStuff
    {
        public Stuff GetStuff(string id)
        {
             return new Stuff(id);
        }
    }
    

    或者像这样使用 nancy http://www.nancyfx.org/

    public MyModule : NancyModule
    {
        public MyModule()
        {  
            Get["/stuff/{id}"] = parameters => {
                return new Stuff(parameters.id).AsJson();
            };
        }
    }
    

    但在这一切之前听听@PeterKelly,因为他是对的

    【讨论】:

    • Nancy 太棒了,它真的是低俗的网络编程。编写网络应用程序的非常直观的方式(对我来说)。我们几乎所有的前端开发都是用 javascript 做的,并用 nancy 提供数据。
    【解决方案2】:

    我的建议是使用ASP.NET MVC3 来实现它——因为它提供了一个很好的控制器动作范例,非常适合实现 REST 服务。你可以使用 WCF,我相信它会很好地工作,但从个人经验来看,我发现 MVC3 非常容易用于为 iOS 客户端编写 REST 后端。

    我建议使用 JSON 而不是 XML,主要是因为它比 XML 更简洁,但如果您稍后决定为您的数据库实现 Web 前端,它还有其他优点,因为 Javascript 对 JSON 有很好的支持。

    有许多适用于 iOS 的 JSON 库,包括 SBJSONYAJL

    还有一个广受好评的 iOS REST 实现框架,称为 RestKit

    关于使用 MVC 框架实现 REST 的教程,this might be one to look at

    【讨论】:

    • 投反对票的原因?我问不是因为(轻微的)声誉受损 - 只是为了通知辩论?
    • PS - Nancy 对这个问题的回答也很好。自从写了这个答案后,我就一直在使用 Nancy,它也很棒。
    【解决方案3】:

    鉴于您对 REST 的经验很少,我会先了解一下这个概念。在开始设计服务之前,从根本上了解它是什么(不仅仅是漂亮的 URL)很重要。

    1. 我将从阅读 Roy Fielding 的论文Chapter 5 开始(REST 一词的起源——如果您愿意,请阅读整篇论文)。
    2. 然后我会继续使用出色的RESTful web services
    3. 最后,我会阅读RESTful .NET

    如果您给自己 2 天的时间,您可以毫无问题地阅读、理解和消化所有这些资源。

    您可能最终会使用 WCF - 您可以从 here 获得 REST Starter Kit

    【讨论】:

    • 我不能强调这一点足够重要,以在进行服务实现之前理解 rest,你称之为 rest 但只是通过 http 进行 RPC。
    • +1 - 在实践中也阅读 ReST。即使您不想要/不需要完整的 HATEOAS 服务,您至少应该知道您的选择。
    【解决方案4】:

    你几乎可以使用任何东西。

    如果这确实是您唯一的要求,那么只需使用 ASP.NET 的“通用处理程序”,将信息从请求查询参数中提取出来并将 JSON/XML 写入响应中就会很容易。

    但是,如果您预计将来事情会变得更加复杂,您将需要使用某种框架,例如“Bas B”和“iandotkelly”推荐。

    【讨论】:

      【解决方案5】:

      使用WCF Data Services。这个支持XML和json(json效率更高)。

      将其与Entity Framework 一起使用,可以缩短开发时间。

      【讨论】:

      • WCF 数据服务 - 即使是最新的 CTP 版本 - 非常糟糕。这是最近的一个项目的一部分,我们最终把整个烂摊子都拆掉了,用一个基本的 WCF 服务来代替它。
      • @Yuck 有那么糟糕吗?我们已经考虑了一段时间,但还是选择了 nancy。
      • 你只能用它做最简单的CRUD操作。 LINQ 没有(不能,可能是因为 OData 是什么)具有任何聚合函数(Sum()Count() 等)的翻译,并且让像 Contains() 这样的其他函数工作需要一些不直观的编码。您也不能利用 LINQ 的延迟执行分步构建查询,因为它不执行子查询;它严格强制在进行任何Select()select 调用之前完成所有过滤。
      【解决方案6】:

      WCF 数据服务将在这里为您提供帮助。

      查看This beginners guide to WCF

      【讨论】:

      • 查看我对@Bas B 的评论。WCF 数据服务声称可以拯救您的时间最终只会给您戴上手铐并限制您。
      • @"Yuck - 感谢这些 cmets,我一定会调查一下
      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 2013-06-15
      • 1970-01-01
      相关资源
      最近更新 更多