您好,登錄后才能下訂單哦!
本篇內容主要講解“RESTful API怎么進行版本控制”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“RESTful API怎么進行版本控制”吧!
您將學到
最好的版本控制方法是不進行版本控制。只要不需要版本控制,就不要版本控制。
構建向后兼容的服務,以便盡可能避免版本控制!
然而,在許多情況下我們都需要進行版本控制,然我們看看下面具體的例子:
最初,你有個這個版本的Student服務,返回數據如下:
{
"name": "Bob Charlie"
}
后來,您希望將學生的名字拆分,因此創建了這個版本的服務。
{
"name": {
"firstName": "Bob",
"lastName": "Charlie"
}
}
您可以從同一個服務支持這兩個請求,但是隨著每個版本的需求多樣化,它會變得越來越復雜。
在這種情況下,版本控制就成必不可少,強制性的了。
接下來讓我們創建一個簡單的SpringBoot的maven項目,并理解對 RESTful 服務進行版本控制的4種不同方法。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
第一個版本的 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;
}
我們希望創建兩個版本的服務,一個返回 StudentV1,另一個返回 StudentV2。
讓我們來看看創建相同服務版本的4種不同方法。
@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日知錄"}}
版本控制的第三種方法是使用請求頭來區分版本,請求示例如下:
http://localhost:8080/student/header
http://localhost:8080/student/header
實現方式如下所示:
@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
headers=[Accept=application/api-v2+json]
實現方式如下:
@RestController
public class StudentProduceController {
@GetMapping(value="/student/produce",produces = "application/api-v1+json")
public StudentV1 studentV1() {
return new StudentV1("javadaily");
}
@GetMapping(value="/student/produce",produces = "application/api-v2+json")
public StudentV2 studentV2() {
return new StudentV2(new Name("javadaily", "JAVA日知錄"));
}
}
下圖展示了我們如何使用Postman執行帶有請求Accept的Get方法。
請求:http://localhost:8080/student/produce
header:Accept = application/api-v1+json
請求:http://localhost:8080/student/produce
header:Accept = application/api-v2+json
以下因素影響版本控制的選擇
事實上,并沒有完美的版本控制解決方案,你需要根據項目實際情況進行選擇。
到此,相信大家對“RESTful API怎么進行版本控制”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。