接口: API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
接口(API): 可以指访问 servlet, controller 的 url, 调用其他程序的 函数
架构风格: api组织方式
就是一个传统的:
http://localhost:9002/mytrans/addStudent?name=lisi&age=26
在地址上提供了 访问的资源名称addStudent, 在其后使用了get方式传递参数。
REST :(英文:Representational State Transfer , 中文:表现层状态转移)。
REST:是一种接口的架构风格和设计的理念,不是标准。
优点: 更简洁,更有层次
表现层状态转移: 表现层就是视图层, 显示资源的, 通过视图页面,jsp等等显示操作资源的结果。
状态: 资源变化
转移: 资源可以变化的。 资源能创建,new状态, 资源创建后可以查询资源, 能看到资源的内容,
这个资源内容 ,可以被修改, 修改后资源 和之前的不一样。
Spring Boot 开发 RESTful 主要是几个注解实现
@PathVariable:获取 url 中的数据。
该注解是实现 RESTful 最主要的一个注解
@GetMapping:接收 get 方式的请求,等同于 @RequestMapping( method=RequestMethod.GET)。
@PostMapping :接收和处理 Post 方式的请求,等同于 @RequestMapping( method=RequestMethod.POST)。
@PutMapping:接收 put 方式的请求,可以用 PostMapping 代替,等同于 @RequestMapping( method=RequestMethod.PUT)。
@DeleteMapping:接收 delete 方式的请求,可以使用 GetMapping 代替,等同于 @RequestMapping( method=RequestMethod.DELETE)。
@RestController: 符合注解, 是@Controller 和@ResponseBody组合。
在类的上面使用@RestController , 表示当前类者的所有方法都加入了 @ResponseBody
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
server.port=9001
server.servlet.context-path=/
package co.suyv.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class MyRestController {
/**
* rest 中, url 要使用占位符,表示传递的数据。
* 占位符叫做路径变量, 在 url 中的数据
*
* 格式: 在@RequestMapping 的 value 属性值中,使用 {自定义名称}
* http://localhost:8080/myboot/student/1001/bj2009
*
* @PathVariable: 路径变量注解,作用是获取 url 中的路径变量的值
* 属性: value : 路径变量名称
* 位置: 在逐个接收参数中,在形参定义的前面
*
* 注意:路径变量名和形参名一样, value 可以不写
*
*/
// 查询id=1001的学生
@GetMapping("/student/{studentId}")
public String queryStudent(@PathVariable(value = "studentId") Integer id){
return "查询学生 studentId:" + id;
}
// 增加学生
@PostMapping("/student/{name}/{age}")
public String creatStudent(@PathVariable("name") String name,
@PathVariable("age") Integer age){
return "创建student:姓名:"+ name + ",年龄:" +age;
}
// 修改学生
@PutMapping("/student/{id}/{age}")
public String modifyStudent(@PathVariable Integer id,
@PathVariable Integer age){
return "修改student:id="+ "id" + ",age=" + age;
}
// 删除学生
@DeleteMapping("/student/{id}")
public String removeStudentById(@PathVariable Integer id){
return "删除student:id=" + id;
}
}
1.轻量,直接基于 http,不再需要任何别的诸如消息协议:get/post/put/delete 为 CRUD 操作
2.面向资源,一目了然,具有自解释性。
3.数据描述简单,一般以 xml,json 做数据交换。
4.无状态,在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。
5. 简单、低耦合
@GetMapping(value = "/student/{studentId}/{classname}")
@GetMapping(value = "/student/{studentId}/{schoolname}")
这样的路径访问会失败, 路径有冲突。
解决:设计路径,必须唯一, 路径 uri 和 请求方式必须唯一。
1.增 post 请求、删 delete 请求、改 put 请求、查 get 请求
2.请求路径不要出现动词 例如:查询订单接口
/boot/order/1021/1(推荐)
/boot/queryOrder/1021/1(不推荐)
3.分页、排序等操作,不需要使用斜杠传参数 例如:订单列表接口
/boot/orders?page=1&sort=desc 一般传的参数不是数据库表的字段,可以不采用斜杠