日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

架构之:REST和RESTful

發布時間:2024/2/28 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 架构之:REST和RESTful 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 簡介
  • REST
  • REST和RESTful API
  • REST架構的基本原則
    • Uniform interface統一的接口
    • Client–server 客戶端和服務器端獨立
    • Stateless無狀態
    • Cacheable可緩存
    • Layered system分層系統
    • Code on demand按需編碼
    • RESTful API的例子
  • 總結

簡介

近幾年微服務是如火如荼的在發展,而微服務之間的調用和漸漸的從RPC調用轉移到了HTTP調用。于是經常聽到有些同事說我們提供微服務并且暴露RESTful接口給別的系統,但是什么是RESTful接口呢?它和REST有什么關系呢?
別急,本文將會帶你一探究竟。

REST

REST是一種架構。

首先我們要記住的是REST是一種架構方式,并不是一種協議。它只是告訴我們應該如何去搭建一個可靠的系統。

REST的全稱是REpresentational State Transfer。中文可能不好翻譯,我們暫將其定義為有代表性的狀態轉義。它是分布式系統的一種架構方式。最先是由Roy Fielding在2000年他的博士畢業論文中首先提到的。

REST架構在現在的web應用中非常常見,它并不涉及到具體的編碼,它只是一種高級比的指導方案,具體的實現還是由你自己決定。

REST和RESTful API

我們剛剛講解了REST,那么REST和RESTful API有什么關系呢?

我們知道,API是服務和服務之間,客戶端和服務端之間溝通的橋梁,通過API之間的調用,我們可以從服務器中獲取到需要的資源信息。而RESTful API就是符合REST架構的API。

所以不是所有的HTTP協議的API都是RESTful API,它的前提是你的系統是REST架構的。

REST架構的基本原則

那么什么樣的系統才能被稱為是REST架構的系統呢?根據Roy Fielding的論文描述,REST架構的系統有6個基本特征。我們一一來說明。

Uniform interface統一的接口

在REST架構中,最為核心的元素就是資源。我們將資源定義為一個個的獨立的URI。一個資源用一個獨立并且唯一的URI來表示。

單個的資源不能太大也不能太小,它表示的是一個獨立的可以操作的單位。這些資源通過通用的獲取方式來進行獲取和操作。比如對資源的CURD可以分別用不同的HTTP method來表示(PUT,POST,GET,DELETE)。

同時需要對資源進行統一的命名,定義統一的link格式和數據格式。

還有一點,根據HATEOAS協議,一個資源還應該包含指向該資源或者相關資源的URI。可以能有些同學現在對這一點還有些疑惑,不過沒關系,后面我們會詳細對HATEOAS進行講解。

Spring也提供了對HATEOAS的支持,我們看一個基本的HATEOAS的請求:

GET http://localhost:8080/greeting

該請求的返回可以是這樣的:

{"content":"Hello, World!","_links":{"self":{"href":"http://localhost:8080/greeting?name=World"}} }

大家可以看到上面返回了一個代表自己URI的資源鏈接。

Client–server 客戶端和服務器端獨立

另外的一條規則就是客戶端和服務器端獨立,客戶端和服務器端互不影響,他們之間的唯一交互就是API的調用。

對于客戶端來說只要能夠通過API獲取到對應的資源即可,并不關心服務器是怎么實現的。

而對于服務器端來說,只需要提供保持不變的API即可,自己內部的實現可以自由決定,也不需要考慮客戶端是如何使用這些API的。

這條規則對于現在的很多前后端分離的架構來說已經使用了。

Stateless無狀態

和HTTP協議一樣,REST架構中各個服務之間的API調用也是無狀態的。無狀態的意思是服務器并不保存API調用的歷史記錄,也不存儲任何關于客戶端的信息。對于服務器來說,每個請求都是最新的。

所以用戶的狀態信息是在客戶端進行保存和維護的,客戶端需要在每個接口帶上可以識別用戶的唯一標記,從而在服務器端進行認證和識別,從而獲取到對應的資源。

Cacheable可緩存

緩存是提升系統速度的利器,對于REST的資源也是一樣的,在REST中對于可緩存的資源需要標明它是可以被緩存的。

從而對應的調用方可以將這些資源進行緩存,從而提升系統的效率。

Layered system分層系統

現代的系統基本上都是分層的,在REST架構中也是一樣,只要保證對外提供的資源URI是一致的,架構并不關心你到底使用的是幾層架構。

Code on demand按需編碼

一般來說,REST架構中各個服務通常是通過JSON或者XML來進行交互的。但是這并不是硬性規定。可以返回可執行的代碼直接運行。

RESTful API的例子

我們來舉幾個常見的RESTful API的例子,來見識一下這種架構的神奇之處:

請求一個entity:

GET https://services.odata.org/TripPinRESTierService/People

根據ID請求一個entity:

GET https://services.odata.org/TripPinRESTierService/People('russellwhyte')

請求一個entity的某個屬性:

GET https://services.odata.org/TripPinRESTierService/Airports('KSFO')/Name

使用filter進行查詢:

GET https://services.odata.org/TripPinRESTierService/People?$filter=FirstName eq 'Scott'

修改數據:

POST https://services.odata.org/TripPinRESTierService/People header: {Content-Type: application/json } body: {"UserName":"lewisblack","FirstName":"Lewis","LastName":"Black","Emails":["lewisblack@example.com"],"AddressInfo": [{"Address": "187 Suffolk Ln.","City": {"Name": "Boise","CountryRegion": "United States","Region": "ID"}}] }

刪除數據:

DELETE https://services.odata.org/TripPinRESTierService/People('russellwhyte')

更新數據:

PATCH https://services.odata.org/TripPinRESTierService/People('russellwhyte') header: {Content-Type: application/json } body: {"FirstName": "Mirs","LastName": "King" }

總結

本文講解了REST和RESTful相關的概念,那么對于其中最重要的資源如何定義呢?敬請期待后續文章。

本文已收錄于 http://www.flydean.com/01-rest-restful/

最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

總結

以上是生活随笔為你收集整理的架构之:REST和RESTful的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。