一、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