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-hant/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

發表回復

登錄後才能評論