中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RESTful API怎么進行版本控制

發布時間:2021-10-19 17:28:02 來源:億速云 閱讀:137 作者:iii 欄目:編程語言

本篇內容主要講解“RESTful API怎么進行版本控制”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“RESTful API怎么進行版本控制”吧!

您將學到

  • 為什么我們需要對RESTful API 進行版本控制?
  • 可用的版本控制有哪些?
  • 如何實現基于 Restful 的版本控制?     

為什么我們需要對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

第一個版本的 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

RESTful API怎么進行版本控制

請求:http://localhost:8080/student/header
header:X-API-VERSION = 2

RESTful API怎么進行版本控制    

通過媒體類型進行版本控制

最后一種版本控制方法是在請求中使用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

RESTful API怎么進行版本控制

請求:http://localhost:8080/student/produce
header:Accept = application/api-v2+json

RESTful API怎么進行版本控制

影響版本選擇的因素

以下因素影響版本控制的選擇

  • URI 污染 - URL版本和請求參數版本控制會污染URI空間。
  • 濫用請求頭 - Accept 請求頭并不是為版本控制而設計的。
  • 緩存 - 如果你使用基于頭的版本控制,我們不能僅僅基于URL緩存,你需要考慮特定的請求頭。
  • 是否能在瀏覽器直接執行 ? - 如果您有非技術消費者,那么基于URL的版本將更容易使用,因為它們可以直接在瀏覽器上執行。
  • API文檔 - 如何讓文檔生成理解兩個不同的url是同一服務的版本?
事實上,并沒有完美的版本控制解決方案,你需要根據項目實際情況進行選擇。        

到此,相信大家對“RESTful API怎么進行版本控制”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扬中市| 托克托县| 信丰县| 孟津县| 长岛县| 郎溪县| 莱阳市| 濉溪县| 罗城| 凤冈县| 柘荣县| 额敏县| 项城市| 丰宁| 高碑店市| 刚察县| 镇宁| 丰县| 宁都县| 旬邑县| 舟曲县| 乐东| 麻栗坡县| 沧源| 达日县| 山丹县| 加查县| 宜宾市| 通山县| 老河口市| 西峡县| 抚宁县| 米脂县| 布拖县| 应城市| 兴安盟| 常宁市| 滦平县| 崇州市| 社会| 台安县|