【接口設計】如何設計統一 RESTful 風格的數據接口

如何設計統一 RESTful 風格的數據接口

  • 1.版本控制
    • 1.1 通過 URL
    • 1.2 通過自定義請求頭
    • 1.3 通過 Accept 標頭
  • 2.過濾信息
  • 3.確定 HTTP 的方法
  • 4.確定 HTTP 的返回狀態
  • 5.定義統一返回的格式

近年來,隨著移動互聯網的發展,各種類型的客戶端層出不窮。如果不統一數據接口,則會造成冗余編碼,增加成本。RESTful 風格的 API 正適合通過一套統一的接口為 PC、手機 APP 等設備提供數據服務。
在這里插入圖片描述

1.版本控制

隨著業務需求的變更、功能的選代,API 的更改是不可避免的。當一個 API 修改時,就會出現很多問題,比如,可能會在 API 中新增參數、修改返回的數據類型。這就要考慮根據原先版本 API 編寫的客戶端如何保留或順利過渡。所以,需要進行版本控制。

REST 不提供版本控制指南,常用的方法可以分為 3 種。

1.1 通過 URL

通過 URL 是最直接的方法,盡管它違背了 URI 應該引用唯一資源的原則。當版本更新時,還可以保障客戶端不會受到影響,如下面使用不同 URL 來確定不同版本。

二級目錄 的方式:

  • API 版本 V1:http://eg.com/api/v1
  • API 版本 V2:http://eg.com/api/v2

二級域名 的方式:

  • API 版本 V1:http://v1.eg.com
  • API 版本 V2:http://v2.eg.com

還可以包括日期、項目名稱或其他標識符。這些標識符對于開發 API 的團隊來說足夠有意義并且隨著版本的變化也足夠靈活。

1.2 通過自定義請求頭

自定義頭(例如,Accept-version)允許在版本之間保留 URL。

1.3 通過 Accept 標頭

客戶端在請求資源之前,必須要指定特定頭,然后 API 接口負責確定要發送哪個版本的資源。

2.過濾信息

如果記錄數量很多,則服務器不可能一次都將它們返回給用戶。API 應該提供參數,實現分頁返回結果。下面是一些常用的參數。

  • ?limit=10:指定返回記錄的數量。
  • ?page=5&size=10:指定第幾頁,以及每頁的記錄數。
  • ?search_type=1:指定篩選條件。

3.確定 HTTP 的方法

在 RESTful 中,HTTP 的方法有以下幾種。

  • GET:代表 請求資源
  • POST:代表 添加資源
  • PUT:代表 修改資源。PUT 是進行全部的修改,大家在編寫修改功能時可能會遇到這樣的情況:只修改了一個字段,但提交之后導致其他字段為空。這是因為,其他字段的值沒有一起提交,數據庫默認為空值。如果只修改一個或幾個字段,則可以使用 PATCH 方法。
  • DELETE:代表 刪除資源
  • HEAD:代表發送 HTTP 頭消息,GET 中其實也帶了 HTTP 頭消息。
  • PATCH:PUT 與 PATCH 方法比較相似,但它們的用法卻完全不同,PUT 用于替換資源,而 PATCH 用于 更新部分資源
  • OPTIONS:用于獲取 URI 所支持的方法。返回的響應消息會在 HTTP 頭中包含 Allow 的信息,其值是所支持的方法,如 GET。

4.確定 HTTP 的返回狀態

HTTP 的返回狀態一般有以下幾種。

  • 200 200 200:成功。
  • 400 400 400:錯誤請求。
  • 404 404 404:沒找到資源。
  • 403 403 403:禁止。
  • 406 406 406:不能使用請求內容特性來響應請求資源,比如請求的是 HTML 文件,但是消費者的 HTTP 頭包含了 JSON 要求。
  • 500 500 500:服務器內部錯誤。

5.定義統一返回的格式

為了保障前后端的數據交互的順暢,建議規范數據的返回,并采用固定的數據格式封裝。如:

異常信息:

{"code": 10001, "msg": "異常信息", "data": null
}

成功信息:

{"code": 200, "msg": "成功""data": {"id": 1,"name": "pipi", "age": 26}
}  

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

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

相關文章

Mybatis-Plus最優化持久層開發

Mybatis-plus:最優化持久層開發 一:Mybatis-plus快速入門: 1.1:簡介: Mybatis-plus(簡稱MP)是一個Mybatis的增強工具,在mybatis的基礎上只做增強不做改變; 提高效率;自…

國漫推薦11

1.《元龍》 2.《惡魔法則》2023年9月29日 3.《三十六騎》 4.《山河劍心》 5.劍網3俠肝義膽沈劍心 《劍網3俠肝義膽沈劍心》 《劍網3俠肝義膽沈劍心 第二季》 《劍網3俠肝義膽沈劍心之長漂》(番外) 《劍網3俠肝義膽沈劍心 第三季》 6.《仙逆》東方玄幻…

Uniswap V2和Uniswap V3的區別

Uniswap V2和Uniswap V3是兩個不同版本的去中心化交易協議,由Uniswap團隊開發和維護。它們之間的主要區別包括以下幾點: 資金池模型不同: Uniswap V2: 使用恒定乘積市場模型,也就是 x * y k。這意味著每個資金池中的資產的乘積保持不變&…

Transformer的模型的擴展與應用領域的拓展 - Transformer教程

在如今的人工智能領域,Transformer模型已經成為了眾多研究和應用的焦點。從自然語言處理到計算機視覺,Transformer模型的擴展與應用領域的拓展帶來了無數的可能性。今天,我們就來聊聊Transformer模型的擴展以及它在不同領域的廣泛應用。 首先…

生產管理系統功能全拆解:哪些功能是企業真正需要的?

制造業的伙伴經常聽到“生產管理”,但很多人可能只是模糊地知道它與工廠、生產線有關。那么,到底什么是生產管理呢?它的重要性又體現在哪里呢?接下來,我就以輕松的方式,帶大家走進生產管理的世界&#xff0…

函數練習·二 基礎題

# 【以下功能都使用函數封裝】 # 提示: 涉及到要返回的題目,請使用return # 基礎題 # 1.封裝函數,計算從1到某個數以內所有奇數的和并返回 def fn1(n): return sum([i for i in range(1, n, 2)]) print(fn1(7)) # 2.封裝函數,判斷某個數是否是偶…

微信閃退怎么回事?實用技巧助你輕松應對

在使用微信的過程中,偶爾會遇到閃退的問題,這不僅影響我們的日常溝通,還可能導致重要信息的丟失。那么,微信閃退怎么回事呢?閃退的原因可能有很多,包括軟件問題、手機存儲不足、系統不兼容等。本文將詳細分…

筆記本電腦數據丟失如何恢復?

在計算機網絡日益普及的今天,計算機已波及到人們的生活、工作、學習及消費等廣泛領域,其服務和管理也涉及政府、工商、金融及用戶等諸多方面。筆記本電腦等電子產品被各行各業的人所喜愛和接受,早已成為人們出差的必備品,可以用來…

keepalived高可用集群

一、keepalived: 1.keepalive是lvs集群中的高可用架構,只是針對調度器的高可用,基于vrrp來實現調度器的主和備,也就是高可用的HA架構;設置一臺主調度器和一臺備調度器,在主調度器正常工作的時候&#xff0…

OS_同步與互斥

2024-07-04:操作系統同步與互斥學習筆記 第9節 同步與互斥 9.1 同步互斥的基本概念9.1.1 同步關系9.1.2 互斥關系9.1.3 臨界資源9.1.4 臨界區9.1.5 同步機制應遵循規則 9.2 軟件同步機制9.2.1 單標志法9.2.2 雙標志先檢查法9.2.3 雙標志后檢查法9.2.4 peterson算法 …

BP神經網絡與反向傳播算法在深度學習中的應用

BP神經網絡與反向傳播算法在深度學習中的應用 在神經網絡的發展歷史中,BP神經網絡(Backpropagation Neural Network)占有重要地位。BP神經網絡通過反向傳播算法進行訓練,這種算法在神經網絡中引入了一種高效的學習方式。隨著深度…

jstat命令介紹

jstat:查看JVM統計信息 一 基本情況二 基本語法2.1 option參數1. 類裝載相關的:2. 垃圾回收相關的-gc:顯示與GC相關的堆信息。包括Eden區、兩個Survivor區、老年代、永久代等的容量、已用空間、GC時間合計等信息。-gccapacity:顯示…

【C++】C++-機房收費管理系統(源碼+注釋)【獨一無二】

👉博__主👈:米碼收割機 👉技__能👈:C/Python語言 👉公眾號👈:測試開發自動化【獲取源碼商業合作】 👉榮__譽👈:阿里云博客專家博主、5…

LeetCode之最長回文子串

1.題目鏈接 5. 最長回文子串 - 力扣(LeetCode)https://leetcode.cn/problems/longest-palindromic-substring/description/ 2.題目解析 對于這道題目我們可以使用動態規劃的思路來求解,具體思路是,對于一個長度大于2的子串&…

生成式信息檢索(問答系統與信息檢索的進步)

文章目錄 什么是問答系統(Question Answering Systems)檢索系統的演變經典檢索系統“Term” 文檔搜素的最小單位倒排索引詞嵌入的出現預訓練語言模型 用于問答的語言模型設計方案選擇:封閉式與開放式問答系統對比方案A:封閉式生成…

【干貨】一文帶你看懂什么是渠道分銷?如何管理渠道分銷

在當今競爭激烈的市場環境中,企業想要擴大市場份額、提高產品或服務的可見度,有效的渠道分銷策略是關鍵。 什么是渠道分銷? 渠道分銷,簡而言之,是指企業利用中間商(如經銷商、代理商、零售商等&#xff0…

springboot解壓文件流zip壓縮包

springboot解壓文件流zip壓縮包 原始文件存儲的地方&#xff1a; 需要在當前目錄下解壓該文件&#xff0c;如下圖&#xff1a; 代碼示例&#xff1a; private Result<String> getLocationGuideLayerName(YbYstbtqTaskResolveParam params, String fishnetLayerName)…

華為od100問持續分享-1

我是一名軟件開發培訓機構老師&#xff0c;我的學生已經有上百人通過了華為OD機試&#xff0c;學生們每次考完試&#xff0c;會把題目拿出來一起交流分享。 重要&#xff1a;2024年5月份開始&#xff0c;考的都是OD統一考試&#xff08;D卷&#xff09;&#xff0c;題庫已經整…

入門PHP就來我這(高級)24 ~ Session判斷用戶登錄

有膽量你就來跟著路老師卷起來&#xff01; -- 純干貨&#xff0c;技術知識分享 路老師給大家分享PHP語言的知識了&#xff0c;旨在想讓大家入門PHP&#xff0c;并深入了解PHP語言。 上一篇我們介紹了Session管理部分的概念&#xff0c;本文通過session來改寫一些用戶登錄&…

一致性Hash問題及解決方案

Hash算法的應用場景 請求的負載均衡 Nginx的ip_hash策略可以在客戶端ip不發生變化的情況下&#xff0c;將其發出的請求始終路由到同一個目標服務器上&#xff0c;實現會話粘滯&#xff0c;避免處理session共享問題。 如果沒有ip_hash策略&#xff0c;可以通過維護一張映射表的…