Restful WCF开发实践 互动版

服务契约的REST化

Restful WCF服务基于HTTP协议工作,与传统的WCF服务契约定义相比,一个明显的地方就是使用了[WebGet][WebInvoke]两个标记,来指定REST风格访问的方式。

[WebInvoke(Method = "DELETE", UriTemplate = "employee/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]

如上面的一个典型的标记,指定了该方法将对应HTTP协议的DELETE动作,访问的地址为http ://.../employee/xx形式,HTTP的请求和回应中包含的消息体都以Json格式来编码。

WebGet和WebInvoke

  • WebGet:通过关联UriTemplate属性以对应HTTP协议的GET动作,一般用来从服务端检索信息

  • WebInvoke:对应HTTP协议的POST、PUT、DELETE等动作,需要关联相关的MethodUriTemplate等属性来指定具体的操作;

WebGet和WebInvoke的属性

  • Method:WebGet标记无此属性,因为其只对于GET动作;WebInvoke标记中该属性默认为POST,可以通过修改该属性给接口方法指定不同类型的HTTP动作(POST/PUT/DELETE)。GET动作是读取查询数据,POST适合数据的插入,PUT用于数据的更新操作,DELETE则用于已有数据的删除。Method方法中的单词一定要大写,不然会出错。

  • UriTemplate:Uri模板属性,用来将契约方法映射到具体的Uri上,当格式匹配时WCF将通过UriTemplate和服务地址共同构造服务的资源Uri。比如上面例子中的UriTemplate = "employee/{id}",在访问中id将适配具体的参数。

  • RequestFormat、ResponseFormat:指定Rest WCF请求和返回的消息包装格式,常见的有JsonXML格式。默认的为XML,若选择JSON需要显式声明。