本篇內(nèi)容主要講解“RESTful API怎么進(jìn)行版本控制”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“RESTful API怎么進(jìn)行版本控制”吧!
公司主營業(yè)務(wù):成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出綏陽免費(fèi)做網(wǎng)站回饋大家。
您將學(xué)到
最好的版本控制方法是不進(jìn)行版本控制。只要不需要版本控制,就不要版本控制。
構(gòu)建向后兼容的服務(wù),以便盡可能避免版本控制!
然而,在許多情況下我們都需要進(jìn)行版本控制,然我們看看下面具體的例子:
最初,你有個(gè)這個(gè)版本的Student服務(wù),返回?cái)?shù)據(jù)如下:
{
"name": "Bob Charlie"
}
后來,您希望將學(xué)生的名字拆分,因此創(chuàng)建了這個(gè)版本的服務(wù)。
{
"name": {
"firstName": "Bob",
"lastName": "Charlie"
}
}
您可以從同一個(gè)服務(wù)支持這兩個(gè)請(qǐng)求,但是隨著每個(gè)版本的需求多樣化,它會(huì)變得越來越復(fù)雜。
在這種情況下,版本控制就成必不可少,強(qiáng)制性的了。
接下來讓我們創(chuàng)建一個(gè)簡單的SpringBoot的maven項(xiàng)目,并理解對(duì) RESTful 服務(wù)進(jìn)行版本控制的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>
第一個(gè)版本的 Bean
@Data
@AllArgsConstructor
public class StudentV1 {
private String name;
}
第二個(gè)版本的 Bean
@Data
public class StudentV2 {
private Name name;
}
StudentV2使用的Name實(shí)體
@Data
@AllArgsConstructor
public class Name {
private String firstName;
private String lastName;
}
我們希望創(chuàng)建兩個(gè)版本的服務(wù),一個(gè)返回 StudentV1,另一個(gè)返回 StudentV2。
讓我們來看看創(chuàng)建相同服務(wù)版本的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日知錄"));
}
}
請(qǐng)求:http://localhost:8080/v1/student
響應(yīng):{"name":"javadaily"}
請(qǐng)求:http://localhost:8080/v2/student
響應(yīng):{"name":{"firstName":"javadaily","lastName":"JAVA日知錄"}}
版本控制的第二種方法是使用請(qǐng)求參數(shù)來區(qū)分版本。請(qǐng)求示例如下所示:
http://localhost:8080/student/param?version=1
http://localhost:8080/student/param?version=2
實(shí)現(xiàn)方式如下:
@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日知錄"));
}
}
請(qǐng)求:http://localhost:8080/student/param?version=1
響應(yīng):{"name":"javadaily"}
請(qǐng)求:http://localhost:8080/student/param?version=2
響應(yīng):{"name":{"firstName":"javadaily","lastName":"JAVA日知錄"}}
版本控制的第三種方法是使用請(qǐng)求頭來區(qū)分版本,請(qǐng)求示例如下:
http://localhost:8080/student/header
http://localhost:8080/student/header
實(shí)現(xiàn)方式如下所示:
@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日知錄"));
}
}
下圖展示了我們?nèi)绾问褂肞ostman執(zhí)行帶有請(qǐng)求頭的Get請(qǐng)求方法。
請(qǐng)求:http://localhost:8080/student/header
header:X-API-VERSION = 1
請(qǐng)求:http://localhost:8080/student/header
header:X-API-VERSION = 2
最后一種版本控制方法是在請(qǐng)求中使用Accept Header,請(qǐng)求示例如下:
http://localhost:8080/student/produce
headers=[Accept=application/api-v1+json]
http://localhost:8080/student/produce
headers=[Accept=application/api-v2+json]
實(shí)現(xiàn)方式如下:
@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日知錄"));
}
}
下圖展示了我們?nèi)绾问褂肞ostman執(zhí)行帶有請(qǐng)求Accept的Get方法。
請(qǐng)求:http://localhost:8080/student/produce
header:Accept = application/api-v1+json
請(qǐng)求:http://localhost:8080/student/produce
header:Accept = application/api-v2+json
以下因素影響版本控制的選擇
事實(shí)上,并沒有完美的版本控制解決方案,你需要根據(jù)項(xiàng)目實(shí)際情況進(jìn)行選擇。
到此,相信大家對(duì)“RESTful API怎么進(jìn)行版本控制”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章標(biāo)題:RESTfulAPI怎么進(jìn)行版本控制
網(wǎng)站地址:http://www.ekvhdxd.cn/article36/jcgopg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)頁設(shè)計(jì)公司、虛擬主機(jī)、App開發(fā)、定制網(wǎng)站、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)