1、什么是REST?

要想更清楚地了解restful api是什么,我們還需要簡單了解下REST是什么?它是一種軟件架構,決定了 API 的工作條件。2000年,羅伊·菲爾丁提出了代表狀態轉移(REST)作為設計網絡服務的架構方法,REST 最初作為管理復雜網絡(例如互聯網)上的通信的指南而建立。使用者可以使用基于 REST 的架構為高性能和可靠的大規模通信提供支持;可以輕松應用和修改此種架構,為任何 API 系統帶來可見性和跨平臺可能性。
REST架構是一種基于超媒體構建分布式系統的建筑風格,它獨立于任何底層協議,不一定與HTTP綁定,唯一的要求是它們要符合以下六種 架構約束(架構約定):

  1. 統一接口。 無論請求來自何處,對同一資源發出的所有 API 請求都應該看起來相同。 REST API 應確保同一條數據(例如用戶的姓名或電子郵件地址)僅屬于一個統一資源標識符 (URI)。 資源不應過大,但應包含客戶可能需要的每一條信息。
  2. 客戶端/服務器解耦。 在 REST API 設計中,客戶端和服務器的應用程序必須彼此完全獨立。 客戶端應用程序應該知道的唯一信息是所請求資源的 URI;它不能以任何其他方式與服務器應用程序交互。 同樣,除了通過 HTTP 將客戶端應用程序傳遞到所請求的數據外,服務器應用程序不應修改客戶端應用程序。
  3. 無狀態。 REST API 是無狀態的,這意味著每個請求都需要包含處理它所需的全部信息。 換句話說,REST API 不需要任何服務器端會話。 不允許服務器應用程序存儲與客戶端請求相關的任何數據。
  4. 可緩存性。 如果可能,資源應該可以在客戶端或服務器端緩存。 服務器響應還需要包含有關是否允許對交付的資源進行緩存的信息。 目標是提高客戶端的性能,同時增強服務器端的可擴展性。
  5. 分層系統架構。 在 REST API 中,調用和響應都會經過多個不同的層。 根據經驗,不要假設客戶端和服務器應用程序直接連接到彼此。 通信環路中可能包含多個不同的中介服務器。 需要設計 REST API,讓客戶端和服務器都無法判斷它是與最終應用程序還是中介服務器進行通信。
  6. 按需編碼(可選)。 REST API 通常發送靜態資源,但在某些情況下,響應也可以包含可執行代碼(例如 Java 小程序)。 在這些情況下,代碼只應按需運行。

簡而言之,在REST架構風格中,數據和功能被視為資源,并使用統一資源標識符(URI)進行訪問。

2、Rest api 是什么?

了解了REST是什么,我們再來了解下Rest api 是什么?一般情況下,遵循 REST 架構風格的 API 稱為 REST API。因為REST 是一組架構規范,并非協議或標準,API 開發人員可以采用各種方式實施 REST。例如,當客戶端通過 REST API 提出請求時,它會將資源狀態表述傳遞給請求者或終端。該信息或表述通過 HTTP 以下列某種格式傳輸:JSON(Javascript 對象表示法)、HTML、XLT、Python、PHP 或純文本。

由于JSON 能被人和機器‘’,在當下開放API環境及大部分企業內部應用中,實施REST API時,默認都采用REST約定+HTTP+JSON,這種組合已經是一種事實上的標準。 下文及本網站提到的REST API、[[wiki:http-api|HTTP API]、Web API,在具體實施時,一般都是‘__REST約定+HTTP+JSON’標準API__。

需要注意的地方: RESTful API采用HTTP時,HTTP頭和參數、 HTTP 方法也很重要,因為其中包含了請求的元數據、授權、統一資源標識符(URI)、緩存、cookie 等重要標識信息。有請求頭和響應頭,每個頭都有自己的 HTTP 連接信息和狀態碼。在《RESTfal API 設計》一文中會重點講這部分內容的設計。

與Rest api 是什么?相關的一些基本概念:

? REST API 是什么- Payload
? REST API 是什么 – HTTP Methods
? REST API 是什么 – HTTP Status Codes

3、RESTful API是什么?

RESTful API就是REST API,術語 REST API 和 RESTful API 可以互換使用。

學習RESTful API時容易混淆的概念問題:

4、理解"統一接口"原則

統一接口是一切 RESTful Web 服務設計的基礎。其表示服務器以標準格式傳輸信息。格式化的資源在 REST 中稱為表征。此格式可以與服務器應用程序上資源的內部表征不同。例如,服務器可以將數據存儲為文本,但以 JSON 表征格式發送該數據。

統一接口強制實施四個架構約束:

  1. 請求應確定資源。它們通過使用統一的資源標識符實現此功能。
  2. 客戶端包含資源表征中的足夠信息以修改或刪除資源(如需要)。服務器通過發送進一步描述資源的元數據以符合這一條件。
  3. 客戶端接收有關如何進一步處理表征的信息。服務器通過發送自描述信息實現此功能,該信息包含了有關客戶端如何以最佳方式使用這些信息的元數據。
  4. 客戶端接收有關其完成任務需要的所有其他相關資源的信息。服務器通過在表征中發送超鏈接實現此功能,以便客戶端可以動態發現更多資源。

二、理解REST資源概念

REST資源中信息的關鍵抽象是一個資源。我們可以命名的任何信息都可以成為一種資源。例如,REST資源可以是文檔或圖像、時間服務、其他資源的集合或非虛擬對象(例如一個人)。
在任何特定時間,資源的狀態都被稱為資源表示。資源表示包括:

REST API由一個相互鏈接的資源組成組成。這組資源被稱為REST API的資源模型

1)資源標識符

REST使用資源標識符來識別客戶端和服務器組件之間交互中涉及的每個資源。

2)超媒體

表示的數據格式被稱為媒體類型。媒體類型標識了一個規范,該規范定義了如何處理表示。

RESTful API看起來像超文本每個可尋址信息單元都攜帶一個地址,要么顯式(例如,鏈接和id屬性),要么隱式(例如,從媒體類型定義和表示結構派生)。

3)自我描述

此外,資源表示應是自我描述的:客戶不需要知道資源是員工還是設備。它應該根據與資源相關的媒體類型進行操作。
因此,在實踐中,我們將創建許多自定義媒體類型——通常與一個資源關聯的一種媒體類型。
每種媒體類型都定義了默認處理模型。例如,HTML定義了超文本的渲染過程和圍繞每個元素的瀏覽器行為。

三、如何描述RESTful API?

RESTful API是隨著互聯網SAAS業務的發展而興盛,post:開放API給更多的人使用是其核心目標之一,2011年由SmartBear Software的首席執行官Dann Milner提出OpenAPI描述,逐步發展為一套REST API描述規范(它類似SOAP的描述規范WSDL)。
Open API描述規范 為REST API on HTTP提供了一個正式的標準,它使用YAMLJSON格式,描述API的路徑、參數、請求和響應的結構、錯誤碼等信息。
JSON格式示意:

{
"title": "Sample Pet Store App",
"description": "This is a sample server for a pet store.",
"termsOfService": "http://explinks.com/terms/",
"contact": {
"name": "API Support",
"url": "http://m.dlbhg.com/support",
"email": "support@example.com"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "1.0.1"
}

YAML格式示意:

title: Sample Pet Store App
description: This is a sample server for a pet store.
termsOfService: http://explinks.com/terms/
contact:
name: API Support
url: http://m.dlbhg.com/support
email: support@example.com
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
version: 1.0.1

由于 OpenAPI 描述是計算機可讀的,因此可以使用它來執行如下操作:

四、如何設計RESTful API?

RESTful API的架構約束理解起來很容易,設計起來靈活度很大,以下是一些主要設計原則:

但在具體操作中卻比較復雜,網上有大量的API設計指導及規范,我們搜集、整理了一部分:

RESTful API設計概要RESTful API 狀態碼設計指南RESTful API 設計檢查清單

五、如何評估RESTful API成熟度?

2008年,Leonard Richardson為Rest API提出了以下 RESTful成熟度模型:

根據Fielding的定義,第3級對應于一個真正的RESTful API。在實踐中,許多已發布的Web API大約在2級左右。

六、RESTful API的安全性

RESTful API的安全性 也始于行業最佳實踐,例如使用散列算法確保密碼安全性,使用 HTTPS 實現安全數據傳輸。 像 OAuth 2.0這樣的授權框架可以幫助限制第三方應用程序的特權。 使用 HTTP 頭中的時間戳記,API 還可以拒絕在特定時間段后到達的任何請求。 同時也可以通過參數驗證和 JSON Web 令牌等方式來確保只有經過授權的客戶端才能訪問 API。

參考資料:

架構風格與基于網絡應用軟件的架構設計(中文修訂版)
10大REST API常見問題?
https://restfulapi.net
https://aws.amazon.com/cn/what-is/restful-api/
什么是API?(Aws)
REST與SOAP的區別?
介紹 Web 基礎架構設計原則的經典論文《架構風格與基于網絡的軟件架構設計》導讀

一站搜索、試用、比較全球API!
冪簡集成已收錄 6656種API!
試用API,一次比較多個渠道
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
国产午夜精品久久久久久久| 91精品久久久久久蜜臀| 成人激情免费电影网址| 26uuu亚洲| 韩国精品免费视频| 久久久精品欧美丰满| 麻豆一区二区三区| 久久综合久久综合亚洲| 国产一区二区三区免费| 国产精品拍天天在线| 91免费观看国产| 日韩中文字幕1| 2020国产精品久久精品美国| av成人动漫在线观看| 亚洲成人免费影院| 国产日产欧美一区二区三区| 91老师片黄在线观看| 日韩黄色免费电影| 欧美高清在线一区| 7777精品伊人久久久大香线蕉| 精品一区二区影视| 亚洲va天堂va国产va久| 中文字幕精品在线不卡| 欧美日本一区二区三区四区| 国产二区国产一区在线观看| 亚洲电影视频在线| 亚洲欧洲美洲综合色网| 欧美不卡视频一区| 色综合色综合色综合色综合色综合| 视频一区二区中文字幕| 国产精品久久久久影院| 欧美一级精品大片| 在线中文字幕一区| 成+人+亚洲+综合天堂| 久久99日本精品| 天堂蜜桃91精品| 一区二区三区精密机械公司| 国产色爱av资源综合区| 日韩精品中文字幕一区二区三区| 欧美视频中文字幕| 97精品电影院| 91蜜桃传媒精品久久久一区二区| 国产精品77777| 国产精品资源在线看| 韩国欧美国产一区| 极品少妇xxxx精品少妇偷拍| 日本伊人精品一区二区三区观看方式| 亚洲综合网站在线观看| 一区二区三区四区在线播放| 亚洲精品欧美专区| 亚洲国产精品自拍| 亚洲欧美日韩人成在线播放| 最新日韩av在线| 亚洲久草在线视频| 亚洲一二三区视频在线观看| 午夜精品视频一区| 无吗不卡中文字幕| 精品影院一区二区久久久| 国内外精品视频| 国产一区二区精品在线观看| 风间由美一区二区av101| 99re这里都是精品| 欧美日韩国产大片| 日韩三级视频在线看| 日韩女优电影在线观看| 精品1区2区在线观看| 中文字幕第一区综合| 亚洲日韩欧美一区二区在线| 亚洲一区在线播放| 激情久久久久久久久久久久久久久久| 成人综合婷婷国产精品久久 | 高潮精品一区videoshd| 91无套直看片红桃| 7777精品伊人久久久大香线蕉最新版| 欧美tk—视频vk| 亚洲日本va午夜在线影院| 日日摸夜夜添夜夜添国产精品| 国内精品久久久久影院薰衣草 | 韩国精品一区二区| 91美女片黄在线观看91美女| 884aa四虎影成人精品一区| 久久久久久影视| 亚洲综合色视频| 国产成人午夜视频| 4438成人网| 亚洲黄色小说网站| 成人深夜福利app| 欧美一区二区在线看| 亚洲精选视频免费看| 国产精品自产自拍| 精品国产网站在线观看| 亚洲精品视频一区二区| 久久99精品国产91久久来源| 欧美视频在线观看一区| 国产精品第13页| 成人午夜av电影| 欧美成人一级视频| 婷婷开心激情综合| 在线观看成人免费视频| 国产精品欧美极品| 粉嫩久久99精品久久久久久夜| 精品剧情在线观看| 日韩成人一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 91老师片黄在线观看| 国产精品免费免费| 高清不卡在线观看| 久久久久久夜精品精品免费| 精品一区二区三区免费毛片爱| 88在线观看91蜜桃国自产| 婷婷亚洲久悠悠色悠在线播放| 欧美高清视频一二三区 | 亚洲精品视频免费看| 日本精品一区二区三区四区的功能| 国产日韩av一区二区| 成人精品免费看| 亚洲色图欧洲色图| 欧美色网一区二区| 麻豆一区二区三| 欧美激情综合五月色丁香小说| 成人黄色在线网站| 亚洲激情成人在线| 日韩一卡二卡三卡四卡| 日本免费在线视频不卡一不卡二| 欧美一二三区在线观看| 国产乱人伦精品一区二区在线观看| 中文字幕国产一区二区| 91丝袜国产在线播放| 亚洲va欧美va国产va天堂影院| 日韩午夜小视频| 国产黄色精品网站| 亚洲一区二区三区在线看| 777午夜精品视频在线播放| 精品一区二区三区免费播放| 亚洲国产精品激情在线观看| 欧美午夜宅男影院| 国产麻豆精品在线| 夜夜夜精品看看| 国产目拍亚洲精品99久久精品| 欧美色倩网站大全免费| 蜜乳av一区二区| 亚洲欧美二区三区| 精品成人在线观看| 精品视频色一区| 91美女片黄在线| 国产成人免费在线观看不卡| 夜夜嗨av一区二区三区| 欧美极品xxx| 久久久影视传媒| 日韩欧美国产三级电影视频| 色www精品视频在线观看| 国内精品国产成人国产三级粉色| 亚洲一线二线三线视频| 久久精品欧美一区二区三区麻豆| 欧美视频精品在线| 91蜜桃免费观看视频| 成人高清免费观看| 国产乱码字幕精品高清av| 日本中文一区二区三区| 亚洲自拍偷拍欧美| 亚洲一区免费视频| 一区二区在线看| 国产精品久久久久影院| 国产蜜臀97一区二区三区| 久久只精品国产| 久久影院午夜片一区| 日韩欧美亚洲国产精品字幕久久久| 日本韩国一区二区三区| 北条麻妃国产九九精品视频| 国产精品亚洲成人| 国产成人一区二区精品非洲| 国产69精品久久久久毛片| 福利视频网站一区二区三区| 国产成人aaa| 99在线热播精品免费| www.欧美亚洲| 色狠狠综合天天综合综合| 日本韩国欧美一区| 欧美手机在线视频| 精品区一区二区| 国产欧美日韩综合| 亚洲免费观看视频| 亚洲高清视频中文字幕| 日韩不卡在线观看日韩不卡视频| 免费的成人av| 成人夜色视频网站在线观看| 91免费观看视频| 欧美日韩免费观看一区二区三区| 日韩网站在线看片你懂的| 日韩精品中午字幕| 国产精品欧美精品| 午夜精品视频在线观看| 国产在线精品一区二区三区不卡| 成人免费黄色在线| 欧美午夜精品久久久久久孕妇| 日韩欧美中文一区| 《视频一区视频二区| 久久9热精品视频| 在线精品国精品国产尤物884a| 久久久青草青青国产亚洲免观|