用WCF创建一个REST的API

Aaron Sloman和Haider Sabri在MIX08中谈到了如何“使用WCF创建一个REST的API”,其中,介绍了一 个名为RESTChess的REST应用程序示例。

Aaron Sloman首先谈到在WCF中支持REST的某些背景信息。接着,Haider Sabri则对REST以及REST的主 要特性进行了简要的介绍。据Haider所说,REST提供的关键优势在于:

低的学习门槛

ROA遵循了Web语义……适于Web服务的APIs

灵活多变的响应格式

他认为“如果客户端未知,那么在创建一个通用API时,REST是最佳选择”。

WCF通过Web编程模型来支持REST,该模型是在.NET Framework 3.5中增加的,包括如下概念:

URI Templates & WebGet/WebInvoke

它们都是特性,用于映射HTTP请求到类中的方法。

WebHttpBinding

WebHttpBinding是WCF的一个绑定,允许WCF基于WebHttp进行内容发送。

你可以很容易地在REST和SOAP的API之间进行切换。

WebOperationContext

WebOperationContext支持以REST方式处理请求与响应。

Haider Sabri介绍了RESTChess,它是用于国际象棋游戏的REST的API。RESTChess既是一个很好的例子 ,用来展现采用WCF的Web编程模型实现的REST的API,同时又是一个扩展集(定制WCF绑定和行为),弥补了 WCF Web编程模型的缺陷:

灵活的URIs

在IIS托管服务时,服务的.svc扩展名是必备的。

RESTChess提供了一个URL的重写器,并在IIS 7中被实现为一个HTTP模块。

为只支持GET和POST的低级REST客户端搭建支撑的桥梁

有两种常见的方法可以解决这一问题:

自定义HTTP标头

_method查询参数

RESTChess实现了一个自定义WCF通道,可以分辨高级的和低级的REST客户端,以及修改利用隐藏的 DELETE或PUT方法通过POST请求传递到适合的HTTP方法的消息。

使用数据签名验证请求

RESTChess使用了OAuth,它是一个包含了数据签名的“支持安全的API验证的开放协议”。

OAuth调用者作为查询参数对签名进行传递。

一个自定义的WCF通道负责检查请求是否具有OAuth密钥,如果在请求被分发给服务模型之前,调用者 没有被验证(密钥不存在或者不能识别),就会抛出一个异常。

多种表现形式

WCF只支持XML和JSON。

REST的异常处理

RESTChess团队构建了一个引擎,能够将异常映射到适当的HTTP错误代码。

虽然该团队为WCF的Web编程模型完成了拾遗补阙的任务,但Haider则认为:“WCF的闪光之处就在于能 够对它进行扩展、添加,以及构建在高水平的基础之上”。

时间: 2024-11-05 12:07:45

用WCF创建一个REST的API的相关文章

如何创建一个安全的API(一)

本文讲的是如何创建一个安全的API(一),毫无疑问,我们生活的世界正在随着时间的前行联系越来越紧密.无数新服务的出现都在帮助我们去使生活变得更简单,更愉快,而在这些所有变化的背后,服务们在进行组合交流所使用的是一项技术-API驱动架构.这些API能够允许服务在程序级别进行交流,并且可以调用这个服务中心的各种服务(每一种服务就是一个函数)帮助应用程序达到开启视窗.描绘图形和使用周边设备等目的. 如果你在过去的七八年里一直在进行着应用程序的开发,那么你可能会遇到各种各样新颖的API.或者说你可能需要

将各个附属机构统一在云端以创建一个全局的API

在现代商业中,许多组织为了在不同的领域有所作为,采取了收购其它公司的方式,并因此在全球范围内留下了深刻的足迹.这些被收购的公司有时可以保持基本完全独立,而有时则成为将各种业务整合在一起的一个重要组成部分.在这一问题空间内的最大的一项挑战是:你或许打算将这些公司整合在一起,以展现出整个公司组织的一个单一的全局视图,使客户与合作伙伴们能更方便地与你的组织进行整合. 本文中,我们将以一个基于真实世界场景的虚构示例作为研究对象,观察一些典型的挑战,并详细分析一些为了使这个解决方案获得成功应实现的良好实践

使用IBM WebSphere Cast Iron Web API Services创建一个Web API

利用 IBM WebSphere Cast Iron Web API Services,您只需点击几下就可以组装和显示 API.您还可以通过所提供的分析法来分析您的 Web API 的使用情况,并利用社区挂钩在品牌化的开发人员门户中将 Web API 社区社交化. Web API 是一个快速增长的业务渠道,可帮助您的企业进入新的市场,并吸引新的客户与合作伙伴.它们还可以帮助您从大型开发人员社区中挖掘创新,而不仅仅是在您的公司的开发人员中挖掘创新. 由于 Web API 显示关键的业务资产和服务(

WCF后续之旅(13) 创建一个简单的WCF SOAP Message拦截、转发工具

WCF是.NET平台下实现SOA的一种手段,SOA的一个重要的特征就基于Message的通信方式.从Messaging的角度讲,WCF可以看成是对Message进行发送.传递.接收.基础的工具.对于一个消息交换的过程,很多人只会关注message的最初的发送端和最终的接收端.实际上在很多情况下,在两者之间还存在很多的中间结点(Intermediary),这些中间结点在可能在实际的应用中发挥中重要的作用.比如,我们可以创建路由器(Router)进行消息的转发,甚至是Load Balance:可以创

《WCF技术内幕》25:第2部分_第5章_消息:创建一个消息(下)之MessageFault

Message和SOAP Fault Message类型定义了一些用来创建表示SOAP Fault消息对象的工厂方法.SOAP Fault是SOAP消息的一种形式,它用来表示错 误信息.在SOAP规范(1.1 和1.2)对于消息体内容,并且某些时候,关于SOAP 消息头块的规定都存在差别.Message是对于SOAP消息的CLR抽象,Message可以 表示SOAP Fault,和表示一个SOAP消息一样.本节会描述一些SOAP Fault的基本 概念和创建表示SOAP Fault消息的基本类型

《WCF技术内幕》24:第2部分_第5章_消息:创建一个消息(上)

创建一个消息 可以选择众多定义的CreateMessage工厂方法中的一个来创建Message对象. 绝大部分,这些方法接受的都是SOAP消息体的内容作为参数.非常重要的一点是 Message的body在创建以后就不能再做修改.SOAP消息头块,话句话说,在消息 创建以后还可以增加和修改.一般地说,Message类型的工厂方法可以根据处理 消息的路线图来划分的,从XmlReader提取数据的方法,把数据放进Message的方 法,和产生表示SOAP Fault Message的方法.在我们研究各

WCF后续之旅(13): 创建一个简单的WCF SOAP Message拦截、转发工具[上篇]

WCF是.NET平台下实现SOA的一种手段,SOA的一个重要的特征就基于Message的通信方式.从Messaging的角度讲,WCF可以看成是对Message进行发送.传递.接收.基础的工具.对于一个消息交换的过程,很多人只会关注message的最初的发送端和最终的接收端.实际上在很多情况下,在两者之间还存在很多的中间结点(Intermediary),这些中间结点在可能在实际的应用中发挥中重要的作用.比如,我们可以创建路由器(Router)进行消息的转发,甚至是Load Balance:可以创

WCF后续之旅(13):创建一个简单的SOAP Message拦截、转发工具[下篇]

在Part I 中,我们创建了一个InterceptService,并且通过一个特殊的EndpointBehavior,ClientViaBehavior实现了message的拦截.转发功能.在本节中,我们将讨论另外一种不同的实现方式.如何说ClientViaBehavior是基于Client端的实现方式,那么我们今天讨论的是基于Service的实现方式. 在对新的实现方式展开介绍之前,我们先来介绍一下关于逻辑地址和物理地址. 一.逻辑地址和物理地址 我们知道,WCF通过Endpoint进行通信

实践重于理论——创建一个监控程序探测WCF的并发处理机制

由于WCF的并发是针对某个封装了服务实例的InstanceContext而言的(参考<并发的本质><并发中的同步>),所以在不同的实例上下文模式下,会表现出不同的并发行为.接下来,我们从具体的实例上下文模式的角度来剖析WCF的并发处理机制,如果对WCF实例上下文模式和实例上下文提供机制不了解的话,请参阅<WCF技术剖析(卷1)>第9章. 为了使读者对采用不同实例上下文对并发的影响有一个深刻的认识,会创建一个简单的WCF应用,并在此基础上添加监控功能,主要监控各种事件的执