API(Application Programming Interface)是一些预先第一的接口(如函数、HTTP接口),或指不同组成部分衔接的约定,用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问资源源码,或理解内部工作机制的细节。
接口(API)可以指访问Servlet,controller的url,调用其他程序的函数
http://localhost:8081/ys/student?id=1
在地址上提供了访问的资源名称student,在其后面使用了get方式传递参数
REST(Representational State Transfer)----表现层状态转移:是一种互联网软件架构设计的风格,并不是标准,只是提出了一组客户端和服务器交互时的架构理念和设计原则。优点:基于这样的理念和原则设计 的接口可以更简洁,更有层次。
表现层状态转移:表现层就是视图层,显示资源的,通过视图页面,jsp等等显示操作资源的结果
状态:资源发生变化
转移:资源可以发生变化。资源能创建,new状态,资源创建后可以查询资源,能看到资源的内容,这个资源的内容,可以被修改,修改后的资源和以前是不一样的。
REST中的要素:用REST表示资源和对资源的操作,在互联网中表示一个资源或者一个操作。资源使用url表示。
资源使用url表示,通过名词表示资源。
传统风格:http://localhost:8081/ys/student?id=1
RESTful:http://localhost:8081/ys/student/1----使用“/”对资源进行分隔
使用http中的动作(请求方式),表示对资源的操作(CURD):
GET:查询资源----sql select
http://localhost:8081/ys/student/1----单个查询单参数查询
http://localhost:8081/ys/student/1/1002----单个查询多参数查询(参数顺序按照函数方法的传参顺序排列)
http://localhost:8081/ys/students/1/2----多个查询单参数查询
POST:创建资源----sql insert
http://localhost:8081/ys/student/2----单参数创建
在post请求中传递数据
注意:创建或者查询资源的本质区别在于调用的函数不同,即student的功能不同
PUT:更新资源----sql update (使用post模拟)
DELETE:删除资源----sql delete
删除数据
注意:浏览器目前只直接支持GET和POST
当需要分页,排序等参数时,放在url的后面
例如:http://localhost:8081/ys/students?page=1&pageSize=20
一句话说明REST:使用url表示资源,使用http动作操作资源。
获取url中的数据
package com.ys.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyRestController {
// 学习注解的使用
/**
* @PathVariable(路径变量):获取url的数据
* 属性:value:自定义变量
* 位置:放在控制器方法的形参前
*
* {stuId}:定义路径变量 自定义名称
* */
@GetMapping("/queryStudent/{stuId}")
public String queryStudent(@PathVariable(value = "stuId")Integer studentId){
return "获取的url数据:"+studentId;
}
}
接受和处理Post方式请求,等同于@RequestMapping(method=RequestMethod.POST)
package com.ys.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyRestController {
// 学习注解的使用
/**
* @PathVariable(路径变量):获取url的数据
* 属性:value:自定义变量
* 位置:放在控制器方法的形参前
*
* {stuId}:定义路径变量 自定义名称,和 @PathVariable的value中的自定义变量名相同进行传参
* */
@PostMapping("/createStudent/{name}/{age}")
public String createStudent(@PathVariable(value = "name")String name,
@PathVariable(value = "age")Integer age){
return "我叫"+name+"今年"+age;
}
}
在static目录创建html文件addStudent
Title
添加学生
接受和处理get方式请求,等同于@RequestMapping(method=RequestMethod.GET)
package com.ys.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyRestController {
// 学习注解的使用
/**
* @PathVariable(路径变量):获取url的数据
* 属性:value:自定义变量
* 位置:放在控制器方法的形参前
*
* {stuId}:定义路径变量 自定义名称
* */
@GetMapping("/queryStudent/{stuId}")
public String queryStudent(@PathVariable(value = "stuId")Integer studentId){
return "获取的url数据:"+studentId;
}
}
复合注解是@Controller和@ResponseBody组合,使用在类上,表示当前类中的所有方法都加入了@ResponseBody,并把类交给Spring容器。
package com.ys.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class MyRestController {
}
Postman工具,测试各种请求方式的页面。避免写表单测试,因为浏览器不直接支持put和delete请求方式,所有可以使用postman工具进行测试。
使用SpringMVC中一个自带的过滤器,支持post转化为delete和put请求,从而可以直接在浏览器上显示,在配置文件中启用该过滤器
#使浏览器支持put和delete请求方式
spring.mvc.hiddenmethod.filter.enabled=true
接受delete方式请求,可以使用@GetMapping代替,等同于@RequestMapping(method=RequestMethod.DELETE)
/**
* 删除资源 delete请求方式
* */
@DeleteMapping("/removeStudent/{id}")
public String removeStudent(@PathVariable Integer id){
return "删除的编号是"+id;
}
Title
删除学生
接受put方式的请求,可以使用@PostMapping代替,等同于@RequestMapping(method=RequestMethod.PUT)
/**
* 更新资源 put请求方式
* 使用@PathVariable时,当url中的变量名与方法中的变量名相同时,@PathVariable的value可以省略
* */
@PutMapping("/modifyStudent/{id}/{age}")
public String modifyStudent(@PathVariable Integer id,
@PathVariable Integer age){
return "我的编号是"+id+" 我的年龄是"+age;
}
Title
更新学生