近期在去面试的过程中,被问及有关WEB API的一些特性,一时竟不知该如何回答,所以根据自己已知的知识,加上网上搜索的,详细列举了一下,期望对.NET WEB API有一个比较开阔和全面的认知。
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="https://files.cnblogs.com/files/anylian/cnblog-informal-essay-v4.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 href="https://www.runoob.com/w3cnote/restful-architecture.html">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 href="https://www.jianshu.com/p/879baf1cff07">Swagger 2与OpenAPI 3</a></span>
<br /><span>▣ <a href="https://wiki.open.qq.com/wiki/mobile/OpenAPI%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E">腾讯OpenAPI接口文档</a></span>
<br /><span>▣ <a href="https://cloud.tencent.com/document/product/267/20456">腾讯云直播API接口文档</a></span>
<br /><span>▣ <a href="https://open.taobao.com/api.htm">淘宝开放平台API文档</a></span>
<br /><span>▣ <a href="https://open.1688.com/api/apidoclist.htm">阿里巴巴开放平台API文档</a></span>
<br /><span>▣ <a href="http://lbsyun.baidu.com/index.php?title=jspopularGL">百度地图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 href="https://www.jianshu.com/p/4ce6961e81be">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 href="http://www.identityserver.com.cn/">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 href="https://www.jianshu.com/p/180a870a308a">前后端分离之JWT用户认证</a></span>
<br /><span>▣ <a href="https://www.cnblogs.com/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 href="http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html">理解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 href="https://www.jianshu.com/p/349e130e40d5">Swagger介绍及使用</a></span>
</p>
</dl>
<dl>1.4.YApi
<p>1.4.1.使用说明
<br/><span>▣ 强大的接口管理平台。</span>
</p>
<p>1.4.2.相关文档
<br /><span>▣ <a href="https://hellosean1025.github.io/yapi/documents/index.html">YApi教程</a></span>
<br /><span>▣ <a href="https://zhuanlan.zhihu.com/p/94297858">内网搭建YApi接口管理平台</a></span>
</p>
</dl>
</li>
</ul>
<ul><h1>思维导图</h1>