近期在去面試的過程中,被問及有關WEB API的一些特性,一時竟不知該如何回答,所以根據自己已知的知識,加上網上搜索的,詳細列舉了一下,期望對.NET WEB API有一個比較開闊和全面的認知。
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" />
</head>
<div class="burro">
<ul><h1>背景說明</h1>
<p> 近期在去面試的過程中,被問及有關WEB API的一些特性,一時竟不知該如何回答,故根據自己已知的知識,加上網上搜索的,詳細列舉了一下,期望對WEB API有一個比較開闊和全面的認知。</p>
</ul>
<ul class="number-list"><h1>關鍵要素</h1>
<p> 在客戶端發送一個請求,到服務端接收并處理請求,然后將數據返回,這樣一個看似簡單的過程中,究竟有哪些要素是我需要去留心的呢?</p>
<p> 我在整理的過程當中,發現了這樣一些基本要素,是需要去特別留心:
<br />
<br /><span> <b>1.</b> 接口規范</span>
<br /><span> <b>2.</b> 鑒權方式</span>
<br /><span> <b>3.</b> 關鍵對象</span>
<br /><span> <b>4.</b> 生命周期</span>
<br /><span> <b>5.</b> 接口工具</span>
</p>
<li>
接口規范
<p> 接口規范定義了在API訪問的過程中,數據交互約定以什么樣的方式進行。下面是我所了解的幾種接口規范:</p>
<dl>1.1.RESTful
<p>1.1.1.字義解釋
<br /><span>? REST(representational state transfer),直譯過來是“表述性狀態傳輸”,至于ful,百度翻譯是“滿滿的”、“充滿...的”。這里所說的“state”,就是HTTP請求當中的 GET、PUT、POST 、DELETE,表述了對資源的處理意向。</span>
</p>
<p>1.1.2.規范詳情
<br /><span>? 參考<a >RESTful 架構詳解</a></span>
</p>
</dl>
<dl>1.2.OpenAPI
<p >1.2.1.字義解釋
<br /><span>? OpenAPI從字義上解釋,是開放API,也就是說是開放給別人看的,所以接口參數具有可閱讀性,能夠生成可閱讀的文檔。它也具體到了業務層面的參數定義規范。</span>
</p>
<p >1.2.2.廣義解釋
<br /><span>? 狹義的OpenAPI是Swagger所定義的一套接口參數規范,可以快速輸出接口文檔,目前的最新版本是3.0;廣義的OpenAPI,我認為只要有企業規劃了開放式的API,并約定了參數交互規則,并形成文檔的持續更新方法,就是OpenAPI。</span>
</p>
<p>1.2.3.拓展資料
<br /><span>? <a >Swagger 2與OpenAPI 3</a></span>
<br /><span>? <a >騰訊OpenAPI接口文檔</a></span>
<br /><span>? <a >騰訊云直播API接口文檔</a></span>
<br /><span>? <a >淘寶開放平臺API文檔</a></span>
<br /><span>? <a >阿里巴巴開放平臺API文檔</a></span>
<br /><span>? <a >百度地圖Javascript API開放平臺</a></span>
</p>
</dl>
<dl>1.3.RPC
<p >1.1.1.字義解釋
<br /><span>? RPC(Romote Procedure Call),遠程過程調用,允許一臺計算機程序遠程調用另外一臺計算機的子程序,不用關心底層網絡通信。它在socket的基礎上實現,也涉及到程序和部署架構層面的具體落實,所以不單是一種訪問規范,更是一種架構設計。</span>
</p>
<p>1.1.2.架構詳情
<br /><span>? 參考<a >RPC</a></span>
</p>
</dl>
</li>
<li>
鑒權方式
<p> 鑒權機制,是保護接口和數據安全的一道屏障,只有被授權、并且握有合法鑰匙(令牌)的,才能自由出入。</p>
<dl>1.1.IdentityServer4
<p>1.1.1.用途介紹
<br/><span>? IdentityServer4 是為ASP.NET Core 2.系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 認證框架。</span>
</p>
<p>1.1.2.參考資料
<br /><span>? <a >IdentityServer4中文文檔</a></span>
</p>
</dl>
<dl>1.2.Jwt(Json web token)
<p>1.2.1.用途介紹
<br/><span>? JWT 是一個開放標準(RFC 7519),它定義了一種用于簡潔,自包含的用于通信雙方之間以 JSON 對象的形式安全傳遞信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公鑰密鑰對進行簽名。它由Header+Payload+Signature三個部分組成。</span>
</p>
<p>1.2.2.參考資料
<br /><span>? <a >前后端分離之JWT用戶認證</a></span>
<br /><span>? <a href="http://www.rzrgm.cn/fiona-zhong/p/9951054.html">JWT認證原理及使用</a></span>
</p>
</dl>
<dl>1.3.OAuth(Open Authorization)
<p>1.3.1.用途介紹
<br/><span>? 首先,它是授權認證;其次,它是開放式的;第三,它簡單而又安全。典型的例子就是微信或者QQ的授權登錄,無論訪問什么資源之前,先授權登錄一下。</span>
</p>
<p>1.3.2.參考資料
<br /><span>? 詳細的接入流程可以參考 <a >理解OAuth 2.0</a></span>
</p>
</dl>
</li>
<li>
關鍵對象
<p> 在面向對象的程序設計(OOP),所常用的一些設計模式當中,專注于對象的創建、對象的結構和對象的行為模式,在面向WEB API的一些關鍵對象當中,這三個方面同樣值得關注。在Visual Studio 2019的版本當中,對對象的關鍵屬性,作了一個標星,這使得一些常用的屬性會被排在前面,在輸入時可以快速定位,同時標星的屬性,也更值得關注。</p>
<dl>1.1.上下文對象(Context)
<p>1.1.1.用途介紹
<br/><span>? 在WEB API 整個后臺處理過程當中,很多地方都使用了上下文Context,比如HttpContext、ControllerContext、HttpActionContext等,里面不僅攜帶了數據,還包含了發起人的IP地址、Uri請求對象、瀏覽器信息、客戶端保留的Cookie、上文中累積的異常信息等等。所謂的上下文,按我理解,就是上面用到了,到我這里還要用,我還要轉交給下面用。</span>
</p>
</dl>
<dl>1.2.過濾器對象(Filter)
<p>1.2.1.用途介紹
<br/><span>? 過濾器對象,是面向切面編程(AOP)概念中的一個特別重要的實現,主要應用在授權驗證、數據流的輸入和輸出過濾、異常處理、日志收集等方面。</span>
</p>
</dl>
<dl>1.3.控制器對象(Controller)
<p>1.3.1.使用說明
<br/><span>? 前段時間有人問我,Controller和ApiController的區別在哪里?我一時竟不知道怎么樣回答,這大概應該歸咎于我平時懶于作總結的緣故。</span>
<br/><span>? Controller 適用于基于Razor cshtml前后端混合的開發模式,也能從上下文中找到Session;而ApiController適合于前后端分離的開發模式,一般需要植入鑒權才能保證接口和數據安全。另外ApiController 的默認路由規則是api/{controller}/{action}/{id},前面多了個“api/”的路徑。</span>
</p>
</dl>
<dl>1.4.緩存對象(Session、Cookie、Cache)
<p>1.4.1.用途說明
<br/><span>? 這三個不作過多贅述,Session是一個網站很重要的存儲,如果要使它的可靠性和穩定性更好的話,使用Redis驅動它,是一個不錯的方案。</span>
</p>
</dl>
</li>
<li>
生命周期
<p> 生命周期是一個很復雜的概念,后面有時間再專門拎出來歸納和學習。</p>
</li>
<li>
接口工具
<dl>1.1.Fiddler
<p>1.1.1.用途介紹
<br/><span>? 可以進行數據抓包,也能模擬請求,它脫離瀏覽器,能夠跟蹤桌面應用和手機APP的請求,非常好用。</span>
</p>
</dl>
<dl>1.2.Postman
<p>1.2.1.用途介紹
<br/><span>? 可以作為谷歌瀏覽器插件使用,也是用來模擬發送請求的。</span>
</p>
</dl>
<dl>1.3.Swagger
<p>1.3.1.使用說明
<br/><span>? 定義接口規范,生成接口文檔。</span>
</p>
<p>1.3.2.相關文檔
<br /><span>? <a >Swagger介紹及使用</a></span>
</p>
</dl>
<dl>1.4.YApi
<p>1.4.1.使用說明
<br/><span>? 強大的接口管理平臺。</span>
</p>
<p>1.4.2.相關文檔
<br /><span>? <a >YApi教程</a></span>
<br /><span>? <a >內網搭建YApi接口管理平臺</a></span>
</p>
</dl>
</li>
</ul>
<ul><h1>思維導圖</h1>