REST介面詳解

一、REST介面規範

REST(Representational State Transfer)即表述性狀態轉移,是一種設計風格,是現今被廣泛應用的一種網路應用通信協議。RESTful 架構的 Web 服務即基於 REST 架構設計的WebService,它應該滿足以下幾個條件:

1. 客戶端- 服務端:客戶端和服務端之間的關係應當統一使用REST 介面,這樣可以分離前後端開發。

2. 無狀態:客戶端向服務端請求的所有必要信息都必須包含在請求中,服務端不應該存儲客戶端的任何信息。

3. 可緩存:伺服器必須明確哪些響應可以被緩存,而客戶端需要明確它從上一個響應中已經取回的是什麼。

4. 按需編碼:伺服器必須自己使用請求提供的內容來選擇如何處理請求,不能假定客戶端能夠使用某種特定格式來請求數據或者提交數據。

5. 統一介面:所有的資源都通過 URI 暴露給客戶端,同時使用標準的 HTTP 方法來定義缺少的操作。


@RestController
public class UserController {
    // 獲取用戶列表
    @GetMapping("/users")
    public List listUser() {
        List userList = userService.listUser();
        return userList;
    }

    // 獲取用戶詳情
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        return user;
    }

}

二、REST介面為什麼需要轉義

在 REST 介面通信過程中,常常需要處理特殊字元如&、=等,這些特殊字元對URL參數傳輸和接收可能會造成影響,那麼就需要對這些特殊字元進行轉義。轉義後的字元將會被替換成一些特殊字元序列,這些序列是可以被伺服器和瀏覽器處理的。


// URL編碼
String encode = URLEncoder.encode("Java 編程", "UTF-8");
System.out.println(encode); // Java+%E7%BC%96%E7%A8%8B

// URL解碼
String decode = URLDecoder.decode("Java+%E7%BC%96%E7%A8%8B", "UTF-8");
System.out.println(decode); // Java 編程

三、REST介面測試是什麼

REST 介面測試是一種測試手段,它主要用於測試 REST 介面是否符合預期結果。REST 介面測試主要包括介面功能測試、介面性能測試和介面安全測試。其中,功能測試主要關注介面是否按照要求運行;性能測試主要用於測試介面的吞吐量和響應時間;安全測試主要用於測試介面是否安全,是否存在漏洞。

常見的 REST 介面測試工具有 Postman、JMeter、SoapUI 等。

四、REST介面XML

XML 即可擴展標記語言(Extensible Markup Language),它是一種標記語言,用於表示數據。在 REST 介面中,XML 通常用於表示數據的傳輸格式。XML 的優點是可讀性高,易於擴展。



    
        1
        張三
    
    
        2
        李四
    

五、REST介面傳集合

在 REST 介面中,傳遞集合數據時,可以採用數組的方式或者JSON格式。JSON 格式比數組方式更加易於處理,因為 JSON 可以支持多維數組。


// 傳遞數組
@GetMapping("/users")
public List listUser(@RequestParam("ids") Long[] ids) {
    List userList = userService.listUserByIds(ids);
    return userList;
}

// 傳遞JSON
@PostMapping("/users")
public void addUser(@RequestBody List userList) {
    userService.addUser(userList);
}

六、REST介面協議

REST 介面通常使用 HTTPS 協議,它是隧道加密協議,可以保證數據傳輸過程中的安全性。HTTPS 是在 HTTP 的基礎上添加了 SSL/TLS 層,實現了數據加密、身份驗證和數據完整性校驗。


@Configuration
public class HttpsConfig {

    @Value("${server.ssl.key-store}")
    private String keyStorePath;

    @Value("${server.ssl.key-store-password}")
    private String keyPassword;

    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(createSslConnector());
        return tomcat;
    }

    // 配置HTTPS
    private Connector createSslConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
        try {
            File keystore = new ClassPathResource(keyStorePath).getFile();
            connector.setScheme("https");
            connector.setSecure(true);
            connector.setPort(8443);
            protocol.setSSLEnabled(true);
            protocol.setKeystoreFile(keystore.getAbsolutePath());
            protocol.setKeystorePass(keyPassword);
            protocol.setKeyAlias("tomcat");
            return connector;
        } catch (IOException ex) {
            throw new IllegalStateException("can't access keystore: [" + "keystore" + "] or truststore: [" + "none"
                    + "]", ex);
        }
    }
}

七、REST介面類型

在 REST 介面中,常用的數據類型有字元串、整型、浮點型、布爾型、時間類型、對象等。在傳遞對象時,通常使用 JSON 或 XML 格式,這樣可以簡化數據的處理。


// 傳遞對象
@PostMapping("/users")
public void addUser(@RequestBody User user) {
    userService.addUser(user);
}

八、REST介面標準文檔

在 REST 介面開發過程中,通常需要編寫介面標準文檔,以便開發人員能夠快速了解介面的使用方式和參數傳遞方式。介面標準文檔應該包含介面說明、URL、請求方式、參數列表、返回值說明等內容。


/**
 * 獲取用戶列表
 * URL: /users
 * Method: GET
 * @param pageNum 頁碼
 * @param pageSize 分頁大小
 * @return 用戶列表
 */
@GetMapping("/users")
public List listUser(@RequestParam("pageNum") Integer pageNum,
                           @RequestParam("pageSize") Integer pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List userList = userService.listUser();
    PageInfo pageInfo = new PageInfo(userList);
    return pageInfo.getList();
}

九、REST介面array

在 REST 介面中,數組可以作為參數傳遞、作為返回結果,也可以作為參數中的某個屬性值。數組在傳遞時,通常使用 URL 參數或者 JSON 格式。


// 傳遞參數數組
@GetMapping("/users")
public List listUser(@RequestParam(value = "ids", required = false) Long[] ids) {
    List userList = userService.listUserByIds(ids);
    return userList;
}

// 返回結果為數組
@GetMapping("/users")
public Long[] listUserId() {
    Long[] userIds = userService.listUserId();
    return userIds;
}

// 參數中包含數組
@PostMapping("/users")
public void addUser(@RequestBody User user) {
    userService.addUser(user);
}

十、REST介面和HTTP介面

REST 介面和 HTTP 介面都是用於提供服務的介面,但是有些區別。HTTP 介面通常使用 SOAP 協議進行數據傳輸,而 REST 介面使用 RESTful 架構實現,使用JSON或XML格式進行數據的傳輸。比較起來,REST 介面更加輕量、靈活,易於擴展和維護。

在實際開發中,可以根據具體需要選擇使用 REST 介面或者 HTTP 介面。

原創文章,作者:BOQZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/148531.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BOQZ的頭像BOQZ
上一篇 2024-11-03 15:16
下一篇 2024-11-03 15:16

相關推薦

  • Java 監控介面返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控介面返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • Python介面自動化測試

    本文將從如下多個方面對Python編寫介面自動化進行詳細闡述,包括基本介紹、常用工具、測試框架、常見問題及解決方法 一、基本介紹 介面自動化測試是軟體測試中的一種自動化測試方式。通…

    編程 2025-04-27
  • Jadoor門鎖開發介面接入指南

    本文將從多個方面詳細介紹如何將門鎖接入Jadoor平台的開發介面,方便開發者們快速實現門鎖遠程控制、開鎖記錄查看等功能。 一、Jadoor門鎖開發介面簡介 Jadoor是一款用於密…

    編程 2025-04-27
  • 後端介面設計開發經驗分享

    在受到前端某些限制或特殊需求時,後端介面的設計和開發顯得尤為重要。下面從以下幾個方面進行講述。 一、命名規範 合理的命名規範可以大大提高介面的可讀性和可維護性。以下是一些命名規範的…

    編程 2025-04-27
  • 期貨數據介面 Python:打通數字資產交易數據的關鍵

    本文將從以下幾個方面討論期貨數據介面 Python: 一、數據介面簡介 期貨數據介面是指為期貨從業人員提供用於獲取歷史、實時及未來交易數據的工具。Python是一種常用的編程語言,…

    編程 2025-04-27
  • 如何快速發布http介面

    想要快速發布http介面,可以從以下幾個方面入手。 一、選擇合適的框架 選擇合適的框架對於快速發布http介面非常重要。目前比較受歡迎的框架有Flask、Django、Tornad…

    編程 2025-04-27
  • Javaweb 介面返回數據的定義與實現

    本文將介紹 javaweb 如何定義介面返回數據,並提供相應的代碼示例。 一、介面返回數據的定義 在 javaweb 開發中,我們經常需要通過介面返回數據。介面返回的數據格式通常是…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25

發表回復

登錄後才能評論