2009-07-21 52 views
18

我正在考虑开始编写一些REST Web服务来提供数据。我猜,当我的REST Web服务可用时,我的一些Web应用程序和控制台应用程序将能够使用REST Web服务作为数据服务来获取,添加,更新和删除数据到数据库。除此之外,我想添加身份验证功能来识别任何请求。从何处开始在C#或ASP.Net中使用REST Web服务

我的问题是,我应该从哪里开始?我看到了Microsoft ADO.Net Data Services。不知道这是不是一个好的开始?有没有可用的例子?

+1

请问,出于兴趣,为什么你需要休息,简单地暴露你的数据库?你试图解决什么样的情况?如果您只是想通过xml暴露CRUD数据,那就是所谓的POX,并且与架构风格ReST无关。 – SerialSeb 2009-07-22 12:58:39

+0

一个例子是,我们有一个数据库,根据来自机器的连接调用通过许可证收费。在一台机器中,打电话没有限制,但我们必须为其他电脑的呼叫付费。除此之外,网络防火墙是另一个问题。所以我认为REST Web服务可能是解决问题的最佳方式。我们可以调用REST服务,让REST服务创建一个连接或本地调用db。 – 2009-07-24 04:06:05

+0

那么你不是在谈论ReST,你正在谈论简单的基于http的xml服务。 POX!= ReST。 – SerialSeb 2010-12-23 11:36:15

回答

1
  • 如果你打算使用WCF,那么JP提到的WCF REST Starter Kit是一个很好的开始。使用ASP.NET MVC提供的RESTful服务,能讲流利的XML的
  • 奥马尔·Zabir provides a pretty good example和JSON
  • 你也可以去,你所建议的ADO.NET数据服务的路线。这些服务构建在WCF堆栈之上。

我从来没有偶然发现任何真正的指导如何选择这些选项。在ASP.NET MVC中,您承担了大部分管道负担,但也具有最大程度的控制权。虽然WCF倾向于让事情按照自己的方式完成,但直RESTful WCF是一个快乐的中间地带。 ADO.NET数据服务非常神奇,其缺点是完全购买一种生成这些服务的方法并失去更多的灵活性。

有几本好书可以阅读关于.NET的RESTful服务的主题。 O'Reilly和微软出版社最近都发布了关于这个主题的书籍。也许我可以提供给你的最重要的建议是消费和理解几个开放的RESTful服务(例如Twitter,亚马逊,Flickr),以了解创建服务所用的设计决策。用户配置,身份验证机制和受支持的内容类型(例如JSON,XML,RSS/ATOM)是您可以在行动中观察以帮助您创建服务API的一些决策。

4

如果您是.net领域的REST新手,那么请从OpenRasta开始。如果你努力工作,其他微软解决方案可以做REST,但是他们会引导你走一条路线,你最可能通过HTTP结束POD(普通旧数据)。这不是REST的全部内容。如果这就是你想要的,那么这也很酷,但它不是REST。

10

您可能还需要检查出servicestack.net一个开源的,跨平台,高性能的Web服务框架,可以让你使用代码优先,强类型的DTO的,可以自动地(无需任何配置开发Web服务)立即可以在各种不同的端点上即时获得(即XML,JSON,JSV,SOAP 1.1/1.2)。

REST,RPC和SOAP开箱

此外,也可以通过这里可以通过您的REST客户端指定首选的序列化格式你选择的任何REST-FUL网址提供的相同的Web服务即

  • 使用HTTP 接受:
  • 追加到查询字符串例如优选格式?格式= XML

请参阅如何开发一个完整的REST-FUL阿贾克斯CRUD应用程序只有1页的jQuery1页的C#Nothing but REST! Web服务的例子。

一个好的开始是Hello World example看看如何轻松添加ServiceStack Web服务到任何现有的ASP.NET Web应用程序。

性能

对于性能的良心,ServiceStack使一个很好的Ajax服务器,因为它配备了fastest JSON Serializer for .NET(> 3倍比其他JSON序列化更快)捆绑在一起。

结帐this live Ajax app尝鲜(在Linux/Nginx/MONO上进行实时演示)。

简单罗斯文示例

ServiceStack也可以很容易地创建强类型的摩擦Web服务,其中只有下面的代码是所有你需要返回客户波苏斯的列表:

public class CustomersService : RestServiceBase<Customers> 
    { 
      public IDbConnectionFactory DbFactory { get; set; } 

      public override object OnGet(Customers request) 
      { 
       return new CustomersResponse { Customers = DbFactory.Exec(dbCmd => 
        dbCmd.Select<Customer>()) 
      }; 
    } 

随着没有其他的配置,您现在就可以拨打上面的Web服务的REST完全恢复所有的:

客户端访问Web服务

可以调用重复使用相同的DTO上述Web服务,你的Web服务被定义为(即不需要code-gen)使用您的首选通用ServiceClient(即Json,Xml等)。这允许您使用强类型的API只用1行代码来调用您的Web服务:

C#同步实例

IServiceClient client = new JsonServiceClient("http://host/service"); 
var customers = client.Send<CustomersResponse>(new Customers()); 

而且,由于你的Web服务也REST服务,它可以无缝使用JavaScript Ajax客户端,如:

使用jQuery

$.getJSON("http://host/service", function(r) { alert(r.Customers.length); });