一、什么是Restful风格?
1、基本定义
restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 ——百度百科
REST全程是Representational State Transfer,即表征性状态转移,REST本身并没有创造出新的技术、组件或者服务,其背后的主要理念
就是使用Web现有的特征和能力,更好的使用现有的Web标准中的一些准则和约束。
通俗的理解,区别与我们传统的开发中Web请求的方式get/post,然后用我们自己定义的方法来表示不不同的操作。Restful风格是用了HTTP所特有的方法来处理所有的对象,执行CRUD等相关的操作。HTTP中主要的方法有PUT、DELETE、GET、POST、HEAD等等
2、进一步理解
1)资源与URI(统一资源标识符)
任何事物,都可以作为资源被引用。如一个实例、一个抽象的概念等,并且每一个资源可以通过URI唯一标识。
2)统一资源接口
REST遵循统一的接口原则,使用相同的接口对资源进行访问。如HTTP的接口get、post、put等
3)资源的表述
资源的表述包括数据和描述数据的元数据。资源的表现形式可以有多种,在客户端与服务端之间传递的是数据的表述,而不是资源本身,例如文本可以用HTML、TXT、JSON等形式来表示。
4)资源的链接
在不同的资源之间,应该阔以相互连接(根据实际需要)
5)状态转移
REST原则中无状态通信是指服务端不应该保存客户端的状态。客户端应用状态在服务端提供的超媒体的指引下发生变迁,服务端通过超媒体通知客户端当前的状态,进入下一个可能的状态,
二、实例操作
基本环境:JDK8、创建一个Spring Boot项目即可
目标:采用RESTful风格的API来涉及实现一个简单的请求,后台向前台返回一个JSON格式的数据。
1、创建一个model模型,直接上代码,需要注意的地方注释中给出(对象中的变量不能生成set方法)
package com.dzg.domain;
public class Greeting {
private final long id;//final值没有对应的set方法,直接通过构造函数初始化
private final String content;
public long getId() {
return id;
}
public String getName() {
return content;
}
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
}
2、在控制器中创建控制器,处理前端请求
package com.dzg.controller;
import com.dzg.domain.Greeting;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.atomic.AtomicLong;
@RestController
public class GreetingController {
private static final String template = "Hello,%s";
private final AtomicLong counter = new AtomicLong();//可以自动更行值得数据类型,不能用Long替代
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name",defaultValue = "World")String name){
//请求中得参数若没有name值,则默认为World,否则更新为name传过来的新值
return new Greeting(counter.incrementAndGet(),
String.format(template,name));//返回为JSON格式
}
}
3、运行项目,验证
创建项目时会自动生成启动main函数
@SpringBootApplication
public class SpringRestfulServiceApplication {
public static void main(String[] args) {
SpringApplication.run(SpringRestfulServiceApplication.class, args);
}
}
运行解释:
其中@SpringBootApplication注释等价于(在项目中点进去,可查看原码)
@Configuration//将class标记为应用上下文中的bean定义的一种资源
@EnableAutoConfiguration //通知Spring Boot基于路径设置添加相应的bean资源,以及各种属性设置
@ComponentScan( //通知spring在程序包中查找其他的组件、配置和服务,使其找到控制器
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
推荐阅读文章:SpringBoot & Restful API 构建示例 https://mp.weixin.qq.com/s/XQURTg5we4RqmDzYzouURA