资源标识符:每个资源都有各自的标识符。客户端在请求时需要指定该标识符。在 REST 服务中,该标识符通常是 URI。客户端所获取的是资源的表达(representation),通常使用 XML 或 JSON 格式。
通过资源的表达来操纵资源:客户端根据所得到的资源的表达中包含的信息来了解如何操纵资源,比如对资源进行修改或删除。
自描述的消息:每条消息都包含足够的信息来描述如何处理该消息。
超媒体作为应用状态的引擎(HATEOAS):客户端通过服务器提供的超媒体内容中动态提供的动作来进行状态转换。
3.3 REST成熟度模型Richardson 提出的 REST 成熟度模型。该模型把 REST 服务按照成熟度划分成 4 个层次,我们常用到的就是Level1和Level2,如下图所:
具体说明如下:
Level 0:Web 服务只是使用 HTTP 作为传输方式,实际上只是远程方法调用(RPC)的一种具体形式。SOAP 和 XML-RPC 都属于此类。
Level 1:Web 服务引入了资源的概念。每个资源有对应的标识符和表达。
Level 2:Web 服务使用不同的 HTTP 方法来进行不同的操作,并且使用 HTTP 状态码来表示不同的结果。如 HTTP GET 方法来获取资源,HTTP DELETE 方法来删除资源。
Level 3:Web 服务使用 HATEOAS。在资源的表达中包含了链接信息。客户端可以根据链接来发现可以执行的动作。例如,客户端通过订单资源中包含的链接取消某一订单,GET 请求被发送去获取该订单。HATEOAS 的优点包括无需在客户端代码中写入硬链接的 URL。此外,由于资源信息中包含可允许操作的链接,客户端无需猜测在资源的当前状态下执行何种操作。
3.4 RESTfulRESTful是一种常见的REST应用,是遵循REST风格的web服务,REST式的web服务是一种ROA(面向资源的架构)。
RESTful资源操作如下表:
http方法 资源操作 幂等 安全GET SELECT 是 是
POST INSERT 否 否
PUT UPDATE 是 否
DELETE DELETE 是 否
注:幂等性:对同一REST接口的多次访问,得到的资源状态是相同的;安全性:对该REST接口访问,不会使服务器端资源的状态发生改变。
RESTful URL请求格式与传统请求格式比较如下表所示:
传统URL请求格式 RESTFul请求格式 描述http:/localhost/user/query/1 GET http:/localhost/user/1 GET 根据用户id查询用户数据
http:/localhost/user/save POST http:/localhost/user POST 新增用户
http:/localhost/user/update POST http:/localhost/user PUT 修改用户信息
http:/localhost/user/delete GET/POST http:/localhost/user DELETE 删除用户信息
4.Web API路由
路由的目的是用于解析请求的URL来确定Controller和Action。Web API默认路由是通过http的方法(get/post/put/delete)去匹配对应的action,也就是说webapi的默认路由并不需要指定action的名称,当然,WebApi也支持MVC里面的路由机制,但RestFul风格的服务要求请求的url里面不能包含action,所以,在WebApi里面是并不提倡使用MVC路由机制的。下边通过例子介绍Web API路由原理以及使用。
4.1新建空的Web API应用程序上篇博客介绍了手动搭建基本框架,这次我们通过VS2017提供的模板,新建空的WebAPI应用程序MyWebAPI2,构建过程中仅勾选Web API,如下图所示。