2012-01-30 171 views
3

刚开始我的第一个WCF休息项目,并希望对使用REST的最佳实践有所帮助。WCF休息 - 最佳做法是什么?

我见过很多教程,似乎有很多方法可以做事情...例如,如果做一个POST,我已经看到一些教程设置HttpStatusCodes(OK/Errors等),并且其他教程,他们只是返回包含操作结果的字符串。

在这一天结束时,有4个操作,肯定必须有一个指南,说如果你正在做一个GET,做这种方式等,并具有开机自检,做到这一点...

任何帮助,将不胜感激。

JD

+1

REST最佳实践:不使用WCF REST。避免它像瘟疫一样。 – Aliostad 2012-01-30 12:23:08

回答

6

UPDDATE

使用的ASP.NET Web API。


好的我留下了评论REST best practices: dont use WCF REST. Just avoid it like a plague,我觉得我必须解释它。

WCF的一个基本缺陷是它只关注有效负载。例如FooBar是这里的有效载荷。

[OperationContract] 
public Foo Do(Bar bar) 
{ 
    ... 
} 

这是WCF的租户之一,所以,无论什么运输是,我们得到有效载荷交给你。

但它忽略的是,在许多情况下,运送特定呼叫的context/envelope - 所以很多场景中获得的丢失。事实上,HTTP的力量在于它的上下文不是有效载荷和早在早期版本的WCF的,有没有办法让客户端的IP地址在netTcpBinding和WCF团队则坚持认为,他们无法提供。我现在找不到页面,但请记住阅读评论,并且MS人员刚才表示不支持。

使用WCF REST,你失去HTTP的灵活性,表达自己清楚(他们不得不后来让步吧)在以下方面:

  • HTTP状态代码
  • HTTP媒体类型
  • 的ETag ...

新的Web API,格伦块由上下文封装有效载荷的工作解决了这个问题:

public HttpResponse<Foo> Do(HttpRequest<Bar> bar) // PSEUDOCODE 
{ 
    ... 
} 

但对我的测试,这是不完美的,我个人更喜欢使用框架如南希甚至普通的ASP NET MVC揭露网络API。

+0

在内容类型协商,JSONP和OData支持等方面,REST中还有其他问题通常不会影响传统Web应用程序,您可能必须在MVC中进行手动滚动(不确定Nancy是否因为我没有使用它)这是内置到Web API – 2012-01-30 12:39:10

+0

@RichardBlewett ASP NET MVC不只是构建传统的Web应用程序。 – Aliostad 2012-01-30 12:54:10

+0

@Aliostad::)现在我更困惑了。我认为这些回复将会像Richards一样,这将是一个设置StatusCodes等的情况。我们即将开始一个WCF项目,并且你会说使用ASP.net MVC而不仅仅是WCF Rest(即使没有视图和我们只是返回JSON数据)? – 2012-01-30 13:02:27

6

使用来自HTTP specification

得到不同的HTTP动词时,有一些基本的规则:这是一个纯粹的读取操作。调用不能导致服务状态发生变化。为得到响应可能取决于高速缓存(本地,代理等)交付的缓存头

DELETE:用于删除资源

有时有周围PUT和POST一些混乱 - 这应该使用什么时候?要回答您必须考虑幂等性 - 操作是否可以在不影响服务状态的情况下重复执行 - 例如,将客户名称设置为某个值可以重复多次,而无需进一步更改状态;然而,如果我增加了客户的银行存款余额,那么如果不对服务进行进一步的状态更改,就不能安全地重复。第一被说成是等幂的所述第二未

PUT:非删除是幂等的

POST状态变化:非删除要求是不一样的状态变化

REST包含了HTTP - 因此故障应该使用HTTP状态码进行通信。 200用于成功,201用于创建,并且服务应该使用HTTP位置标头返回新资源的URI,4xx由于客户端请求的性质而失败(因此可以由客户端改变他们正在做的事情来修复), 5xx是服务器错误,只能解决服务器端

+0

感谢您的信息。根据AlioStads的评论,我需要重新考虑WCF Rest是否是我选择的f/w。不过,您的意见对帮助我做出决定非常有用。 – 2012-01-30 17:06:19

0

有什么缺失这里需要说。

WCF Rest可能无法提供REST协议的所有功能,但它能够促进现有WCF服务的REST协议。因此,如果您决定在当前的SOAP /命名管道协议的基础上提供某种REST支持,那么如果ROI较低,则该方法就行了。

手动滚轧成型REST协议可能是理想的,但并不总是经济的。在我的90%的项目中,REST API是一个事后考虑。在这方面,Wcf非常方便。

+0

此外,如果您希望Wcf REST for HTTP上下文感知上下文行为,则它是高度可定制的。一个例子是XML/JSON切换。 http://robbincremers.me/2012/01/05/wcf-rest-service-with-xml-json-response-format-according-to-content-type-header/这篇文章描述了如何使用格式切换内容类型标题。再次,我同意这不是理想的,但它并不完全是厄运和阴沉。 – 2012-07-24 04:16:11

相关问题