RESTful Web服务

ps.*_*ps. 10 .net c# wcf .net-4.0

我是RESTful Web服务的新手.我们正在采用REST路由来构建我们的公共Web服务以供客户使用.我有几个问题.

纯REST Web服务有任何限制吗?如果是,那么混合REST Web服务会处理这些限制吗?

我正在考虑在授权标头中使用SSL +哈希消息身份验证代码(HMAC)以实现安全性以及基于IP的过滤.你们怎么看待它?

有没有好的客户端测试工具?目前我正在使用以下 http://code.google.com/p/rest-client/

那某种客户端代码生成工具呢?

以下链接是我的信息来源.

http://msdn.microsoft.com/en-us/library/dd203052.aspx

http://blogs.msdn.com/b/endpoint/archive/2010/01/07/getting-started-with-wcf-webhttp-services-in-net-4.aspx

Mon*_*nch 7

首先要记住的是REST服务应该是无状态的,与SOAP/RPC类型的服务接口相比,这是非常不同的.使用REST方法需要您重新考虑您希望客户端与服务交互的方式,将交互分解为简洁明了的方法调用.

REST
+轻量级消息,开销很小(除了XML本身)
+易于读取的结果,可以使用Web浏览器轻松测试
+易于实现
- 松散的界面,松散的类型检查

SOAP
+更严格,具有严格的合同定义
+大量可用的开发工具.

通过WCF MSDN文档,从一开始就集成了WCF SOAP支持,而REST支持是最近添加的功能.我自己很难找到REST服务的身份验证/安全性文档,因为大多数文档都是针对SOAP的.

客户端生成工具:我没有遇到任何REST服务,因为REST没有像SOAP那样定义服务契约.WADL尝试为REST服务执行此操作. http://en.wikipedia.org/wiki/Web_Application_Description_Language http://wadl.codeplex.com/

我很有兴趣阅读有关身份验证和安全性的更多回复,因为我自己正在研究这个问题.


Tuo*_*nen 5

这是WCF REST WebService的一个很好的起点:

WCF服务的REST/SOAP端点

(顺便说一句:#2具有良好的REST样的URL),您可以测试一个REST服务只是一个Web浏览器(转至该网址并获得XML或JSON).Fiddler也是很好的工具,也是FireFox的FireBug插件.我通常会创建一个瘦服务接口项目和一个单独的(经过单元测试的)逻辑项目.

对于身份验证,我首先会生成一个Guid和一个时间戳.然后基于那些哈希(.NET支持SHA256和SHA512).Guid可以存储到服务器(数据库表)以映射它一些具体的数字id.然后你可以有一个休息网址:

/myobject/1?timestamp=20100802201000&hash=4DR7HGJPRE54Y 
Run Code Online (Sandbox Code Playgroud)

并且只是在开发环境中禁用哈希和时间戳检查(例如使用AOP).有了时间戳,我会检查邮票是否在15分钟之前和之后(=应该足以防止攻击).

您的服务是否对公众/互联网可见,您的客户是jQuery还是Silverlight -client?然后,您仍然遇到问题:您不希望在客户端软件代码中包含密钥.

所以你需要在服务器和某种cookie中生成哈希来存储客户端会话.(这是可以做到,例如用不同的配置文件中的文件夹中一个单独的登录页/应用程序).我记得这本书确实对话题的东西:

如果要在使用WCF时启用HttpContext,则需要在<serviceHostingEnvironment aspNetCompatibilityEnabled="true">下面进行设置<system.serviceModel>.然后,您可以检查当前用户身份HttpContext.Current.User.Identity.Name.

但是,如果要创建纯REST服务,则不要使用cookie,而是为每次调用使用HTTP基本身份验证和SSL/TLS.

我认为使用LINQ2Xml或jQuery制作客户端很容易,因此可能不需要客户端生成.

或者您也可以同时拥有SOAP和REST接口,并使用服务引用来创建客户端.