刚刚开始我的第一个WCF rest项目,希望在使用REST时能得到一些帮助。我看过许多教程,似乎有很多方法可以做到同样的事情...例如,如果进行POST操作,我看过一些教程是设置HttpStatusCodes(OK/Errors等),而其他教程则只返回包含操作结果的字符串。最终,总共有4个操作,肯定有一份指南会告诉你如果要进行GET操作,应该这样做,如果进行POST操作,应该这样做...任何帮助将不胜感激。JD
使用ASP.NET Web API。
好的,我留下了评论REST最佳实践:不要使用WCF REST。就像避开瘟疫一样避免它
,我觉得我需要解释一下。
WCF的一个基本缺陷是它只关注有效负荷。例如Foo
和Bar
在这里是有效负荷。
[OperationContract]
public Foo Do(Bar bar)
{
...
}
public HttpResponse<Foo> Do(HttpRequest<Bar> bar) // PSEUDOCODE
{
...
}
但是根据我的测试,这并不完美,我个人更喜欢使用像Nancy或者纯ASP NET MVC这样的框架来暴露Web API。
使用不同的HTTP动词时,有一些基本规则,这些规则来自于HTTP规范。
GET:这是一个纯读取操作。调用不得导致服务状态发生更改。根据缓存头信息,GET的响应可能会从缓存(本地、代理等)中提供。
DELETE:用于删除资源。
有时会对PUT和POST产生一些混淆——什么情况下应该使用哪个?要回答这个问题,你必须考虑幂等性——即操作是否可以重复执行而不影响服务状态。例如,将客户姓名设置为某个值可以多次重复执行而不会引起进一步的状态更改;然而,如果我正在增加客户的银行余额,则不能安全地重复执行而不在服务上进行进一步的状态更改。前者被认为是幂等的,后者则不是。
PUT:非删除的幂等状态更改。
POST:非删除的非幂等状态更改。
REST采用HTTP协议,因此失败应使用HTTP状态码进行通信。200表示成功,201表示创建,服务应返回新资源的URI使用HTTP位置标头,4xx表示由于客户端请求的性质而导致的故障(因此可以通过客户端更改其操作来修复),5xx表示只能在服务器端解决的服务器错误。这里有一些需要说的内容。
WCF Rest 可能无法提供 REST 协议的所有功能,但它能够为现有的 WCF 服务提供 REST 协议的支持。因此,如果您决定在当前的 SOAP/Named pipe 协议之上提供某种形式的 REST 支持,那么这是一个不错的选择,特别是当 ROI 较低时。
手动编写完整的 REST 协议可能是理想的,但并不总是经济实惠的。在我的 90% 项目中,REST API 是事后考虑的。在这方面,WCF 非常方便。