红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

用 WCF 创建一个 REST 的 API

  • 2008-03-18
  • 本文字数:1018 字

    阅读完需:约 3 分钟

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 的闪光之处就在于能够对它进行扩展、添加,以及构建在高水平的基础之上”。

查看英文原文: Creating a RESTful API with WCF

2008-03-18 21:583362
用户头像

发布了 109 篇内容, 共 39.6 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

架构的核心要素

源字节1号

软件开发 前端开发 软件架构 后端开发

活动回顾 | 基于英特尔技术的端到端音视频优化

网易云信

音视频技术

数据脱敏前沿实践分享,筑造数据安全边界 | 极客星球

MobTech袤博科技

加密 数据安全

【火热招募】一文看懂华为云IoT Edge边缘计算开发者大赛技术亮点

华为云开发者联盟

IoT 边缘计算 华为云 企业号九月金秋榜

倒计时 1 天|洞察数字化转型新机遇,共论云上数据分析新观点

Kyligence

数据分析 指标管理

亿铸科技聚焦国产存算一体AI大算力芯片,28纳米工艺实现10倍能效比

硬科技星球

Qt|图片旋转缩放操作

中国好公民st

c++ qt 9月月更

Java 8 的异步利器:CompletableFuture源码解析(建议精读)

Java快了!

java;

政务服务平台建设的难点怎样解决

Geek_99967b

小程序 小程序容器

Java虚拟机之垃圾收集算法

派大星

9月月更

JavaScript 这几个“神(qi)奇(pa)“设计也是醉了......

掘金安东尼

JavaScript 前端 9月月更

三个案例,带你体验SQL的神奇特性

华为云开发者联盟

数据库 后端 sql 企业号九月金秋榜

5分钟get一个技术点!揭秘一种加密框架的技术实现

Java-fenn

Java

Ansible如何使用Filter插件转换数据

山河已无恙

9月月更

【云原生】Kubernetes编排工具精讲

陈橘又青

云原生 9月月更

移动App开发的痛点怎样解决

Geek_99967b

小程序

京东前端二面高频react面试题

Geek_07a724

前端 React

Java——标识符、关键字和保留字

守夜人st

9月月更

ABAP Netweaver 和 ABAP Platform 这两个名词的辨析

Jerry Wang

SAP abap Netweaver 思爱普 9月月更

研发效能之环境管理

laofo

DevOps cicd 研发效能 持续集成 持续交付

复享光学承担的上海市2022年度科学仪器领域项目获批立项

硬科技星球

理解virt、res、shr之间的关系(linux系统篇)

京东科技开发者

Linux 内存 系统 内存映射 Linux操作系统

一站式数字藏品收款系统开发解决方案

开源直播系统源码

NFT 元宇宙 数字藏品 数字藏品系统

双“简”合璧:极简 Kubernetes 上使用极简服务网格

Flomesh

Service Mesh 服务网格

不止于《幻塔》,云底座护航完美世界迎接行业新时代

阿里云弹性计算

游戏 ECS

Nacos 和 Apollo中的 长轮询 定时机制,太好用了

Java快了!

Nacos 和 Apollo中的

基于lio-sam框架,教你如何进行回环检测及位姿计算

华为云开发者联盟

人工智能 企业号九月金秋榜

基于 iframe 的微前端框架 —— 擎天

vivo互联网技术

前端框架 微前端 项目管理工具 iframe

Python基础(四) | 程序控制结构

timerring

Python. 9月月更

2022前端二面react面试题

Geek_07a724

前端 React

今天不写代码,聊聊热门的知识图谱

码农参上

人工智能 机器学习

用WCF创建一个REST的API_SOA_Hartmut Wilms_InfoQ精选文章