要想更清楚地了解restful api是什么,我們還需要簡(jiǎn)單了解下REST是什么?它是一種軟件架構(gòu),決定了 API 的工作條件。2000年,羅伊·菲爾丁提出了代表狀態(tài)轉(zhuǎn)移(REST)作為設(shè)計(jì)網(wǎng)絡(luò)服務(wù)的架構(gòu)方法,REST 最初作為管理復(fù)雜網(wǎng)絡(luò)(例如互聯(lián)網(wǎng))上的通信的指南而建立。使用者可以使用基于 REST 的架構(gòu)為高性能和可靠的大規(guī)模通信提供支持;可以輕松應(yīng)用和修改此種架構(gòu),為任何 API 系統(tǒng)帶來可見性和跨平臺(tái)可能性。
REST架構(gòu)是一種基于超媒體構(gòu)建分布式系統(tǒng)的建筑風(fēng)格,它獨(dú)立于任何底層協(xié)議,不一定與HTTP綁定,唯一的要求是它們要符合以下六種 架構(gòu)約束(架構(gòu)約定):
簡(jiǎn)而言之,在REST架構(gòu)風(fēng)格中,數(shù)據(jù)和功能被視為資源,并使用統(tǒng)一資源標(biāo)識(shí)符(URI)進(jìn)行訪問。
了解了REST是什么,我們?cè)賮砹私庀翿est api 是什么?一般情況下,遵循 REST 架構(gòu)風(fēng)格的 API 稱為 REST API。因?yàn)镽EST 是一組架構(gòu)規(guī)范,并非協(xié)議或標(biāo)準(zhǔn),API 開發(fā)人員可以采用各種方式實(shí)施 REST。例如,當(dāng)客戶端通過 REST API 提出請(qǐng)求時(shí),它會(huì)將資源狀態(tài)表述傳遞給請(qǐng)求者或終端。該信息或表述通過 HTTP 以下列某種格式傳輸:JSON(Javascript 對(duì)象表示法)、HTML、XLT、Python、PHP 或純文本。
由于JSON 能被人和機(jī)器‘讀’,在當(dāng)下開放API環(huán)境及大部分企業(yè)內(nèi)部應(yīng)用中,實(shí)施REST API時(shí),默認(rèn)都采用REST約定+HTTP+JSON,這種組合已經(jīng)是一種事實(shí)上的標(biāo)準(zhǔn)。 下文及本網(wǎng)站提到的REST API、[[wiki:http-api|HTTP API]、Web API,在具體實(shí)施時(shí),一般都是‘__REST約定+HTTP+JSON’標(biāo)準(zhǔn)的API__。
需要注意的地方: RESTful API采用HTTP時(shí),HTTP頭和參數(shù)、 HTTP 方法也很重要,因?yàn)槠渲邪苏?qǐng)求的元數(shù)據(jù)、授權(quán)、統(tǒng)一資源標(biāo)識(shí)符(URI)、緩存、cookie 等重要標(biāo)識(shí)信息。有請(qǐng)求頭和響應(yīng)頭,每個(gè)頭都有自己的 HTTP 連接信息和狀態(tài)碼。在《RESTfal API 設(shè)計(jì)》一文中會(huì)重點(diǎn)講這部分內(nèi)容的設(shè)計(jì)。
與Rest api 是什么?相關(guān)的一些基本概念:
? REST API 是什么- Payload
? REST API 是什么 – HTTP Methods
? REST API 是什么 – HTTP Status Codes
RESTful API就是REST API,術(shù)語 REST API 和 RESTful API 可以互換使用。
學(xué)習(xí)RESTful API時(shí)容易混淆的概念問題:
統(tǒng)一接口是一切 RESTful Web 服務(wù)設(shè)計(jì)的基礎(chǔ)。其表示服務(wù)器以標(biāo)準(zhǔn)格式傳輸信息。格式化的資源在 REST 中稱為表征。此格式可以與服務(wù)器應(yīng)用程序上資源的內(nèi)部表征不同。例如,服務(wù)器可以將數(shù)據(jù)存儲(chǔ)為文本,但以 JSON 表征格式發(fā)送該數(shù)據(jù)。
統(tǒng)一接口強(qiáng)制實(shí)施四個(gè)架構(gòu)約束:
REST資源中信息的關(guān)鍵抽象是一個(gè)資源。我們可以命名的任何信息都可以成為一種資源。例如,REST資源可以是文檔或圖像、時(shí)間服務(wù)、其他資源的集合或非虛擬對(duì)象(例如一個(gè)人)。
在任何特定時(shí)間,資源的狀態(tài)都被稱為資源表示。資源表示包括:
REST API由一個(gè)相互鏈接的資源組成組成。這組資源被稱為REST API的資源模型。
REST使用資源標(biāo)識(shí)符來識(shí)別客戶端和服務(wù)器組件之間交互中涉及的每個(gè)資源。
表示的數(shù)據(jù)格式被稱為媒體類型。媒體類型標(biāo)識(shí)了一個(gè)規(guī)范,該規(guī)范定義了如何處理表示。
RESTful API看起來像超文本。每個(gè)可尋址信息單元都攜帶一個(gè)地址,要么顯式(例如,鏈接和id屬性),要么隱式(例如,從媒體類型定義和表示結(jié)構(gòu)派生)。
此外,資源表示應(yīng)是自我描述的:客戶不需要知道資源是員工還是設(shè)備。它應(yīng)該根據(jù)與資源相關(guān)的媒體類型進(jìn)行操作。
因此,在實(shí)踐中,我們將創(chuàng)建許多自定義媒體類型——通常與一個(gè)資源關(guān)聯(lián)的一種媒體類型。
每種媒體類型都定義了默認(rèn)處理模型。例如,HTML定義了超文本的渲染過程和圍繞每個(gè)元素的瀏覽器行為。
RESTful API是隨著互聯(lián)網(wǎng)SAAS業(yè)務(wù)的發(fā)展而興盛,post:開放API給更多的人使用是其核心目標(biāo)之一,2011年由SmartBear Software的首席執(zhí)行官Dann Milner提出OpenAPI描述,逐步發(fā)展為一套R(shí)EST API描述規(guī)范(它類似SOAP的描述規(guī)范WSDL)。
Open API描述規(guī)范 為REST API on HTTP提供了一個(gè)正式的標(biāo)準(zhǔn),它使用YAML或JSON格式,描述API的路徑、參數(shù)、請(qǐng)求和響應(yīng)的結(jié)構(gòu)、錯(cuò)誤碼等信息。
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://cnzze.cn/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://cnzze.cn/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 描述是計(jì)算機(jī)可讀的,因此可以使用它來執(zhí)行如下操作:
RESTful API的架構(gòu)約束理解起來很容易,設(shè)計(jì)起來靈活度很大,以下是一些主要設(shè)計(jì)原則:
https://adventure-works.com/orders/1
{"orderId":1,"orderValue":99.90,"productId":1,"quantity":1}
但在具體操作中卻比較復(fù)雜,網(wǎng)上有大量的API設(shè)計(jì)指導(dǎo)及規(guī)范,我們搜集、整理了一部分:
RESTful API設(shè)計(jì)概要RESTful API 狀態(tài)碼設(shè)計(jì)指南RESTful API 設(shè)計(jì)檢查清單
2008年,Leonard Richardson為Rest API提出了以下 RESTful成熟度模型:
根據(jù)Fielding的定義,第3級(jí)對(duì)應(yīng)于一個(gè)真正的RESTful API。在實(shí)踐中,許多已發(fā)布的Web API大約在2級(jí)左右。
RESTful API的安全性 也始于行業(yè)最佳實(shí)踐,例如使用散列算法確保密碼安全性,使用 HTTPS 實(shí)現(xiàn)安全數(shù)據(jù)傳輸。 像 OAuth 2.0這樣的授權(quán)框架可以幫助限制第三方應(yīng)用程序的特權(quán)。 使用 HTTP 頭中的時(shí)間戳記,API 還可以拒絕在特定時(shí)間段后到達(dá)的任何請(qǐng)求。 同時(shí)也可以通過參數(shù)驗(yàn)證和 JSON Web 令牌等方式來確保只有經(jīng)過授權(quán)的客戶端才能訪問 API。
架構(gòu)風(fēng)格與基于網(wǎng)絡(luò)應(yīng)用軟件的架構(gòu)設(shè)計(jì)(中文修訂版)
10大REST API常見問題?
什么是API?(Aws)
REST與SOAP的區(qū)別?
介紹 Web 基礎(chǔ)架構(gòu)設(shè)計(jì)原則的經(jīng)典論文《架構(gòu)風(fēng)格與基于網(wǎng)絡(luò)的軟件架構(gòu)設(shè)計(jì)》導(dǎo)讀