[我所理解的REST] 1.REST的起源

来源:http://www.cnblogs.com/linianhui/archive/2017/09/06/rest-birth.html
-Advertisement-
Play Games

0. 世界上第一個網站 1990年12月20日,這一天對於現在的互聯網來說意義非凡。歐洲核子研究組織(CREN)的科學家Tim Berners-Lee在一臺NeXT電腦上啟動了世界上的第一個網站(當然當時僅能Tim Berners-Lee自己訪問),這臺電腦至今仍保留在CREN,但當年那個網站已經不 ...


0. 世界上第一個網站

1990年12月20日,這一天對於現在的互聯網來說意義非凡。歐洲核子研究組織(CREN)的科學家Tim Berners-Lee在一臺NeXT電腦上啟動了世界上的第一個網站(當然當時僅能Tim Berners-Lee自己訪問),這臺電腦至今仍保留在CREN,但當年那個網站已經不復存在了。鑒於這個網站的意義重大,CREN在2013年“復刻”了這個網站,並指向了原來的網址:http://info.cern.ch/。由於現在的瀏覽器早已不是當初的樣子,所以CREN還提供了一個模擬器來模擬當時瀏覽這個網站是什麼情形(http://line-mode.cern.ch/www/hypertext/WWW/TheProject.html),打開後如下:

哈哈,看起來是不是很酷炫的樣子。

1. Hypermedia

我們註意看它的第一句話:

The WorldWideWeb (W3) is a wide-area hypermedia information retrieval initiative aiming to give universal access to a large universe of documents.

大意是說www是一個為了讓全世界都能訪問大量文檔的一個的超媒體信息檢索計劃,其中重點在於其提到的hypermedia。我們看看它怎麼解釋hypermedia是什麼的:

Hypertext is text which is not constrained to be linear.

Hypertext is text which contains links to other texts. The term was coined by Ted Nelson around 1965 (see History ).

HyperMedia is a term used for hypertext which is not constrained to be text: it can include graphics, video and sound , for example. Apparently Ted Nelson was the first to use this term too.

Hypertext and HyperMedia are concepts, not products.

其中解釋了什麼是hyperhtext(包含link的文本內容),又指出了hypermedia是一個術語,不僅僅指代hypermeida,還可以包括一些圖像,視頻,聲音等等。hypertext這個術語名字並不是由Tim Berners-Lee提出的,而是在更早的1965年由Ted Nelson第一次提出這個概念(hypertext歷史)。不知道大家對於hypertext這個詞是不是感覺很熟悉的樣子,大名頂頂的HTML(HyperText Markup Language)就是它的一個具體實現。hypertext中的link一直是重中之重,試想如果沒有這樣一種機制把各種文檔聯繫起來,那麼孤零零的一些文本內容是如何也不會發展出後來的互聯網的。

hypermedia是web中的重中之重的一個角色,可以說沒有它就沒有今天的web。

2. HTTP歷史的簡單回顧

具體的HTTP協議最早是版本0.9,發佈與1991年(HTTP 0.9 https://www.w3.org/Protocols/HTTP/AsImplemented.html)。從現在的角度看可以說是一個很簡陋的協議,只支持GET請求,無request header,所以只能用來展示靜態文本內容,不對對於當時來說已經足夠了,畢竟當初Web建立的初衷僅僅是為了在這些科學家之間共用文檔信息用的。

隨著Web的迅猛發展,只讀的HTTP 0.9已經無法滿足Web的胃口了。在1996年HTTP 1.0誕生,最突出的改進在於支持POST來寫數據了(基於HTML表單,HTML最初的標準誕生於1993年),使得Web終於“活了”起來。在HTTP 1.0協議的專家組中,有一個年輕人脫穎而出,後來成為了HTTP/1.1協議專家組的負責人。這位年輕人就是Apache HTTP伺服器的核心開發者Roy Fielding,Apache軟體基金會的合作創始人,也是URI協議的主要設計者,同時也參與了HTML的設計。

在1999年,Tim Berners Lee和Roy Fielding以及HTTP1.1專家組發佈了HTTP 1.1版本,主要是對1.0的一些多餘的設計做了一些精簡和優化,比如我們現在可以在一臺機器上部署多個網站,而用不同的host請求頭來區分,而這個host請求頭是在1.1才引入的。1.0的時候HTTP協議對網站的假設是基於一個IP對應一個網站,從來沒有料到後來的一個ip會部署這麼多個web站點。

HTTP 1.1從1999年至今堅挺了18年,隨著越來越豐富富龐大的web,性能有點跟不上去了。後來Google搞了一個SPDY協議,在TCP和HTTP之間增加了一層,重點在於提示傳輸性能和增加安全性,但是卻強制了採用TLS。後來制訂了新版的http2,移除了強制TLS的要求,至於為什麼,原因很簡單,這個要求違反了REST的架構約束,至於違反了哪些約束,後面的博客會解釋。

3. REST的誕生

在上面我們提到一個人:Roy Fielding,他在和他的同事們在HTTP/1.1協議的設計工作中,對於Web之所以取得巨大成功,在技術架構方面的因素做了一番深入的總結。Fielding將這些總結納入到了一套理論框架之中,然後使用這套理論框架中的指導原則,來指導HTTP/1.1協議的設計方向,HTTP/1.1協議的第一個草稿是在1996年1月發佈的,經過了三年多時間的修訂,於1999年6月成為了IETF的正式規範。用來指導HTTP/1.1協議設計的這套理論框架,最初是以備忘錄的形式在專家組成員之間交流,除了IETF/W3C的專家圈子,並沒有在外界廣泛流傳。

Fielding在完成HTTP/1.1協議的設計工作之後,回到了加州大學歐文分校繼續攻讀自己的博士學位。第二年(2000年)在他的博士學位論文Architectural Styles and the Design of Network-based Software Architectures中,Fielding更為系統、嚴謹地闡述了這套理論框架,並且使用這套理論框架推導出了一種新的架構風格,並且為這種架構風格取了一個令人輕鬆愉快的名字“REST”——Representational State Transfer(表述性狀態轉移)。在這篇論文中,Fielding認為Web得以蓬勃發展的原因很大程度上得益於Web的架構設計滿足了互聯網規模的分散式超媒體系統的需要。而他總結整體推導出來的REST,正是Web的架構風格。

本篇先開個頭,簡單介紹一下web的歷史,以及REST是怎麼來的,乾什麼用的。後面會逐一解釋什麼筆者眼中的REST是什麼,歡迎有興趣的前來討論。

參考資料

世界上誕生的第一個網站:http://info.cern.ch/

世界上誕生的第一個網站-模擬器:http://line-mode.cern.ch/www/hypertext/WWW/TheProject.html

Web的生日:http://home.cern/topics/birth-web

HTTP 0.9 :https://www.w3.org/Protocols/HTTP/AsImplemented.html

HTTP 歷史:https://www.w3.org/Protocols/History.html

HTTP 1.1 : https://www.ietf.org/rfc/rfc2616.txt

理解本真的REST:http://www.infoq.com/cn/articles/understanding-restful-style/

Tim Berners Lee :https://en.wikipedia.org/wiki/Tim_Berners-Lee

Roy Fielding:https://en.wikipedia.org/wiki/Roy_Fielding

Roy Fielding談Google SPDY協議:http://www.infoq.com/cn/news/2012/07/roy-on-google-spdy

架構風格與基於網路應用軟體的架構設計(中文修訂版):http://www.infoq.com/cn/minibooks/web-based-apps-archit-design


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最大子數組 描述 筆記 數據 評測 給定一個整數數組,找到一個具有最大和的子數組,返回其最大和。 註意事項 子數組最少包含一個數 您在真實的面試中是否遇到過這個題? Yes 哪家公司問你的這個題? Airbnb Amazon LinkedIn Cryptic Studios Dropbox Appl ...
  • c語言中,對文件的操作是重要的內容。以下代碼實現了文件的建立、讀寫和文件的顯示。 在此基礎上,還以二進位的方式顯示了文件,以此反映文件在電腦中真實的存儲方式。 具體的代碼實現過程如下所示: ...
  • 最小子數組 描述 筆記 數據 評測 給定一個整數數組,找到一個具有最小和的子數組。返回其最小和。 註意事項 子數組最少包含一個數字 您在真實的面試中是否遇到過這個題? Yes 哪家公司問你的這個題? Airbnb Amazon LinkedIn Cryptic Studios Dropbox App ...
  • Lucene 是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟體開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此為 ...
  • 最近有個新項目用java做的,老項目是asp.net,介面傳輸需要des加解密,網上查了些資料,大多數不能拿來就用,自己經過調試加工了一下,具體代碼如下: 密鑰一定是8位 對應java的方法如下: package com.testspring; import javax.crypto.Cipher; ...
  • 16 complete.cases( ) complete.case()可以判斷對象中是否數據完全,然後返回TRUE, FALSE 這一函數在去除數據框中缺失值時很有用。 17 get() get()函數接受一個代表對象名字的字元串參數,然後返回該對象的內容。 省略了會出錯 ...
  • ((半個)智商題,主要難度在於實現) 題意:有一棵n個結點組成的樹,其根是編號為1的結點。對於每一個結點,生成從根結點走到這個結點的路徑(包括自身),選擇路徑上的一個點或者不選擇任何點,使得其它點的最大公約數最大。每一個結點要分開考慮。 曾經錯誤做法: ans[x][0]表示走到x點不選擇任何點的最 ...
  • 租房頁面如圖: 代碼如下: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>租房子</title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> //引入boo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...