restful風格_什么是RESTful風格的API設計?

28d9735bd248829984e412c1606120fe.png

隨著移動互聯網的興起,RESTful風格的API設計也隨之流行起來,但我們說了那么多RESTful設計,它到底是什么?本篇文章帶大家來了解一下它的真實面目。

RESTful概念

首先,我們需要明確的是RESTful,它是一個理念,是一個設計規范,而并不是什么協議等。

REST,全稱Representational State Transfer,直接翻譯就是:表現層狀態轉化。而該翻譯之所以晦澀是因為缺少了主語,準確來說應該是“Resource Representational State Transfer”。

通俗來講,就是“資源在網絡中以某種表現形式進行狀態轉化”。

REST概念是Roy Thomas Fielding在他2000年的博士論文中提出的,他是HTTP協議(1.0版和1.1版)的主要設計者。

有了對RESTful基礎概念的了解,我們分別來看看其相關概念的解釋。

資源

“資源”是RESTful中最核心的概念之一。在RESTful概念中,互聯網中的每一樣信息都可以定義為資源,比如文本、圖片、音頻、視頻等。而這些資源又都可以對應一個特定的URI(統一資源定位符),URI為每一個資源的地址或獨一無二的識別符。

表現層

針對上面的“資源”,我們要進行相應的呈現,而且可以采用多種的呈現形式,而這些呈現形式就叫做“表現層”。

就拿文本為例,我們可以呈現為JSON格式、XML格式、HTML格式,甚至二進制格式等。這就是表現層所做的事情。

狀態轉化

資源通常放在服務器端,而客戶端對服務器資源的增、刪、改、查等操作,便涉及到資源狀態的轉化。這個過程便是“ 狀態轉化”。

我們以HTTP協議為例(RESTful不僅僅適用HTTP協議,只不過經常以HTTP協議為襯托),客戶端可通過一些操作讓服務器端的資源發生變化。

而這整個過程,便是“表現層狀態轉化”。

在HTTP中,提供了四種常見的操作方式:GET、POST、PUT、DELETE。

這四種操作方式分別對應四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源。

為什么要使用RESTful風格呢

這是因為RESTful風格的設計擁有以下特點:結構清晰、符合標準、易于理解、擴展方便。

試想一下,如果采用傳統的JSP模式,頁面內容和代碼混合在一起,而此時項目功能需新增移動端、微信小程序等其他客戶端,是否需要重新定義接口?

而采用RESTful的定義,不僅結構清晰,更重要的是易于擴展、適用性更廣泛。

RESTful風格示例

以用戶(User)的增刪改查為例,我們可以設計出一下接口形式:每列分別對應,(請求類型:請求地址:功能描述)

  • get : /user/list :獲取所有用戶信息
  • post:/user:創建用戶信息
  • put:/user:更新用戶信息
  • get:/user/1:獲取資源標識(id)為1的用戶信息
  • delete:/user/1:刪除資源標識(id)為1的用戶信息

看起來是不是簡潔、清晰、方便很多?

如果再和SpringBoot結合起來,那就更加方便。下面展示部分通過SpringBoot來實現Controller層的代碼。

@RestController@RequestMapping("/user")public class RestfulController {    @Resource    private UserService userService;    /**     * 創建用戶操作     */    @PostMapping    public User addUser(User user) {        return userService.addUser(user);    }    /**     * 獲取所需用戶操作     */    @GetMapping("/list")    public List listUser() {        return userService.findAll();    }    /**     * 更新用戶     */    @PutMapping    public User update(User user) {        return userService.update(user);    }    /**     * 修改用戶名     */    @PatchMapping    public User updateUsername(User user) {        return userService.updateUsername(user);    }    /**     * 獲取用戶     */    @GetMapping("{id}")    public User get(@PathVariable("id") Long id) {        return userService.findById(id);    }    /**     * 刪除用戶     */    @DeleteMapping("{id}")    public void delete(@PathVariable("id") Long id) {        userService.delete(id);    }}

精品SpringBoot 2.x視頻教程

https://edu.csdn.net/course/detail/20369,精品Spring Boot 2.x視頻教程,打造一套最全的Spring Boot 2.x視頻教程。

本文首發來自微信公眾號:程序新視界。一個軟實力、硬技術同步學習的平臺。

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

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

相關文章

java jdbc 增刪改封裝_JAVA JDBC 常規增刪改查簡單封裝

JAVA JDBC 常規增刪改查簡單封裝,可滿足大多基本要求作用:1, 查詢列表是直接返回List對象,不必再遍歷;2, 單條查詢直接返回對象;3, 執行sql僅需一個方法搞定;package com.Main.Tools…

python wget安裝_Macbook系統環境安裝wget的2個方法 - 傳統包及Homebrew安裝

考慮到自身項目的拓展需要,朋友建議學習Python爬蟲這樣對于做大數據采集有較大的幫助,老蔣雖然每天也都接觸一些腳本和程序的修改,但是并沒有專業和系統的學習某一項編程。所以還是準備陸續的學習Python語言,無論有沒有基礎&#…

java 程序找錯_java代碼找錯

展開全部你試一下這個行不行,輸入的時候是數字e69da5e6ba903231313335323631343130323136353331333335313138,數字,數字;數字,數字。。。。。的格式,你把我注釋的那個輸入行(String stInput input.next();)的注釋去掉,把我字符串寫死的那行(…

zookeeper 分布式鎖_關于redis分布式鎖,zookeeper分布式鎖原理的一些學習與思考

編輯:業余草來源:https://www.xttblog.com/?p4946首先分布式鎖和我們平常講到的鎖原理基本一樣,目的就是確保,在多個線程并發時,只有一個線程在同一刻操作這個業務或者說方法、變量。在一個進程中,也就是一…

Java線程怎么發送消息_Java客戶端Socket如何能在阻塞線程下收到服務端發送來的消息?...

最近在寫Socket客戶端的時候遇到點問題客戶端在創建時創建了2個線程一個監聽鍵盤輸入事件,使用的是buffered,當檢測到輸入完成時寫入流發送給服務端。String content "";while (!(content bufferedReader.readLine()).equals("exit&quo…

python函數參數傳遞機制_Python 學習筆記(一) 理解Python的函數傳參機制

對于剛接觸Python不久的新手,Python的函數傳參機制往往會讓人迷惑。學過C的同學都知道函數參數可以傳值或者傳地址。比如下面這段代碼點擊(此處)折疊或打開void func(int input) {input 100;}int a 0;func(a);printf("%d", a);結果應該是打印0&#xff…

網頁無法調用java9_JAVA 9 (內部類,異常,包)

內部類:將一個類定義在另一個類里面,稱里面那個類為內部類。舉例:class Zx{public static void main(String []arr){Outer o new Outer();o.method();}}class Outer{class Inner //內部類,可以定義多個內部類{void function(){S…

python renamer模塊_Python - 批量文件重命名

兩個目標兩個:1. 輸入一組文件名,進行批量重命名;2. 輸入一組目錄名,批量重命名各個目錄下的文件。附加功能:1. 可根據文件的創建日期對文件重新排序;2. 重命名方式為遞增數列,可帶前后綴&#…

spark算子_Spark篇之持久化算子

一、前述Spark中控制算子也是懶執行的,需要Action算子觸發才能執行,主要是為了對數據進行緩存。控制算子有三種,cache,persist,checkpoint,以上算子都可以將RDD持久化,持久化的單位是partition。cache和persist都是懶執…

java g1 gc ref proc_深入理解垃圾收集器的G1及日志分析

盡管Hotspot 最新的垃圾回收器G1是在2006年推出的。但是G1從推行至今的市場反響來看,但現在足以證明這款垃圾收集器是經得起考驗的,從java9開始,就默認為G1垃圾收集器。G1是一款面向服務端應用的垃圾收集器。HotSpot開發團隊賦予它的使命是(在…

python爬取嗶哩嗶哩視頻_Python實現視頻爬取下載

注:源內容來自公眾號【python學習開發】一般情況下我們使用爬蟲更多的是對數據或者圖片進行爬取,今天在這里和大家分享一下關于使用爬蟲技術來進行視頻下載的方法,不僅可以方便的下載一些體積小的視頻,針對大容量的視頻下載同樣試用。接下來我們來介紹此次爬取視頻過…

java約瑟夫環pta上_cdoj525-猴子選大王 (約瑟夫環)

約瑟夫斯問題問題有時候也被描述成猴子選大王問題,題目如下.(最后會貼上約瑟夫問題的來歷) 一群猴子排成一圈,按1,2,…,n依次編號. 然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最后只剩下一只猴子為止,那只猴…

java++記錄+運行_記錄java+testng運行selenium(三)---xml、ini、excel、日志等配置

一: ini文件ini目前只用處存儲瀏覽類型及需要打開的url,ini文件放在configs文件夾下面。讀取ini代碼如下:1 packagetoolskit.documents;23 import java.io.*;4 import java.util.*;56 /**7 * ClassName: ReadIni8 * Author: DingDong9 * D…

python字符串前面加f什么意思_Python 字符串前面加u,r,b,f的含義

1、字符串前加 u例:u"我是含有中文字符組成的字符串。"作用:后面字符串以 Unicode 格式 進行編碼,一般用在中文字符串前面,防止因為源碼儲存格式問題,導致再次使用時出現亂碼。2、字符串前加 r例&#xff1a…

mysql居左查詢abcd_MySql速查手冊

索引定義索引用來快速地尋找那些具有特定值的記錄,所有MySQL索引都以B樹的形式保存。就像是數據的目錄。索引類型唯一索引主鍵索引B-Tree普通索引R-Tree聯合索引Hash全文索引FullText在mysql中fulltext索引只針對myisam生效。符合索引對于創建的多列索引(復合索引)&…

和python哪個容易胖_為什么有些人特別容易胖?

7種人,最容易被肥胖盯上,其中有你嗎?胖,總是來得猝不及防,肥肉也總是不知不覺地長出來……許多胖友對自己的身材老摸不著腦,其實,長胖都是有跡可循的!正如下面這7類人,就…

loadrunner 錯誤: 無法找到 java.exe_LoadRunner錯誤及解決方法總結

1. error:missing newline in d:\loadrunner\name.dat場景執行時報error:missing newline in d:\loadrunner\name.dat第二次執行不報兩個解決辦法:第一:如果參數不是很多的話,不要打開記事本去編輯參數,就直接在LR提供的參數的表格…

gif透明背景動畫_【超實用干貨! 】iPad上的動畫App大推薦

作者/立夏編輯/彼方大家好,我是立夏。大概在兩年前吧我為大家寫過幾款動畫APP的評測,這一次我也想給大家推薦一些我的新寵,供大家參考。我在這里就不過多提及如Animation Desk、Procreate或是Callipeg之類知名度相對更高一些的動畫App了&…

python框架是干什么的_django框架是干什么的

django(Python Web 框架)Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MTV的框架模式,即模型M,視圖V和模版T。它最初是被開發來用于管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟件。…

iphone如何信任軟件_【手機軟件】千禾影院:全新觀影神器,支持安卓+iOS,最新、最全、高清、免費!...

Hello,大家好,我是春哥!每天記得打卡哦!感謝每一位小伙伴們的關注和支持!免責聲明大部分資源來源于網絡,僅供學習和交流使用,如有侵權請聯系我們刪除。每期文章末尾都會有關鍵詞,在公眾號發消息…