Web Api详解

2,053 阅读10分钟

1.Web API

什么是 Web API

官方定义如下,强调两个关键点,即可以对接各种客户端(浏览器,移动设备),构建http服务的框架。

ASP.NET Web API is a framework that makes it easy to build HTTP services that reach a broad range of clients, including browsers and mobile devices. ASP.NET Web API is an ideal platform for building RESTful applications on the .NET Framework.

Web API在ASP.NET完整框架中地位如下图,与SignalR一起同为构建Service的框架。Web API负责构建http常规服务,而SingalR主要负责的是构建实时服务,例如股票,聊天室,在线游戏等实时性要求比较高的服务。

为什么要用 Web API

Web API最重要的是可以构建面向各种客户端的服务。另外与WCF REST Service不同在于,Web API利用Http协议的各个方面来表达服务(例如 URI/request response header/caching/versioning/content format),因此就省掉很多配置。

当你遇到以下这些情况的时候,就可以考虑使用Web API了。

  • 需要Web Service但是不需要SOAP
  • 需要在已有的WCF服务基础上建立non-soap-based http服务
  • 只想发布一些简单的Http服务,不想使用相对复杂的WCF配置
  • 发布的服务可能会被带宽受限的设备访问
  • 希望使用开源框架,关键时候可以自己调试或者自定义一下框架

功能简介

Web API的主要功能

\1. 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作

通过不同的http动作表达不同的含义,这样就不需要暴露多个API来支持这些基本操作。

\2. 请求的回复通过Http Status Code表达不同含义,并且客户端可以通过Accept header来与服务器协商格式,例如你希望服务器返回JSON格式还是XML格式。

\3. 请求的回复格式支持 JSON,XML,并且可以扩展添加其他格式。

\4. 原生支持OData

\5. 支持Self-host或者IIS host。

\6. 支持大多数MVC功能,例如Routing/Controller/Action Result/Filter/Model Builder/IOC Container/Dependency Injection。

Web API vs MVC

你可能会觉得Web API 与MVC很类似,他们有哪些不同之处呢?先上图,这就是他们最大的不同之处。

详细点说他们的区别,

  • MVC主要用来构建网站,既关心数据也关心页面展示,而Web API只关注数据
  • Web API支持格式协商,客户端可以通过Accept header通知服务器期望的格式
  • Web API支持Self Host,MVC目前不支持
  • Web API通过不同的http verb表达不同的动作(CRUD),MVC则通过Action名字表达动作
  • Web API内建于ASP.NET System.Web.Http命名空间下,MVC位于System.Web.Mvc命名空间下,因此model binding/filter/routing等功能有所不同
  • 最后,Web API非常适合构建移动客户端服务

Web API vs WCF

发布服务在Web API和WCF之间该如何取舍呢?这里提供些简单地判断规则,

  • 如果服务需要支持One Way Messaging/Message Queue/Duplex Communication,选择WCF
  • 如果服务需要在TCP/Named Pipes/UDP (wcf 4.5),选择WCF
  • 如果服务需要在http协议上,并且希望利用http协议的各种功能,选择Web API
  • 如果服务需要被各种客户端(特别是移动客户端)调用,选择Web API

2.WCF

1.什么是WCF

Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet收发客户和服务之间的消息。WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。WCF专门用于面向服务开发。

2.为什么要用WCF

WCF主要是解决分布式问题,如果业务以后需要公开,让别人调用这个业务,那么就用WCF。如果程序会有b/s版本和c/s版本,那么就用WCF。WCF一般主要数据库访问层和业务层,再加WCF对外公开的接口。WCF是一种通讯机制,解决的是通讯和可分布式部署

3. 功能简介

在基于Asp.net 的应用程序开发中,我们由客户机的浏览器访问应用程序服务器,

然后通过应用程序服务器中的数据库连接去连接数据库服务器,读取或是操作数据,

有时候可能会多一个文件服务器。大家可以观察到,基本上所有的应用都放在了一台服务器上,

但对于一个,由于业务上的需要(如:与外部系统交互),一台服务器很难支持所有的应用。我们再看下面的图:

客户机访问服务器A,而服务器A并不能解决所有的应用,而在其它的各个服务器上可以实现其它各种应用,

所以将A与其它服务器相连。而如何实现这些服务器互相通信的问题,便叫做WCF技术

WCF介绍

4.WCF优点

统一性

WCF是对于ASMX,[.Net Remoting](https://baike.baidu.com/item/.Net Remoting),Enterprise Service,WSEMSMQ等技术的整合。

由于WCF完全是由托管代码编写,因此开发WCF的应用程序与开发其它的.Net应用程序没有太大的区别,

我们仍然可以像创建面向对象的应用程序那样,利用WCF来创建面向服务的应用程序。

互操作性

由于WCF最基本的通信机制是SOAP(Simple Object Access Protocol 简易对象访问协议),

这就保证了系统之间的互操作性,即使是运行不同的上下文中。这种通信可以是基于.Net到.Net间的通信

**安全与可信赖 **

在SOAP 的header中增加了WS-ReliableMessaging允许可信赖的端对端通信。而建立在WS-Coordination

和WS- AtomicTransaction之上的基于SOAP格式交换的信息,则支持两阶段的事务提交(two-phase commit transactions

兼容性

WCF充分的考虑到了与旧有系统的兼容性。安装WCF并不会影响原有的技术如ASMX和.Net Remoting。

即使对于WCF和ASMX而言,虽然两者都使用了SOAP,但基于WCF开发的应用程序,仍然可以直接与ASMX进行交互。

5.Web Service和WCF的区别

什么是Web Service

Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术。

​ 它有一套完成的规范体系标准,而且在持续不断的更新完善中。

​ 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。微软的Web服务实现称为

ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。

WSDL来实现服务接口相关的描述。此外Web services 可以注册到UDDI中心.供其客户查找使用。

后来微软做了ASP.NET Web Service的安全,性能,数据加密、解密,托管宿主等多方面的扩展,

称为WSE系列,这个是过度产品,最高到WSE3.0.后来就是WCF时代。

区别

Web Service太旧了:框架都版本的差异,功能特性上却是有新旧之分,但是对于特定的系统,

适合自己的就是最好的。 Web Service 就是 ASP.NET Web Service:同样不是一个范畴。前者规范,

后者是框架 WCF比Web Service性能好:不是一个范畴, WCF 比 ASP.NET Web Service快:不一定,

需要特定的限制条件,WCF使用BasicHttpBinding的时候与ASP.NET Web Service协议一样。

WCF比Web Service速度快:同样概念不严格。 WCF比Web Service强大:WCF却是集成了多种微软的分布式技

术,但是这里应该严格说是:ASP.NET Web Service WCF比 Web Service安全:不严格。

其次WCF也可以开发完全裸奔的应用程序。 Web Service必将被WCF取代;Web Service不会被WCF取代!

前者是一套广泛使用的规范。如果说WCF能取代的是ASP.NET Web Service,因为二者都是.NET平台上的技术。

WCF其实就是Web Service:WCF在某些情况下不遵守 Web服务规范,也就是可以开发非服务性质的应用。

而且不能简单等同。 WCF非常简单,其实没有什么:WCF虽然是个服务开发框架,但是如果你深入学习,

会发现WCF架构的强大之处。单单是WCF安全这一块已经相当的复杂了。况且还要统一编程模型,

兼容和支持许多早期的分布式技术

3. C#和.NET和ASP.NET三者之间的区别

一.什么是.NET

.NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(.NET框架)是.NET程序开发和运行的环境,

在这个平台下可以用不同的语言进行开发,因为.NET是跨语言的一个平台。语言可以是C#,f#,j#,vb.net等等。

JAVA和.NET不同的一点是java是跨平台的,不跨语言的。.NET跨平台仅限于安卓系统和IOS苹果系统。

1.net框架的组成分为两部分:CLR:公共语言运行时(Common Language Runtime),提供内在管理,代码安全性检测等功能。             FLC:.NET框架类库(.NET Framework Class Library),提供大量应用类库,类库中有很多线程的资源可使用(比如:类,方法,属性),提高开效率。

2.CLR的结构:CLS:公共语言规范,获取各种语言转换成统一的语法规范。        CTS:通用类型系统,将各种语言中的数据类型转换成统一的类型        JIT:实时编译器(即时编译器)用于将转换之后的语言编译为二进制语言,交给CPU执行。

3 .NET运行的机制流程 各种语言(c#,F#,j#等对应的源程序)——>经过CLS,CTS第一次编译——>统一规范语言(中间语言)MSIL(.EXE,.DLL)——>JIT第二次编译——>二进制语言——>运行在CPU中

java的运行机制: java——>编译——>字节码文件(.CLASS)——>jvm解释(jvm虚拟机)——>二进制语言——>运行在CPU中

二、什么是C#?

C#是一个.NET平台下的一个程序设计语言,仅仅是一个语言。是运行在.net CLR上的,用于创建应用程序的高级语言。 程序设计语言是为了方便开发人员和计算机沟通的工具。

三、什么是ASP.NET?

ASP.NET是一个网站开发的技术,是.NET框架中的一个应用模型,用于生成基于Web的应用程序的内容丰富的编程框架。使用ASP.NET开发Web应用程序并维持其运行,比其他开发语言更加简单。与Java、PHP和Perl等高级技术相比,ASP.NET具有方便性、灵活性、生产效率高、安全性高及面向对象等优点,是目前主流的网络编程技术之一。

四,具体关系

.net 分成两个方面 一个是WinForm(基于Windows窗体,C/S模式),一个是WebForm(ASP.net基于Web页面,即B/S模式的开发) .net有很多种语言组成,比如C# C++.net J# VB.Net 但是都是运行在.net FrameWork Run Time底下的。就像Java离不开JavaVM(JAVA虚拟机)一样。

而Asp.Net 可以用C#或VB.Net来开发。编译后形成CLR(中间语言),然后通过服务器的IIS+.Net FrameWork再次编译来运行。