OceaBase开发者大会落地上海!4月20日共同探索数据库前沿趋势!报名戳 了解详情
写点什么

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

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

关注

评论

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

模型精度再被提升,统一跨任务小样本学习算法 UPT 给出解法!

阿里云大数据AI技术

人工智能 自然语言处理 机器学习 模型 12 月 PK 榜

【附视频】在线研讨会回顾|龙智引入自动化测试工具,帮助企业优化DevSecOps工具链,提升QA效率

龙智—DevSecOps解决方案

自动化测试

用户面对面 | 对话某新能源汽车行业工程师:如何落地Atlassian工具?

龙智—DevSecOps解决方案

架构实战营 2-4 架构质量提升随堂练习

西山薄凉

「架构实战营」

YMatrix:超融合数据库如何在泵车智能运维场景实现 One for All 价值

YMatrix 超融合数据库

智能运维 三一重工 超融合数据库 智能化运维 YMatrix

前端培训学习前景怎么样

小谷哥

学习java开发技术应该如何入手

小谷哥

校招Java岗学到什么程度,才能找到所谓的好工作呢?

Java永远的神

Java 程序员 面试 程序人生 秋招

2.1如何设计可扩展架构

程序员小张

「架构实战营」

喜报 | 秒云获评2022(第二届)“金信通”金融科技创新应用优秀案例

MIAOYUN

金融科技 解决方案 信创

“智造新未来”欧比护理智造总部奠基仪式

联营汇聚

最全数据分类分级标准汇编,有必要了解一下!

极盾科技

《2022年数据库大调查》正式启动,共同助力国产数据库发展

墨天轮

数据库 oracle TiDB 问卷调查 国产数据库

基于人眼视觉模型,实现码率、质量、成本的最优均衡

阿里云视频云

云计算 阿里云

Java培训一般需要多长时间?

小谷哥

华为侯金龙:能源流与信息流融合,共建绿色低碳城市

Geek_2d6073

在成都培训web前端哪有比较好的机构

小谷哥

7天搞定一门新技术!5个含金量很高的短篇课程推荐

博文视点Broadview

代码质量与安全 | 如何应对网络安全威胁,保障软件安全?

龙智—DevSecOps解决方案

软件安全 安全软件开发生命周期 网络安全威胁

对于Getaverse,灵魂绑定和去中心化身份是什么?

Geek_Web3

Web3 Daily 去中心化信任 #区块链# did

Java开发技术很难吗?

小谷哥

软件测试丨Git分支管理实操,搞定在线合并和本地合并

测试人

GitHub 软件测试 自动化测试 测试开发

版本控制 | 如何将UnrealGameSync与Perforce Helix Core结合使用

龙智—DevSecOps解决方案

虚拟引擎 UnrealGameSync

iQOO11 国内安卓首发背景音过滤,人声更突显,通话更隐私

Geek_2d6073

中台+低代码 企业数字化转型新范式

力软低代码开发平台

时序数据库破局开放探讨

YMatrix 超融合数据库

物联网 时序数据库 超融合数据库 数据库架构选型 YMatrix

flutter系列之:如丝般顺滑的SliverAppBar

程序那些事

flutter 程序那些事

演讲实录|OpenMLDB 与阿里云 MaxCompute 生态集成

第四范式开发者社区

人工智能 数据库 开源 时序数据库 特征

时间复杂度和空间复杂度

C++后台开发

数据结构 算法 网络编程 linux开发 C++开发

通过 NFTScan 实时监控钱包地址和 NFT 合约地址

NFT Research

区块链 数据分析 NFT

数字化转型的十大优势

优秀

数字化转型 数字化升级

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