要想更清楚地了解restful api是什么,我們還需要簡單了解下REST是什么?它是一種軟件架構,決定了 API 的工作條件。2000年,羅伊·菲爾丁提出了代表狀態轉移(REST)作為設計網絡服務的架構方法,REST 最初作為管理復雜網絡(例如互聯網)上的通信的指南而建立。使用者可以使用基于 REST 的架構為高性能和可靠的大規模通信提供支持;可以輕松應用和修改此種架構,為任何 API 系統帶來可見性和跨平臺可能性。
REST架構是一種基于超媒體構建分布式系統的建筑風格,它獨立于任何底層協議,不一定與HTTP綁定,唯一的要求是它們要符合以下六種 架構約束(架構約定):
簡而言之,在REST架構風格中,數據和功能被視為資源,并使用統一資源標識符(URI)進行訪問。
了解了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
RESTful API就是REST API,術語 REST API 和 RESTful API 可以互換使用。
學習RESTful API時容易混淆的概念問題:
統一接口是一切 RESTful Web 服務設計的基礎。其表示服務器以標準格式傳輸信息。格式化的資源在 REST 中稱為表征。此格式可以與服務器應用程序上資源的內部表征不同。例如,服務器可以將數據存儲為文本,但以 JSON 表征格式發送該數據。
統一接口強制實施四個架構約束:
REST資源中信息的關鍵抽象是一個資源。我們可以命名的任何信息都可以成為一種資源。例如,REST資源可以是文檔或圖像、時間服務、其他資源的集合或非虛擬對象(例如一個人)。
在任何特定時間,資源的狀態都被稱為資源表示。資源表示包括:
REST API由一個相互鏈接的資源組成組成。這組資源被稱為REST API的資源模型。
REST使用資源標識符來識別客戶端和服務器組件之間交互中涉及的每個資源。
表示的數據格式被稱為媒體類型。媒體類型標識了一個規范,該規范定義了如何處理表示。
RESTful API看起來像超文本。每個可尋址信息單元都攜帶一個地址,要么顯式(例如,鏈接和id屬性),要么隱式(例如,從媒體類型定義和表示結構派生)。
此外,資源表示應是自我描述的:客戶不需要知道資源是員工還是設備。它應該根據與資源相關的媒體類型進行操作。
因此,在實踐中,我們將創建許多自定義媒體類型——通常與一個資源關聯的一種媒體類型。
每種媒體類型都定義了默認處理模型。例如,HTML定義了超文本的渲染過程和圍繞每個元素的瀏覽器行為。
RESTful API是隨著互聯網SAAS業務的發展而興盛,post:開放API給更多的人使用是其核心目標之一,2011年由SmartBear Software的首席執行官Dann Milner提出OpenAPI描述,逐步發展為一套REST API描述規范(它類似SOAP的描述規范WSDL)。
Open API描述規范 為REST API on HTTP提供了一個正式的標準,它使用YAML或JSON格式,描述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://www.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://www.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的架構約束理解起來很容易,設計起來靈活度很大,以下是一些主要設計原則:
https://adventure-works.com/orders/1
{"orderId":1,"orderValue":99.90,"productId":1,"quantity":1}
但在具體操作中卻比較復雜,網上有大量的API設計指導及規范,我們搜集、整理了一部分:
RESTful API設計概要RESTful API 狀態碼設計指南RESTful API 設計檢查清單
2008年,Leonard Richardson為Rest API提出了以下 RESTful成熟度模型:
根據Fielding的定義,第3級對應于一個真正的RESTful API。在實踐中,許多已發布的Web API大約在2級左右。
RESTful API的安全性 也始于行業最佳實踐,例如使用散列算法確保密碼安全性,使用 HTTPS 實現安全數據傳輸。 像 OAuth 2.0這樣的授權框架可以幫助限制第三方應用程序的特權。 使用 HTTP 頭中的時間戳記,API 還可以拒絕在特定時間段后到達的任何請求。 同時也可以通過參數驗證和 JSON Web 令牌等方式來確保只有經過授權的客戶端才能訪問 API。
架構風格與基于網絡應用軟件的架構設計(中文修訂版)
10大REST API常見問題?
什么是API?(Aws)
REST與SOAP的區別?
介紹 Web 基礎架構設計原則的經典論文《架構風格與基于網絡的軟件架構設計》導讀