首頁 後端開發 C#.Net教程 ASP.NET WebAPI前知識:HTTP與RestfulAPI

ASP.NET WebAPI前知識:HTTP與RestfulAPI

Apr 04, 2017 pm 03:51 PM

         對HTTP協定的基本了解是能理解並使用RestFul風格API的基礎,在了解了這些基礎之後,使用各種RestFul的開發框架才能得心應手。我一開始使用WebApi的時候就因為對這些知識缺乏了解,覺得用起來各種不順手,直到熟悉了這些HTTP的知識後,使用WebApi開發起來才覺得得心應手,我的理解裡,RestFul風格的API即是對HTTP協定良好支持,實現HTTP完整語意風格的API。

         在介紹這些知識之前,我需要先強調許多人存在的一個誤解:HTTP的謂詞和資料傳遞方式。絕大多數人接觸並使用的HTTP協定都是在網站編寫的過程中,在一般的WEB應用中,我們只使用GET、POST兩個謂詞,其他謂詞並不適用,在這個習慣下很多人有幾個奇怪的認知:HTTP協定只適用於網站開發,HTTP僅有兩個謂詞:GET/POST,HTTP呼叫資料傳遞僅使用表單K-V的形式進行;在這種認知下,用這種風格開發的RestApi常常會不倫不類,使用ASP.NET WebAPi也會顯得不倫不類,平添麻煩。而我們首先要認識到,網站的資料互動只是HTTP使用的一個場景而已,HTTP可以傳遞各種形式的資料。

         我們從HTTP的第一行說起:HTTP的第一行包含三個資訊:謂詞、URL、HTTP協定版本。三個數據使用空格隔開。

         謂詞:對RestFul API來說謂詞是非常重要的一個元素,WEB API就是使用謂詞作為預設的路由方式,最常用的謂詞有:POST\DELETE \PUT\GET,這四個謂詞對應了「增、刪、改、查」四個動作(POST和PUT誰是增誰是改不同資料總有不同的說法,我其實有略微有點困惑啦……有定義說PUT是冪等操作,而POST不是,那PUT就更偏重於改而POST更偏重於增)。最常用的謂詞即為這四個,也有其他謂詞擁有不同的語意:

HEAD:只傳回對應頭部,不包含Body

##TRACE:對資料傳輸過程進行診斷

OPTIONS:請求Web 伺服器告知其支援的各種功能

#還有其他謂詞,如果需要可以

查詢相關文檔,但並不常用。

其中,GET,DELETE不包含BODY,PUT,POST可以包含BODY。而如果一個謂詞包含了語意以外的運算,例如GET中帶BODY,POST用來

刪除資源這種運算也是被允許的,稱為謂詞的重載 ,雖然HTTP可以支援謂詞的重載,但並不建議使用,因為不符合標準語意。

 

         URL : URL定義了一個資源,例如

www.example.com/person 定義了person為資源,結合上述所介紹的謂詞,我們提供Person一組操作:

         GET www.example/person/1 即獲取ID為1的使用者的資訊

##         POST

BODY包含Person的描述) 建立一個Person資源

         PUT www.example/person/1

(BODY包含Person的描述)

更新#一個Person資源          DELETE www.example/person/1 刪除ID為1的Person資源

        

    . 1協議,HTTP2.0協定正在普及階段,用的還不是很多。 HTTP1.0 和HTTP1.1差異很小,其中的差異對於RestFul來說影響並不是很大。具體的差別大家可以查詢相關文件。

        

##

HTTP的第一行內容就是這些,接下來會有一個\r\n來進行換行,接下來就是HTTP HEAD部分,HTTP HEAD描述了HTTP請求和回應。我認為HTTP HEAD即為HTTP協定中最重要的部分,他包含了編碼、BODY長度、內容協商等訊息,你也可以包含一些自訂資訊。下面我來為大家介紹幾個在RestFul API中常用的HEAD:

         User-Agent:使用者代理,是什麼客戶端發出的請求,例如IE、Chrome、Fid dler等

         HOST:網域名稱(HOST一般用於伺服器的網站綁定,一般且URL的網域相同,但是在一些自訂的DNS使用方式中,可能會出現HOST和URL中的網域不一致)     

         Authorization:驗證訊息,而這個欄位可以包含一些用於使用者驗證的訊息,而表示方法為:schema authorinfo,中間使用空格隔開,其中schema代表了驗證,其中schema代表了驗證方法,authorinfo代表了驗證訊息,常見的schema 如Base:authorinfo使用使用者名稱+密碼,並用Base64進行編碼。或使用Token,類似於Session的方式。

Accept:接受何種序列化方式傳回的數據,以MIME表示,用於對回應資料的內容協商,可以包含多個MIME,依優先順序排列,如application/json,application/xml,text/html;具體伺服器可以回傳什麼類型的資料需要由伺服器支援情況而定,有一些標準MIME,可以查到;有時我們也需要一些自訂的MIME,例如bson、protocolbuffer等,我們可以自訂MIME,在服務端開發自己的實現,而這些特的擴充在ASP.NET WebApi中都有對應的擴充點。

         Content-Type:使用一個MIME表示,表示所發送請求的Body的序列化方式,常見的如application/json,還有WEB交互最常使用的application/x-www-# form-urlencoded,都表示了你的body部分的序列化方式,在請求、回應中都會出現

 

         HTTP HEAD部分我認為是HTTP協定中最核心的部分,其中可配置、使用的地方實在太多太多,而且有太多的細節,以上為我列出的在我的工作中最常用的部分,介紹這些內容的資料全部列出來足夠完成一本書了,大家有興趣可以找相關資料,在Rest API中,內容協商經常讓一開始學習使用Rest的人很迷惑,一定要記住Accept,Content-Type兩個頭的作用和區別,Accept表示希望接受什麼樣的數據,Content-Type表示目前請求中Body的編碼方式。在ASP.NET WEBAPI中,如果請求中有Content-Type,而沒有ACCEPT,則預設使用Content-Type中的內容作為回應的內容協商。

       Sharp狀態

的展示,也很重要,在REST API中最常用的

狀態碼一般為2XX,4XX,5XX三個段,而1XX表示工作還要繼續,3XX一般表示重定向,在REST API中使用的並不多。而在最常用的三個Status 段中,2XX表示執行成功,4XX表示客戶端資料錯誤(例如參數校驗不通過),5XX表示伺服器端處理錯誤,例如有未處理的例外(如資料庫連線錯誤) ,根據這些狀態碼可以初步判斷API呼叫的執行狀態。         ##

         在首部之後有一個空白行(\r\n)接下來就是Content,這裡有具體的業務數據,根據不同的Content-Type使用不同的序列化方式表示,例如JSON,XML,甚至HTML。各位在學習HTTP API時可以認為網頁應用也是HTTP 的一種應用,只是互動方式一般使用application/x-www-form-urlencoded 作為請求、 text/html作為回應的方式來互動。而RestAPI可以使用其他很多種編碼方式進行交互,支援的更廣,網頁應用只是使用HTTP傳輸的一種應用場景,RestAPI和網頁是可以不分開的。我覺得這一點Nancy比ASP.NET做得更好,Nancy並沒有把RestAPI和網頁割裂開來,而ASP.NET用MVC和WEBAPI將兩者割裂了;請求一個數據,我可以要求Accept為application/json時返回Json數據,而使用text/html時返回一個網頁;當然,將這兩種應用方式切割或合併起來都各有優劣。

         我所寫的這些對於HTTP協定而言實在太少太少,大家有興趣的可以自行查找相關資料,我只是寫出了WEB API中常用的部分,下面我們來用一張圖為大家展示一下這些知識:

以上是ASP.NET WebAPI前知識:HTTP與RestfulAPI的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

http狀態碼520是什麼意思 http狀態碼520是什麼意思 Oct 13, 2023 pm 03:11 PM

http狀態碼520是指伺服器在處理請求時遇到了一個未知的錯誤,無法提供更具體的資訊。用於表示伺服器在處理請求時發生了一個未知的錯誤,可能是由於伺服器配置問題、網路問題或其他未知原因導致的。通常是由伺服器配置問題、網路問題、伺服器過載或程式碼錯誤等原因導致的。如果遇到狀態碼520錯誤,最好聯絡網站管理員或技術支援團隊以取得更多的資訊和協助。

http狀態碼403是什麼 http狀態碼403是什麼 Oct 07, 2023 pm 02:04 PM

http狀態碼403是伺服器拒絕了客戶端的請求的意思。解決http狀態碼403的方法是:1、檢查身份驗證憑證,如果伺服器要求身份驗證,確保提供正確的憑證;2、檢查IP位址限制,如果伺服器對IP位址進行了限制,確保客戶端的IP位址被列入白名單或未列入黑名單;3、檢查文件權限設置,如果403狀態碼與文件或目錄的權限設置有關,確保客戶端具有足夠的權限訪問這些文件或目錄等等。

瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 Feb 18, 2024 pm 08:41 PM

掌握HTTP301狀態碼的意思:網頁重定向的常見應用場景隨著網路的快速發展,人們對網頁互動的要求也越來越高。在網頁設計領域,網頁重定向是一種常見且重要的技術,透過HTTP301狀態碼來實現。本文將探討HTTP301狀態碼的意義以及在網頁重新導向中的常見應用場景。 HTTP301狀態碼是指永久重新導向(PermanentRedirect)。當伺服器接收到客戶端發

如何使用Nginx Proxy Manager實現HTTP到HTTPS的自動跳轉 如何使用Nginx Proxy Manager實現HTTP到HTTPS的自動跳轉 Sep 26, 2023 am 11:19 AM

如何使用NginxProxyManager實現HTTP到HTTPS的自動跳轉隨著互聯網的發展,越來越多的網站開始採用HTTPS協議來加密傳輸數據,以提高數據的安全性和用戶的隱私保護。由於HTTPS協定需要SSL憑證的支持,因此在部署HTTPS協定時需要有一定的技術支援。 Nginx是一款強大且常用的HTTP伺服器和反向代理伺服器,而NginxProxy

HTTP 200 OK:了解成功回應的意義與用途 HTTP 200 OK:了解成功回應的意義與用途 Dec 26, 2023 am 10:25 AM

HTTP狀態碼200:探索成功回應的意義與用途HTTP狀態碼是用來表示伺服器回應狀態的數字代碼。其中,狀態碼200表示請求已成功被伺服器處理。本文將探討HTTP狀態碼200的具體意義與用途。首先,讓我們來了解HTTP狀態碼的分類。狀態碼分為五個類別,分別是1xx、2xx、3xx、4xx和5xx。其中,2xx表示成功的回應。而200是2xx中最常見的狀態碼

使用http.PostForm函數傳送帶有表單資料的POST請求 使用http.PostForm函數傳送帶有表單資料的POST請求 Jul 25, 2023 pm 10:51 PM

使用http.PostForm函數發送帶有表單資料的POST請求在Go語言的http包中,可以使用http.PostForm函數發送帶有表單資料的POST請求。 http.PostForm函數的原型如下:funcPostForm(urlstring,dataurl.Values)(resp*http.Response,errerror)其中,u

快速應用:PHP 非同步 HTTP 下載多個檔案的實用開發案例分析 快速應用:PHP 非同步 HTTP 下載多個檔案的實用開發案例分析 Sep 12, 2023 pm 01:15 PM

快速應用:PHP非同步HTTP下載多個檔案的實用開發案例分析隨著互聯網的發展,檔案下載功能已成為許多網站和應用程式的基本需求之一。而對於需要同時下載多個檔案的場景,傳統的同步下載方式往往效率低且耗費時間。為此,使用PHP非同步HTTP下載多個檔案成為了越來越常見的解決方案。本文將透過一個實際的開發案例,詳細分析如何使用PHP非同步HTTP

C#常見的網路通訊與安全性問題及解決方法 C#常見的網路通訊與安全性問題及解決方法 Oct 09, 2023 pm 09:21 PM

C#中常見的網路通訊和安全性問題及解決方法在當今互聯網時代,網路通訊已成為了軟體開發中必不可少的一部分。在C#中,我們通常會遇到一些網路通訊的問題,例如資料傳輸的安全性、網路連線的穩定性等。本文將針對C#中常見的網路通訊和安全性問題進行詳細討論,並提供相應的解決方法和程式碼範例。一、網路通訊問題網路連線中斷:網路通訊過程中,可能會出現網路連線的中斷,這會導致

See all articles