【ArchSummit架构师峰会】精华内容上线75%,AI大模型中台从理念到实践的探索!>>> 了解详情
写点什么

用 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:583360
用户头像

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

关注

评论

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

【自动化】Day01

IT蜗壳

架构师训练营 4 期 第10周

引花眠

架构师训练营 4 期

自动化测试环境搭建

IT蜗壳-Tango

IT蜗壳自动化 21天

SICP 习题解答 1.9

十元

学习曾国藩:职场咸鱼的翻身之法

boshi

七日更 职业生涯

恋物志(三):“美丽到牙齿”的智能硬件圈地运动

脑极体

SICP 习题解答 1.7

十元

Android入门你值得拥有!手持4个大厂offer的我,附面试题答案

欢喜学安卓

android 程序员 面试 移动开发

第五次作业&总结

青葵

学习

SICP 习题解答 1.8

十元

人生如戏,戏如人生——敏捷剧本杀玩后感

Bruce Talk

敏捷 Agile

Docker 教程(一):Docker 是什么

看山

Docker DevOps

一个程序员应怀揣武侠梦

DisonTangor

程序员

程序员是如何解决问题的

ES_her0

28天写作 3月日更

两会热议区块链,未来将呈现四大趋势

CECBC

区块链

LinqToExcel.Extend 源码分析

happlyfox

28天写作 3月日更

Python 环境搭建

依旧廖凯

Python 28天写作 3月日更

阶段性正确

广之巅

阶段性正确

第一章-认识产品经理作业

阿珍爱上阿强

产品经理 JD 财务

力扣(LeetCode)刷题,简单题+中等题(第20期)

不脱发的程序猿

LeetCode 力扣 28天写作 算法面经 3月日更

GitHub开源的超逼真俄罗斯方块游戏

不脱发的程序猿

GitHub 开源 28天写作 俄罗斯方块游戏 3月日更

5分钟介绍AI人工智能,机器学习和深度学习,John 易筋 ARTS 打卡 Week 40

John(易筋)

ARTS 打卡计划 arts

Wireshark数据包分析学习笔记Day4

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

python常用库简介

张鹤羽

28天写作 3月日更

SICP 习题解答 1.10

十元

程序员成长第二十二篇:做任务分配时,要考虑员工的成长。

石云升

项目管理 程序员 28天写作 职场经验 3月日更

LeetCode题解:279. 完全平方数,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

容器 & 服务:K8s 与 Docker 应用集群 (三)

程序员架构进阶

Docker 容器 kubernet 28天写作 3月日更

IntellIJ IDEA 命令行运行一个 HelloWorld Python 程序

HoneyMoose

云边协同

lenka

云计算 产品经理 3月日更

android面试!Android事件体系全面总结+实践分析,大牛最佳总结

欢喜学安卓

android 程序员 面试 移动开发

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