Web API知识

一、什么是Web API

这里的web API主要特指ASP.NET Web API。 ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务。ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。

两个关键点:

  • 1、对接各种客户端(浏览器,移动设备)
  • 2、构建http服务

Web API与SignalR共同构成Service的框架。Web API负责构建http常规服务,而SingalR主要负责的是构建实时服务,例如股票,聊天室,在线游戏等实时性要求比较高的服务。

二、.NET下构建HTTP服务的方式

在.NET平台下,常用的构建HTTP服务的技术主要有: Web service、WCF、WCF REST、Web API。

下面从数据格式、支持的协议、是否可自定义扩展、部署方式等对比下各技术的差异:

支持的数据格式 支持的协议 是否可自定义扩展 部署方式
Web Service xml Soap、Http IIS
WCF xml 基于soap,支持TCP、HTTP、HTTPS、Named Pipes、MSMQ IIS、Self-Host
WCF REST XML、JSON以及ATOM Http(采用webHttpBinding) IIS、Self-Host
Web API xml、json http IIS、Self-Host
MVC xml、json http IIS

三、Web API的主要功能

1、REST
REST是“REpresentational State Transfer”的缩写,可以翻译成“表现状态转换”.

REST是一种软件架构风格,与技术无关,但是大部分基于REST风格的Web服务都是基于HTTP的。
2、SOAP和REST的区别
SOAP Web API采用RPC(面向方法Remote Procedure Call)风格,它采用面向功能的架 构,所以在设计之初首先需要考虑的是提供怎样的功能。

RESTful Web API采用ROA(面向资源Resouce Oriented Architecture)架构,所以在设计之初首先需要考虑的是有哪些资源可供操作。

3、HTTP协议
HTTP采用简单的请求/响应模式的消息交换旨在实现针对某个Web资源的某种操作。至于针对资源的操作类型,不外乎CRUD(Create、Retrieve、Update和Delete)而已。一个HTTP请求除了利用URI标志目标资源之外,还需要通过HTTP方法指名针对资源的操作类型。HTTP方法:包括GET(查)、POST(增)、PUT(改)、DELETE(删)、HEAD、OPTIONS、TRACE、CONNECTION和PATCH等

Web API的主要功能:

  • 1、这是一个简单的构建HTTP服务的新框架,在.NET平台上Web API 是一个开源的、理想的、构建REST-ful 服务的技术,这是一个轻量级的框架,并且对限制带宽的设备,对移动设备也支持的很好。

  • 2、 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作,通过不同的http动作表达不同的含义,可以使用HTTP的全部特点(比如URIs、request/response头,缓存,版本控制,多种内容格式)

  • 3、 请求的回复通过Http Status Code表达不同含义,并且客户端可以通过Accept header来与服务器协商格式,返回JSON格式还是XML格式。

  • 4、请求的回复格式支持 JSON,XML,并且可以扩展添加其他格式。
  • 5、 原生支持OData。
  • 6、支持Self-host或者IIS host。
  • 7、支持大多数MVC功能,像路由、控制器、action、filter、模型绑定、控制反转(IOC)或依赖注入(DI),单元测试

四、Web API与ASP.NET MVC的对比

Web API与MVC的主要区别:

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

五、Web Api的使用场景

从上图中可以看出,Web API可以构建面向各种客户端的服务。 下面是一些使用Web API的常见场景:

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

六、Web安全

常见的Web安全隐患:

  • 1、 注入(Injection)
  • 2、 无效认证和Session管理方式(Broken Authentication and Session Management)
  • 3、 跨站脚本(Cross-Site Scripting (XSS))
  • 4、 直接引用非安全对象(Insecure Direct Object References)
  • 5、错误的安全配置(Security Misconfiguration)
  • 6、 暴露敏感数据(Sensitive Data Exposure)
  • 7、 功能级权限控制缺失(Missing Function Level Access Control)
  • 8、伪造跨站请求(Cross-Site Request Forgery)
  • 9、 使用已知安全隐患组件(Using Components with Known Vulnerabilities)
  • 10、 未验证跳转(Unvalidated Redirects and Forwards)

围绕着Web Api安全,在不同的层次上有不同的防护措施,例如:

七、Web API的安全机制

1、认证与授权
认证: Web API的认证取决于宿主环境配置的认证方式,假如host在IIS,那么在IIS相应的网站上的认证配置或自定义的认证 模块会同样作用域Web API。 IIS/ASP.NET认证(Basic认证、Digest认证、集成Windows认证)、Form认证

局限: 3种认证方案最终都是利用Windows认证来确认访问者的真实身份,局限于应用于通过AD构建的局域网环境,对于部署于互联网环境的web应用来说,需要自行维护用户的账号和密码并实施认证

授权: 在不同级别使用AuthotizeAttribute来控制不同级别的授权访问
1、全局所有的Controller级别
2、Controller级别
3、个别Action
4、个别用户或者用户组

Richard Qiu

Life is a gift ! I love waking up in the moring and not konowing what's going to hanppen,or who I'm going to meeting,where I'm going to wind up. so, keep optimistic and enjoy life!

Shanghai