RESTful的一些总结

来源:互联网 发布:one软件 编辑:程序博客网 时间:2024/06/16 05:16

RESTful Web Service

REST是什么

这里写图片描述

RESTful是什么

这里写图片描述

REST 架构的主要原则

这里写图片描述

补充:URI和URL

这里写图片描述

一切皆为资源

在 REST 的定义中,一个 Web 应用总是使用固定的 URI 向外部世界呈现一个资源。
它认为Web是由一系列的抽象资源组成,这些抽象的资源具有不同的具体表现形式。
譬如,定义一个资源为photo,含义是照片,它的表现形式可以是一个图片,也可以是一个.xml的文件,其中包含一些描述该照片的元素,或是一个html文件。

REST接口定义

这里写图片描述

资源操作

这里写图片描述

我们在 Web 应用中处理来自客户端的请求时,通常只考虑 GET 和 POST 这两种 HTTP 请求方法。实际上,HTTP 还有 HEAD、PUT、DELETE 等请求方法。而在 REST 架构中,用不同的 HTTP 请求方法来处理对资源的 CRUD(创建、读取、更新和删除)操作:

若要在服务器上创建资源,应该使用 POST 方法。 若要检索某个资源,应该使用 GET 方法。 若要更改资源状态或对其进行更新,应该使用 PUT 方法。 若要删除某个资源,应该使用 DELETE 方法。

经过这样的一番扩展,我们对一个资源的 CRUD 操作就可以通过同一个 URI 完成了:

读取) [GET] http://www.example.com/photo/logo
仍然保持为 [GET] http://www.example.com/photo/logo

(创建)http://www.example.com/photo/logo/create
改为 [POST] http://www.example.com/photo/logo

(更新)http://www.example.com/photo/logo/update
改为 [PUT] http://www.example.com/photo/logo

(删除)http://www.example.com/photo/logo/delete
改为 [DELETE] http://www.example.com/photo/logo

从而进一步规范了资源标识的使用。

通过 REST 架构,Web 应用程序可以用一致的接口(URI)暴露资源给外部世界,并对资源提供语义一致的操作服务。这对于以资源为中心的 Web 应用来说非常重要。

无状态性

这里写图片描述

最佳实践

REST接口设计

这里写图片描述

响应设计

这里写图片描述

响应示例

这里写图片描述

指定响应的属性字段

这里写图片描述

补充:http响应状态码

这里写图片描述

SpringMVC实现RESTful服务

这里写图片描述

查询资源示例

这里写图片描述

新增资源示例

这里写图片描述

更新资源示例

这里写图片描述
默认情况下,PUT请求是无法提交表单数据的,需要在web.xml中添加过滤器解决:

    <!-- 解决PUT请求无法提交表单数据的问题 -->    <filter>        <filter-name>HttpMethodFilter</filter-name>        <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>HttpMethodFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

删除资源示例

这里写图片描述

需要在web.xml中添加过滤器解决DELETE请求无法提交表单数据的问题:

    <!--         将POST请求转化为DELETE或者是PUT        要用_method指定真正的请求参数     -->    <filter>        <filter-name>HiddenHttpMethodFilter</filter-name>        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>HiddenHttpMethodFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>