RESTful API如何进行版本控制

《一线大厂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面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值