《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
后来,您希望将学生的名字拆分,因此创建了这个版本的服务。
{
“name”: {
“firstName”: “Bob”,
“lastName”: “Charlie”
}
}
您可以从同一个服务支持这两个请求,但是随着每个版本的需求多样化,它会变得越来越复杂。
在这种情况下,版本控制就成必不可少,强制性的了。
接下来让我们创建一个简单的SpringBoot的maven项目,并理解对 RESTful 服务进行版本控制的4种不同方法。
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
org.springframework.boot
spring-boot-starter-test
test
几个用于实现版本控制的Bean
第一个版本的 Bean
@Data
@AllArgsConstructor
public class StudentV1 {
private String name;
}
第二个版本的 Bean
@Data
public class StudentV2 {
private Name name;
}
StudentV2使用的Name实体
@Data
@AllArgsConstructor
public class Name {
private String firstName;
private String lastName;
}
Restful 版本控制的方法
我们希望创建两个版本的服务,一个返回 StudentV1,另一个返回 StudentV2。
让我们来看看创建相同服务版本的4种不同方法。
通过 URI 进行版本控制
@RestController
public class StudentUriController {
@GetMapping(“v1/student”)
public StudentV1 studentV1() {
return new StudentV1(“javadaily”);
}
@GetMapping(“v2/student”)
public StudentV2 studentV2() {
return new StudentV2(new Name(“javadaily”, “JAVA日知录”));
}
}
请求:http://localhost:8080/v1/student
响应:{“name”:“javadaily”}
请求:http://localhost:8080/v2/student
响应:{“name”:{“firstName”:“javadaily”,“lastName”:“JAVA日知录”}}
通过请求参数进行版本控制
版本控制的第二种方法是使用请求参数来区分版本。请求示例如下所示:
-
http://localhost:8080/student/param?version=1
-
http://localhost:8080/student/param?version=2
实现方式如下:
@RestController
public class StudentParmController {
@GetMapping(value=“/student/param”,params = “version=1”)
public StudentV1 studentV1() {
return new StudentV1(“javadaily”);
}
@GetMapping(value=“/student/param”,params = “version=2”)
public StudentV2 studentV2() {
return new StudentV2(new Name(“javadaily”, “JAVA日知录”));
}
}
请求:http://localhost:8080/student/param?version=1
响应:{“name”:“javadaily”}
请求:http://localhost:8080/student/param?version=2
响应:{“name”:{“firstName”:“javadaily”,“lastName”:“JAVA日知录”}}
通过自定义Header进行版本控制
版本控制的第三种方法是使用请求头来区分版本,请求示例如下:
-
http://localhost:8080/student/header
-
headers=[X-API-VERSION=1]
-
http://localhost:8080/student/header
-
headers=[X-API-VERSION=2]
实现方式如下所示:
@RestController
public class StudentHeaderController {
@GetMapping(value=“/student/header”,headers = “X-API-VERSION=1”)
public StudentV1 studentV1() {
return new StudentV1(“javadaily”);
}
@GetMapping(value=“/student/header”,headers = “X-API-VERSION=2”)
public StudentV2 studentV2() {
return new StudentV2(new Name(“javadaily”, “JAVA日知录”));
}
}
下图展示了我们如何使用Postman执行带有请求头的Get请求方法。
请求:http://localhost:8080/student/header
header:X-API-VERSION = 1
请求:http://localhost:8080/student/header
header:X-API-VERSION = 2
通过媒体类型进行版本控制
最后一种版本控制方法是在请求中使用Accept Header,请求示例如下:
-
http://localhost:8080/student/produce
-
headers=[Accept=application/api-v1+json]
-
http://localhost:8080/student/produce
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
[外链图片转存中…(img-qxUaxK5Z-1714651154114)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!