全栈工程师之Restful与Spring Boot详解

来源:互联网 发布:见微数据 搜披露 编辑:程序博客网 时间:2024/06/07 22:53

上一篇文章App前端,Web前端,后端,微信小程序到底该学啥?”发表之后有部分同学反馈自己要么从事前端,要么后端,对前后端之间如何交互比较感兴趣,这篇文章就给大家介绍一下后台与客户端是如何交互的。

客户端与服务器的交互一般遵循以下原则:跨平台、传输数据格式标准、安全可靠。目前绝大多数的App都有android和iOS两个版本,因此同样的数据,不同平台的客户端请求,返回的结果应该一致。客户端与server之间通信无非就两种协议HTTP和TCP,然后根据这两类衍生出其他的通信方式。TCP的典型场景是server与客户端需要保持长连接,二者进行三次握手之后建立连接,有一方断开,该次连接结束。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。大部分的客户端和server通信采用的是这种方式,随着HTTPS的普及,安全性也越来越受到重视,后续我们会写一篇HTTPS建立连接的过程。在网络请求调试的过程中,需要经常抓包分析报文是否正确,在这儿推荐Wireshark抓包软件,在mac上很好用,当然也有其他工具,建议大家做网络请求试着研究一下报文,对网络通信能有更深的理解。

一、Restful框架

Restful架构,是目前最流行的一种客户端与服务器交互的架构。REST这个词,最早是Roy Thomas Fielding在博士论文中提出的。

REST是Representational State Transfer 的缩写,顾名思义“表现层状态转化"。网上有很多关于这个词语的详细解释,通俗的讲:

1)每一个URI代表一种资源;

2)客户端和服务器之间,传递这种资源的某种表现层;

3)客户端通过HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

Restful无状态,在调用一个接口的时候,不需要考虑上下文与当前状态,极大的降低了复杂度,分离了API结构和逻辑资源。采用REST架构风格,对于开发、测试、运维人员来说,都会更简单。当然缺点也是有的,这里不在详细阐述。在我们的项目中,使用REST风格完成客户端和服务器json数据的交互。

二、构造Restful

我们的服务器端Restful框架通过Spring Boot搭建。Spring Boot也是这两年很火的微框架,按照官方的说法,SpringBoot使开发独立的,产品级别的基于Spring的应用变得非常简单,为所有的Spring开发提供一个从根本上更快的和广泛使用的入门经验。开箱即用,但你可以通过不采用默认设置来摆脱这种方式。提供一系列大型项目常用的非功能性特征(比如,内嵌服务器,安全,指标,健康检测,外部化配置)。最重要的是不需要代码生成及XML配置,省了很多时间和精力。

接下来我们来创建基于Spring Boot的Restful风格的demo。首先需要准备好环境,安装JDK和MyEclipse。

全栈工程师之Restful与Spring Boot详解

我的MyEclipse版本如上图,安装好之后自带了maven,如果对maven不了解,请搜索相关资料,了解它的使用方法。

(1)MyEclipse->File->New->Other,选择Maven Project,创建demo工程。

全栈工程师之Restful与Spring Boot详解

全栈工程师之Restful与Spring Boot详解

创建完工程后,在我们的目录下会看到pom.xml文件,该文件用于maven构建项目,我们打开后编辑此文件,添加如下内容:

全栈工程师之Restful与Spring Boot详解

全栈工程师之Restful与Spring Boot详解

然后保存,并右键选择项目->Maven4MyEclipse->Update Project,加载依赖,完成后目录结构如下:

全栈工程师之Restful与Spring Boot详解

这样,我们的maven web项目就支持了spring boot。

三、基于Spring Boot的Demo

1.首先在配置好Spring Boot依赖的工程中,新建一个java类,如下,命名为RestfulDemo:

全栈工程师之Restful与Spring Boot详解

工程目录

全栈工程师之Restful与Spring Boot详解

RestfulDemo类

2.接下来重点讲解这个类中的每个细节。

(1)@RestController和@RequestMapping注解

RestfulDemo类的上面使用的第一个注解是@RestController,它通常被称为一个构造型(stereotype)注解。RestController本身不是Spring Boot特有的,它继承自@Controller注解。Controller用来标识当前类是一个控制器servlet。在本示例中,我们的类是一个web @Controller,所以当处理进来的web请求时,Spring会询问它。RestController相当于@ResponseBody + @Controller。ResponseBody用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区,当返回的数据是json、xml等时使用。

(2)@RequestMapping注解

RequestMapping注解主要用来提供路由信息,它告诉Spring任何来自"/"路径的HTTP请求都应该被映射到home方法。RequestMapping注解有六个属性,下面我们把她分成三类进行说明。

1) value, method

value: 指定请求的实际地址;

method:指定请求的method类型, GET、POST、PUT、DELETE等;

2) consumes,produces

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3) params,headers

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

(3)@EnableAutoConfiguration注解

EnableAutoConfiguration是SpringBoot根据我们在pom中设置的依赖自动配置spring。由于spring-boot-starter-web添加了Tomcat和SpringMVC,所以auto-configuration默认我们在开发一个web应用并相应地对Spring进行设置,当然我们也可以手动配置。

(4)SpringApplication类

在main方法通过调用SpringApplication类的run,将业务委托给了Spring Boot,启动Spring,相应地启动被自动配置的Tomcat web服务器。

3.应用程序的运行

Spring Boot的运行有几种方式,在这里我介绍两种。

(1)MyEclipse启动

右键单击RestfulDemo类->Run As->Java Application

右键单击RestfulDemo类->Run As->Java Application

启动完成

如果看到图中红色的提示语,说明项目正常启动,此时在浏览器输入http://localhost:8080/,就能看到“Hello World!”的输出。

(2)使用maven命令行启动

当前我们的pc如果配置了maven,也可以在命令行下启动。由于使用了spring-boot-starter-parent的依赖,这样我们就有了一个非常有用的run目标。命令行进入到工程根目录,输入

mvn spring-boot:run来启动应用:

全栈工程师之Restful与Spring Boot详解


全栈工程师之Restful与Spring Boot详解

maven会下载一些依赖,初始化组件,最终也会打印出Tomcat启动成功的信息。

至此,Spring Boot的Hello World应用完美启动,Restful的实现类似我们的demo,由于篇幅过长,将在后续章节详细介绍。

如果您喜欢我们的文章,点赞就好,您的认可是我分享的最大动力。

0 0