写点什么

微软随.NET 4.5 发布新 REST API 框架

2012 年 9 月 25 日

在最近发布的Visual Studio 2012 及.NET 4.5 中, 微软正式推出新的网络服务框架 ASP.NET Web API 。作为 ASP.NET MVC 4 的一部分,ASP.NET Web API 这套开源框架的设计目的是简化 RESTful 服务的开发和使用。

在“ Where does ASP.NET Web API Fit? ”这篇博文中, West Wind Technologies 的 Rick Strahl 解析了 ASP.NET Web API 的目标与优势。

ASP.NET Web API 与之前的内建 HTTP 服务解决方案的不同之处在于,它一开始就是围绕 HTTP 协议及其消息语义构建起来的。与 WCF REST 或 ASP.NET AJAX 加 ASMX 相比,它不是对现有框架的增强,而是一个全新的平台。新的 ASP.NET Web API 的优势在于它汇集了之前各平台的各种最佳特性,结合为一个全面而不臃肿的 HTTP 平台。这套 Web API 基于 ASP.NET,又借用了很多 ASP.NET MVC 的概念,应该很容易被 ASP.NET 的开发者适应和熟悉。

Strahl 指出 ASP.NET Web API 有一些核心功能,能让它成为 ASP.NET MVC 框架现用户的自然选择,同时也切合 HTTP 端点开发者的需要。

  • 完善支持 URL 路由,透过用户熟悉的 MVC 风格路由语义,生成干净的 URL
  • 根据 Accept 标头对请求和响应的序列化形式进行内容协商(Content Negotiation)
  • 支持大量输出格式,包括 JSON、XML、ATOM 等
  • 默认对 REST 语义有完善支持,同时又不强制限定必须使用 REST 语义
  • 易于扩展的 Formatter 机制,支持添加新的输入 / 输出类型
  • 可通过 HttpResponseMessage 类、HttpRequestMessage 类和强类型枚举来描述大量的 HTTP 操作,提供对更高级的 HTTP 特性的深度支持
  • 基于惯例的设计引导用户按 HTTP Services 的正确方式行事
  • Formatters 和 Filters 延续了 MVC 的扩展模型,具备出色的扩展能力
  • 用于非 Web 程序时,可以脱离 IIS 运行(Self-hostable)
  • 具备可测试性,测试机制的设计类似于 MVC

微软现有的 Web 服务框架叫做 Windows Communication Foundation( WCF),它利用 TCP、HTTP、MSMQ 等传输协议构建“契约先行”的服务。WCF 最初为基于 SOAP 的服务而设计,首先支持的是 WS-* 功能,但后来添加了少量迎合 REST 的功能。按照 Ido Flatow 在一篇 Code Project 文章中的描述,ASP.NET Web API 一开始也归在 WCF 框架旗下,但最终被移交到 ASP.NET 团队。

随着时间流逝,WCF Web API 为了让 WCF 适配到”原生”HTTP 世界,遇到了很多困难。因为 WCF 主要是为基于 SOAP 的 XML 消息设计的,为了让 Web API 成为 WCF 一部分,需要动的手术实在有点大(至少 Web API 的开发者们给了我这样的印象)。另一方面,ASP.NET MVC 的基础设施既能优雅地处理 HTTP 请求和响应,又能轻松创建各种控制器,好像是创建这种新类型服务的合适途径。

WCF 在最新的.NET 4.5 中依然健在,Flatow 给出了一些在 WCF 和 ASP.NET Web API 之间做出选择的标准。

  • 如果想让服务支持特殊场景,如单向消息传递、消息队列、双向通信等等,最好选择 WCF。
  • 如果想让服务优先使用快速传输通道,如 TCP、Named Pipes,甚至 UDP(在 WCF 4.5 中),然后在所有其他传输都不可用的时候支持 HTTP,那么最好选择 WCF,并且把 SOAP 和 WebHttp 两种绑定都用上。
  • 如果服务是建立在 HTTP 之上的面向资源的服务,需要发挥 HTTP 的全部功能,如 定义浏览器的缓存控制,用 ETags 做版本与并发,传送图像、文档、HTML 页面等多种类型的内容,在响应中用 URI 模板去包含 Task URIs,那么新的 Web API 是最好的选择。
  • 如果服务是多目标环境的,既可作为面向资源的服务走 HTTP 通道,又可作为 RPC 风格的 SOAP 服务走 TCP 通道——先跟我谈谈吧,我会给你一些指点。

ASP.NET Web API 已经包含在 Visual Studio 2012 中, Visual Studio 2010 用户可单独下载。需要上手指导的开发者可以在该团队的 Codeplex 网站上找到很多示例项目

查看英文原文: Microsoft Release New REST API Framework as Part of .NET 4.5


感谢郭晓刚对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012 年 9 月 25 日 23:099076

评论

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

LeetCode题解:24. 两两交换链表中的节点,迭代,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

计算机网络基础(十五)---传输层-TCP协议详解

书旅

计算机网络 网络 协议栈 协议族

联盟链有自己的路要走

Leonbond

区块链 联盟链 公有链

C/C++陷阱与套路,当年就是折在这些地儿…

华为云开发者社区

c++ 设计 编辑 程序 陷阱

learn go with tests 学习笔记(四)依赖注入

半亩房顶

golang golang新手

操作系统和并发的爱恨纠葛

cxuan

Java 并发

Google Protocol Buffer 学习笔记

半亩房顶

protobuf

人生修炼秘籍

xiaoboey

时间管理 人生修炼 知行合一 熵增 时间复利

ChaosBlade:从零开始的混沌工程(五)

郭旭东

Kubernetes 云原生 混沌工程

Netty之旅:你想要的NIO知识点,这里都有!

一枝花算不算浪漫

Netty nio

Java项目如何分层

老胡爱分享

分层架构 项目

企业网站搭建避坑指南

姜奋斗

网站 新手指南 企业 网站搭建 避坑

1.2 了解MyBatis -《SSM深入解析与项目实战》

谙忆

微服务架构下你的数据一致了吗?

码猿外

架构 微服务 数据一致性

视频会议专线部署不会?别急,我教你

华为云开发者社区

网络 网关 华为云 高清视频 welink

CDN百科10:快速上手阿里云DCDN全站加速,最新配置与购买优惠教程

巨侠说

CDN 直播 网页加速

InnoDB存储引擎简介

Simon

MySQL innodb

《SSM深入解析与项目实战》目录与说明

谙忆

2.1 类加载器、 双亲委派模型 -《SSM深入解析与项目实战》

谙忆

七的婚姻生活

徐说科技

SQL的三十而已—SQL30问

大唐小生

sql 技术人生

秒懂云通信:如何使用阿里云号码认证服务(小白指南)

巨侠说

云通信 通信云 号码认证

Web 开发必须掌握的三个技术:Token、Cookie、Session

华为云开发者社区

HTTP Token web开发 session Cookie

learn go with tests 学习笔记(二) 数组与切片

半亩房顶

golang golang新手

learn go with tests 学习笔记(三) 指针和错误

半亩房顶

golang golang新手

1.1 了解Spring框架 -《SSM深入解析与项目实战》

谙忆

JVM系列之:再谈java中的safepoint

程序那些事

Java JVM JIT safepoint

Jessie’s产品经理系列1-基础能力篇

架构5班杨娟Jessie

产品经理 能力模型

菊长说丨一文读懂MySQL4种事务隔离级别

华为云开发者社区

MySQL 数据库 事务隔离级别 事务 华为云

字符串匹配 - Sunday算法

半亩房顶

数据结构与算法 字符串匹配算法

learn go with tests 学习笔记(一) hello world

半亩房顶

golang golang新手

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

微软随.NET 4.5发布新REST API框架-InfoQ