restFul的優缺點以及思考

来源:https://www.cnblogs.com/zwhdd/archive/2023/08/31/17669881.html
-Advertisement-
Play Games

## 常用經驗 - 在HTTP中,我們要通過 URL 進行資源的定位 >比如: > >要取 id=888 的用戶信息,我們就向/user/{id} 這個路徑發送請求, > >要取 id=888 的用戶的訂單列表,我們就向/user/{id}/orders 這個路徑發送請求 - 在HTTP 中,DEL ...


常用經驗

  • 在HTTP中,我們要通過 URL 進行資源的定位

    比如:

    要取 id=888 的用戶信息,我們就向/user/{id} 這個路徑發送請求,

    要取 id=888 的用戶的訂單列表,我們就向/user/{id}/orders 這個路徑發送請求

  • 在HTTP 中,DELETE、PUT、GET請求應該是冪等的,而POST 則不是冪等的。所謂“冪等”指的是:對於一個介面採用同樣的參數請求一次和請求多次的結果是一致的,不會因為多次請求而產生副作用

  • 在HTTP中,GET請求的響應是可以被緩存的,而DELETE、PUT、POST請求的響應是不可以被緩存的。客戶端、網關等可以根據情況對 GET 請求的響應進行緩存,從而提升性能

  • 在HTTP中,伺服器端要通過狀態碼來反映資源獲取的結果

    比如:

    客戶端要獲取id-8的用戶,如果要獲取的用戶不存在,則伺服器返回的狀態碼為 404,而如果當前客戶端沒有許可權獲取這個用戶,伺服器返回的狀態碼為 403。再如,對於新增用戶請求,如果新增成功,伺服器返回的狀態碼為 201

優點

  • 所有的資源都儘量通過URL來表示,URL的語義性更清晰

  • 對所有類型資源的新增、刪除、修改、查詢操作都統一為向資源發送POST、DELETE.、PUT、GET 請求,介面統一且具有自描述性,減少了開發人員對介面文檔的依賴性

  • 對於 GET、PUT、DELETE 等冪等的操作,網關、網路請求組件等可以對失敗的請求自動重試

  • 網關等可以對 GET 請求進行緩存,能夠提升系統的訪問速度,而且降低伺服器的壓力

  • 通過HTTP狀態碼反映伺服器端的處理結果,能夠統一錯誤碼,避免自定義錯誤碼帶來的不統一的問題

    戶端也可以根據錯誤碼進行統一處理,比如對於 403 狀態碼,客戶端統一提示用戶去登錄

  • 網關等系統可以根據狀態碼來分析系統的訪問數據,比如可以根據 HTTP狀態碼分析有多少成功的請求,有多少失敗的請求

缺點

  • 真實系統中的資源非常複雜,很難清晰地進行資源的劃分
  • 真實系統中的業務很複雜,並不是所有的操作都能簡單地對應到PUT、GET、DELETE、POST上
  • 真實系統是在不斷進化的,一個操作最開始的時候被設計為冪等的 PUT,但是後來的版本又修改了邏輯,可能該操作就變成了不冪等的。如果調用者繼續對這個操作進行重試可能會有副作用
  • 在 Restful 中,資源儘量通過 URL來定位,要儘量避免使用 QueryString 及請求報文體傳遞數據
  • HTTP狀態碼的個數是有限的,特別是用於表示業務相關的錯誤碼主要在 4xx狀態碼段中,而業務系統中的錯誤非常複雜,僅通過 HTTP狀態碼來反映錯誤有時候會無法滿足要求
  • 有的客戶端是不支持 PUT、DELETE 請求的。例如: 舊版本的程式

總結

REST 概念是用來指導我們設計介面的,而不是給開髮帶來麻煩的,它只是一個參考的風格,並不是一個必須遵守的規範,不能因為要遵守Restful 風格而影響開發進度及系統的穩定。項目開發的時候,需要根據項目特點、公司人員等多方面情況,確定一個符合項目情況的定製版 Restful 規範。

本文來自博客園,作者:笨笨的二黃子,轉載請註明原文鏈接:https://www.cnblogs.com/zwhdd/p/17669881.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. Python中常用的庫有哪些,作用分別是什麼 requests: requests 是一個用於發送 HTTP 請求的庫,它提供了簡單而優雅的 API,可以輕鬆地發送 GET、POST、PUT、DELETE 等請求,並處理響應數據。它支持會話管理、身份驗證、文件上傳等常見的 HTTP 功能,是進 ...
  • Go語言中的slice表示一個具有相同類型元素的可變長序列,語言本身提供了兩個操作方法: 1. 創建:make([]T,len,cap) 2. 追加: append(slice, T ...) 同時slice支持隨機訪問。本篇文章主要對slice的具體實現進行總結。 ## 1. 數據結構 go語言的 ...
  • Java - ThreadPoolExecutor源碼分析 1. 為什麼要自定義線程池 首先ThreadPoolExecutor中,一共提供了7個參數,每個參數都是非常核心的屬性,線上程池去執行任務時,每個參數都有決定性的作用。 但是如果直接採用JDK提供的方式去構建,可見設置的核心參數最多就兩個, ...
  • # Python的數據類型的內置方法 - 可變與不可變數據類型 - 字典的內置方法 - 元組的內置方法 - 集合的內置方法 ## 可變與不可變數據類型 ### 常見的數據類型 ```python 常見的數據結構類型:鏈表、單鏈表、雙鏈表、迴圈列表、(C實現的 指針)、棧、樹、二叉樹、平衡二叉樹、完全 ...
  • 由於瀏覽器可以迅速地解析JSON對象,它們有助於在客戶端和伺服器之間傳輸數據。本文將描述如何使用Python的JSON模塊來傳輸和接收JSON數據。 ### JavaScript Object Notation JSON (JavaScript Object Notation)是一種用於數據交換的語 ...
  • ### 拾取和解除拾取 對象的序列化是將對象轉換為比特形式的方法,這樣我們就可以在硬碟上保存對象的狀態。儘管許多語言都為我們提供了對象序列化的方式,但Python在所有的語言中更加靈活。 在Python中,對象序列化被稱為pickling,而去序列化被稱為unpickling。我們在 Python ...
  • 本節內容 列表、元組操作 字元串操作 字典操作 集合操作 文件操作 字元編碼與轉碼 1. 列表、元組操作 列表是我們最以後最常用的數據類型之一,通過列表可以對數據實現最方便的存儲、修改等操作 定義列表 names = ['Alex',"Tenglan",'Eric'] 通過下標訪問列表中的元素,下標 ...
  • 隨著互聯網的發展,越來越多的企業開始構建自己的API介面。而隨著API介面的增多,調用者需要瞭解API的參數和返回值,這時我們就需要一種方便快捷的查詢方式。本文將介紹一種以介面參數線上查詢為核心的方式,同時以銀行三要素驗證介面為例,展示如何實現介面參數線上查詢。 一、什麼是API介面 API(App ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...