使用通用的響應格式

使用泛型響應類(或者類似的響應封裝類)在網絡編程和API設計中有很多好處,包括但不限于以下幾點:

統一響應格式

使用R<T>可以確保API的所有響應都遵循相同的格式,這有助于客戶端更容易地解析和處理響應。客戶端可以預期響應中總是包含codemsgdata這三個字段,從而簡化了錯誤處理和數據提取的邏輯。

清晰的狀態碼和信息

通過code字段,客戶端可以明確地知道請求是否成功,以及可能發生了什么錯誤。msg字段提供了關于錯誤的更多詳細信息,有助于客戶端開發者調試和解決問題。

類型安全

由于R<T>是一個泛型類,它可以接受任何類型的data。這意味著你可以根據API的需求返回任何類型的數據,同時保持類型安全性。這減少了類型轉換和運行時錯誤的可能性。

可擴展性

如果你需要添加額外的響應字段或修改現有的字段,只需在R<T>類中進行修改即可。所有使用該類的API都會自動繼承這些更改,而無需修改每個API的響應邏輯。

簡化客戶端代碼

由于響應格式是統一的,客戶端可以編寫通用的代碼來處理所有API的響應。這減少了代碼的冗余和復雜性,提高了可維護性。

錯誤處理的中心化

通過在R<T>類中定義錯誤處理邏輯(例如,將狀態碼映射到具體的錯誤信息),你可以將錯誤處理邏輯集中在一個地方,而不是分散在每個API的實現中。這有助于保持代碼的一致性和可維護性。

更好的文檔和溝通

使用R<T>可以更容易地向其他開發者(包括客戶端開發者)解釋API的響應格式和可能的錯誤情況。這有助于減少誤解和溝通成本。

向后兼容性

如果將來需要修改API的響應格式或添加新的字段,使用R<T>可以更容易地實現向后兼容性。你可以逐步淘汰舊的字段或添加新的字段,而不會破壞現有客戶端的功能。

java實現代碼:

使用枚舉類設置一下狀態碼

這是最簡單 的狀態碼只有1和0可以自行添加更加詳細的狀態碼例如"10"和"11"代表用戶模塊,"20"和"21"代表其他模塊等等

// 使用枚舉來定義狀態碼
public enum ResponseCode {SUCCESS(1, "操作成功"),FAILURE(0, "操作失敗");private final int code;private final String message;ResponseCode(int code, String message) {this.code = code;this.message = message;}public int getCode() {return code;}public String getMessage() {return message;}
}

定義泛型響應結果類


// 泛型響應類
public class R<T> {private int code; // 使用枚舉代替硬編碼的數字private String msg; // 錯誤信息,使用枚舉的message作為默認值private T data; // 數據//getter和setter省略......// 靜態方法返回成功時候的R對象public static <T> R<T> success(T data) {R<T> r = new R<>();r.data = data;r.code = ResponseCode.SUCCESS.getCode();r.msg = ResponseCode.SUCCESS.getMessage(); // 使用枚舉的message作為默認信息return r;}// 靜態方法返回失敗時傳入消息public static <T> R<T> error(String msg) {R<T> r = new R<>();r.code = ResponseCode.FAILURE.getCode();r.data = null;r.msg = msg;return r;}//在失敗時返回額外的數據public static <T> R<T> errorWithData(String msg, T data) {R<T> r = new R<>();r.code = ResponseCode.FAILURE.getCode();r.data = data;r.msg = msg;return r;}}

這里添加了三個字段三個靜態方法,可以根據需求自行添加字段和靜態方法

具體業務代碼使用

import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  import java.util.Arrays;  
import java.util.List;  @RestController  
@RequestMapping("/api/users")  
public class UserController {  // 模擬的用戶數據服務層方法  private List<User> getUserList() {  // 在真實場景中,這里會從數據庫或其他數據源獲取數據  return Arrays.asList(  new User(1, "Alice"),  new User(2, "Bob")  );  }  // 獲取用戶列表的API端點  @GetMapping("/list")  public R<List<User>> getUserListApi() {  try {  List<User> users = getUserList();  if (users != null && !users.isEmpty()) {  // 成功時返回數據  return R.success(users);  } else {  // 沒有用戶時,也可以視為一種失敗情況,但這里僅作為示例返回成功  return R.success(Arrays.asList());  }  } catch (Exception e) {  // 發生異常時返回錯誤信息  return R.error("獲取用戶列表失敗");  }  }  // User類定義(僅作為示例)  static class User {  private Integer id;  private String name;  // 省略構造函數、getter和setter...  }  
}

在這個例子中,UserController有一個getUserListApi方法,它調用getUserList方法獲取用戶列表,并根據結果創建并返回一個R<List<User>>對象。如果獲取用戶列表成功,則返回狀態碼為成功的響應;如果發生異常或沒有用戶(盡管在這個例子中我們視為成功),則返回狀態碼為失敗的響應。

客戶端在調用/api/users/list端點時,會收到一個包含codemsgdata字段的JSON響應,這樣客戶端就可以根據這些字段來解析和處理響應了。

{  "code": 1, "msg": "操作成功",  "data": [  {  "id": 1,  "name": "Alice"  },  {  "id": 2,  "name": "Bob"  }  ]  
}

如果getUserListApi方法在處理過程中發生異常或沒有返回任何用戶(但在這里我們假設即使沒有用戶也返回成功狀態),并且你選擇了返回空的用戶列表而不是失敗狀態,那么JSON響應可能是這樣的:

{  "code": 1,  "msg": "操作成功", "data": [] 
}

然而,如果你選擇在沒有用戶時返回失敗狀態,并使用R.error方法,那么JSON響應可能會是這樣的:

{  "code": 0, "msg": "沒有用戶數據", "data": null   
}

使用泛型響應類R<T>是一種提高API可靠性、可維護性和易用性的有效方法,有助于簡化客戶端代碼的開發和調試過程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37356.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37356.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37356.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IP地址與在線教育平臺資源分配優化

IP地址的資源分配與優化策略可以幫助在線教育平臺提供更高質量、穩定且個性化的教育服務。 IP地址作為網絡設備的標識符&#xff0c;能夠為在線教育平臺提供有關學生地理位置和網絡環境信息。通過對學生IP地址的分析&#xff0c;平臺可以初步了解學生所在的地區、網絡服務提供商…

回收站的照片刪除了怎么找回?

大家在日常使用電腦的過程中&#xff0c;難免會遇到不小心刪除重要文件的情況&#xff0c;尤其是珍貴的照片。當我們意識到誤刪照片時&#xff0c;第一反應通常是去回收站找回。然而&#xff0c;如果連回收站的照片都被刪除了&#xff0c;該如何恢復呢&#xff1f;本文將詳細探…

【MySQL】事務的快照生成時間點和薛定諤的貓相關?

概述 最近因為工作需要&#xff0c;對MySQL的事務處理進行了一系列測試驗證&#xff0c;其中&#xff0c;對于MySQL的事務到底時什么時候生成了數據的快照&#xff0c;結果似乎跟薛定諤的貓理念很像&#xff0c;很有意思&#xff1b;過程我貼出來&#xff0c;有興趣的朋友可以一…

Python提供API給JAVA調用,實現Python和Java之間的交互

一、Java 調用Python 提供的API接口&#xff0c;有多種方法&#xff0c;本文通過Python 提供的Rest API進行調用 二、在Python中創建一個REST API&#xff0c;你可以使用許多框架&#xff0c;其中兩個最流行的框架是Flask和Django REST framework。這兩個框架都提供了創建REST…

Dockerfile詳情,Django項目中使用Dockerfile

Dockerfile詳情&#xff0c;Django項目中使用Dockerfile 目錄 Dockerfile詳情&#xff0c;Django項目中使用Dockerfile介紹常用指令Dokcerfile部署Django項目安裝Docker獲取項目源碼Dockerfile文件構建Docker鏡像運行Docker容器 介紹 Dockerfile是一個文本文件&#xff0c;一般…

simulink開發stm32,使用中斷模塊,無法產生中斷,其中包括使用timer模塊,以及ADC都無法產生中斷,需要注意的地方

1&#xff0c;其中包括使用timer模塊&#xff0c;以及ADC都無法產生中斷&#xff0c;需要注意的地方 原來是需要在配置文件里開啟一下timer的中斷&#xff0c;其他模塊自動加載ioc就可以了&#xff0c;這個timer需要注意力&#xff0c;需要自己勾選一下 如下圖&#xff1a; 看…

提升 Selenium 測試穩定性的秘訣:深入理解等待 API 的使用

目錄 為什么需要等待Selenium 等待 API 簡介隱式等待顯式等待Fluent Wait等待策略的選擇示例代碼總結 正文 1. 為什么需要等待 在 Web 自動化測試中&#xff0c;等待是一個關鍵因素。網絡應用通常是動態的&#xff0c;頁面加載時間、元素的顯示時間都可能不同步。直接操作這…

致敬經典:在國產開源操作系統 RT-Thread 重溫 UNIX 彩色終端

引言 上篇文章里我們向大家介紹了 RT-Thread v5.1.0 的一些新特性。其中包括了終端環境的進一步完善。終端是人機交互的重要接口。實用的終端工具可以顯著地提升系統使用者的幸福指數。舉例來說&#xff0c;當我們想要修改一些系統配置&#xff0c;或是編寫腳本時&#xff0c;一…

Linux——echo命令,管道符,vi/vim 文本編輯器

1.echo 命令 作用 向終端設備上輸出字符串或變量的存儲數據 格式 echo " 字符串 " echo $ 變 量名 [rootserver ~] # echo $SHELL # 輸出變量的值必須加 $ /bin/bash [rootserver ~] # str1" 我愛中國 " # 自定義變量 echo 重定向輸出到文件 ec…

MySQL數據庫——在Centos7環境安裝

MySQL在Centos7環境安裝 1.切換root用戶 安裝與卸載中&#xff0c;用戶全部切換成為root&#xff0c;安裝好后&#xff0c;普通用戶也能使用 2.卸載不要的環境 要將自己環境中有關mysql的全都刪除&#xff0c;避免安裝過程中被影響 ps axj | grep mariadb 先檢查是否有mari…

近似最近鄰查找的幾種方法

近似最近鄰查找 定義主要方法1. 局部敏感哈希&#xff08;LSH&#xff09;2. KD樹&#xff08;k-d tree&#xff09;3. 球樹&#xff08;Ball Tree&#xff09;4. 隨機投影樹&#xff08;Random Projection Trees&#xff09;5. 圖結構方法&#xff08;Graph-Based Methods&…

自制全網最便宜的雷達感應燈光畫,成本只需5元

自制全網最便宜的雷達感應燈光畫&#xff0c;成本5元 ? 成本組成&#xff1a;帶熱釋電的人體感應燈&#xff08;0.5元&#xff09;雷達感應模塊&#xff08;3.5元&#xff09;首飾盒&#xff08;0.45元&#xff09;微噴油畫布&#xff08;1元&#xff09;5.45元 ? 說一下做燈…

Flutter學習:從搭建環境到運行

一、開發環境的搭建 本文所示內容都是在Windows系統下進行的。 1、下載 Flutter SDK Flutter 官網&#xff08;https://docs.flutter.cn/release/archive?tabwindows&#xff09; 或者通過 git clone -b master https://github.com/flutter/flutter.git 下載 2、配置環境…

[數據集][目標檢測]井蓋未蓋好檢測數據集VOC+YOLO格式20123張2類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;20123 標注數量(xml文件個數)&#xff1a;20123 標注數量(txt文件個數)&#xff1a;20123 標…

Gamepad API 控制游戲的 JavaScript 指南

在現代網頁游戲中&#xff0c;通過游戲手柄來控制游戲是一種常見的需求。HTML5 提供了一個名為 Gamepad API 的接口&#xff0c;使得從瀏覽器中讀取游戲手柄輸入變得相對簡單。 什么是 Gamepad API&#xff1f; Gamepad API 是 HTML5 的一部分&#xff0c;允許開發者通過 Jav…

.net 奇葩問題調試經歷之2——內存暴漲,來自非托管的內存泄露

??歡迎點贊 :?? 收藏 ?留言 ?? 如有錯誤敬請指正,賜人玫瑰,手留余香!??本文作者:由webmote 原創??作者格言:新的征程,我們面對的不僅僅是技術還有人心,人心不可測,海水不可量,唯有技術,才是深沉黑夜中的一座閃爍的燈塔序言 這是一個序列文章,請看以往文…

AI推介-信息抽取(information extraction,NER)論文速覽(arXiv方向):2023.11.15-2023.12.31

文章目錄&#xff5e; 1.Large Language Models for Generative Information Extraction: A Survey2.Commonsense for Zero-Shot Natural Language Video Localization3.Unified Lattice Graph Fusion for Chinese Named Entity Recognition4.Solving Label Variation in Scien…

代碼統計工具V1.0.0(支持各種文件類型)

點擊下載《代碼統計工具&#xff08;支持各種文件類型&#xff09;》 1. 前言 本文介紹了一款使用C#開發的代碼行數統計軟件。該軟件允許用戶通過選擇文件目錄和設置統計項目類型&#xff0c;來統計指定目錄下的代碼行數。軟件提供了三種統計方式&#xff1a;按文件名統計、按…

線性圖標繪制指南:從基礎到精通

圖標在生活中隨處可見。相比文字來說&#xff0c;圖標可以讓人在更短的時間內認知并了解信息&#xff0c;并且大大提升信息的視覺美觀性&#xff0c;增加設計的藝術感染力。在用戶界面中使用圖標&#xff0c;是一種用戶熟知的設計模式。而線性圖標是通過提煉圖形輪廓&#xff0…

jquery動態插件之gsap和TextPlugin

<!DOCTYPE html> <html> <head><title>數字化人才認證數動畫</title><script src"https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script src"https://cdnjs.cloudflare.com/ajax…