⼀篇就够⾯向接⼝开发
回想起去年的这个时候,我正准备学SSM框架,要说原因也没有什么深层的原因,因为是先导师兄推荐去学的、也因为学了可以变强,仅此⽽已。直到后来学完了Springboot,也体验了前后端分离开发,才明⽩学习SSM、Springboot框架的实际⽬的——纯后端开发是⾯向接⼝的,⽽学习Spring框架则可使后端开发者更便捷地进⾏⾯向接⼝开发。
[ 注意:此接⼝(API)⾮彼接⼝(interface) ]
内容预告
本⽂将包含笔者对⾯向接⼝开发的理解,主要包括:
1. 什么是接⼝以及它的种类有哪些;
2. ⾯向接⼝开发的好处;
3. ⾯向接⼝开发的威胁;
4. 如何进⾏⾯向接⼝开发;
希望可以帮助⼈们理解什么是后端开发。
什么是⾯向接⼝开发
⼀、什么是接⼝
这⾥的接⼝指的是API(Application Programming Interface,应⽤程序编程接⼝),在进⾏后端开发
时,API的形式⼀般是url,⽤户通过交互端发送⽹络请求到这个url即可享受服务器的服务。
⼆、接⼝的种类
Before all:
在开始介绍接⼝的种类之前,请⼤家在浏览器的新标签分别打开以下三个⽹站:
1. www.taobao/
2. music.16
3/
3. ai.baidu/docs#/TTS-API/top
并开启浏览器的“开发者模式”(快捷键通常是F12),并由 Nextwork --> XHR 逐步进⼊到 XMLHttpRequest(XHR)请求记录界⾯,在这⾥可以看到浏览器发送的所有XHR请求(⾮页⾯跳转的请求),⽽这些请求的url地址,正是本⽂所说的接⼝
以 Chrome 浏览器为例
类型⼀:信息型接⼝
以淘宝⽹为例,当⽤户在搜索框中输⼊"456"后,浏览器会发送下⾯这个请求到淘宝服务器进⾏信息搜索:
待服务器搜索完信息后,会把信息打包成 json 格式的数据返回给⽤户(这时的信息数据还是纯⽂本),然后⽤户就能够看到经过渲染后的页⾯了(这时的信息数据已经是相应位置的内容了)。其中 json 格式是⼀种便于进⾏数据渲染的数据展现形式。
信息型接⼝
类型⼆:功能型接⼝
以⽹易云⾳乐的web端登录为例,当⽤户输⼊账号密码并点击登录后,浏览器会将相应的信息以⽹络请求的形式发送到服务器上专门⽤于登录的API接⼝,随后⽹易云⾳乐的服务器将会检验登录是否成功,若成功则记录⽤户的已登录状态,并将 JWT (Json Web Token)等信息返回给⽤户。
这样⽤户便实现的登录的⽬的。
请求的url地址
jsp用什么前端框架请求发送的数据
请求返回的结果
类型三:资源型接⼝
以百度语⾳合成 REST API 为例,当⽤户按照API接⼝⽂档的规则拼装好⼀个url后,访问该url即可得到百度语⾳合成的结果(.mp3⽂件)。
百度语⾳API的使⽤规则请⾃⾏套索
本节内容总结如下:
接⼝类型返回内容应⽤场景
信息型接⼝⽂本 / json动态渲染、搜索
功能性接⼝⽂本 / JWT登录注册、上传⽂件
资源型接⼝资源 / 图⽚、视频、⾳频等加载资源⽂件
三、⾯向接⼝开发的好处
好处⼀:前后端解耦
这⾥说的解耦,指的是解开页⾯与服务器的耦合。
在⽹站开发模式的发展史中,有⼀段时期是以JSP开发模式为主流的JSP时代,在JSP时代下,开发的任务主要集中在后端开发者⾝上。相信⽤过JSP开发⽹站的后端开发者,如果没有前端基础的话,如果在⽹站开发时是边学边写页⾯的话,会感受到前端知识的浩如烟海。⽽对于前端开发者来说,毕竟J
SP不完全是HTML,且当时前端框架还未问世,所以页⾯中的JSTL部分也要由后端开发者来负责编写。
笔者曾经和前端同学合作开发过⼀个基于DWR的即时通信双⼈对战五⼦棋⽹站,由于那时SSM还没学完,当时⽤的技术还是JSP。合作的过程是前端同学写好页⾯的HTML发给我,我把它改成JSP,但由于数据是我写的,前端JavaScript逻辑也要我负责。
直到后来学完Springboot后再次和前端同学合作,感受了⾯向接⼝开发与JSP全栈开发相⽐在便捷性上巨⼤差异后,从此离不开了这种简洁⾼效的开发模式。
这种低耦合的开发模式,可使开发者们各司其职责,可以在各⾃最擅长的领域发光发亮,⼤⼤提升了开发产品的效率。
好处⼆:后端程序的服务范围更⼴
⼀次开发,多端可⽤。除了web端的⽹站外,产品的应⽤程序端、产品的移动端(IOS / Android)皆可通过发送⽹络请求到API的形式享受同样的服务。
当然如果其他类型的客户端也使⽤这种开发模式的话,依然可以享⽤第⼀点好处——解耦。
四、⾯向接⼝开发的威胁
威胁主要来⾃于——接⼝太容易被获取,web端通过浏览器的开发者⼯具(F12)即可查看⽹络请求的发送记录,其他形式的客户端也可以通过抓包⼯具等⽅式拦截⽹络请求并查看。API请求可以轻⽽易举地被查看、解读。
威胁⼀:容易被滥⽤,增加服务器的不必要负担
⼀篇关于服务器如何深受爬⾍所害的⽂章
如上⽂,爬⾍技术其实是⼀种通过解读API并⾃动化地发送⽹络请求的形式实现爬⾍开发者⼼愿的技术。然⽽⾃动化地发送请求的频率往往⽐真实⽤户发送请求的频率⾼得多,倘若同⼀时间有多个爬⾍在不停地访问服务器,那么⽆疑会加重服务器的负担,⽽这种虚假的⽤户占据的服务器资源多了,真实的⽤户可以享⽤的服务器资源就少了。
为了避免这⼀威胁,可以各种反爬⾍技术,识别虚假⽤户、为真实⽤户保护好服务器资源。也可以在真实客户端(只有真实⽤户可以使⽤)发送⽹络请求之前,对API的参数进⾏加密,使得API不易于被解读(例如上⾯⽹易云⾳乐登录⽰例中的请求参数就经过了加密),以此可在不影响真实
⽤户使⽤的情况下提⾼虚假⽤户使⽤API的门槛,达到保护真实⽤户的⽬的。
威胁⼆:容易被恶意攻击
倘若被⼀些危险的⼈解读了API,那些⼈甚⾄可以利⽤API对服务器进⾏攻击。
(例如传⼀些⾮法的参数到API⾥,具体笔者⽬前还未曾试过)
五、如何进⾏⾯向接⼝开发
步骤⼀:设计API接⼝,编写后端程序
这⾥可选的⽅式有很多,可以是任何⼀种开发语⾔:Java、Python、Node.js、PHP、C#、Golang……,可以是任何⼀种开发框架:SSM、Springboot……,只要实现了接⼝的功能即可。⽽实现接⼝的功能则是:⾸先要能设计出能得到字符串的API(访问该API即可得到字符串),再把字符串改成json格式的数据字符串。
PS:学⽣时期的团队产品开发,多是后端先写好API接⼝以及接⼝⽂档,前端再根据⽂档完成渲染
步骤⼆:测试接⼝,写接⼝⽂档
⾃⼰访问⾃⼰设计的API,检查数据是否异常。
推荐两个实⽤⼯具:
1. ⽤于接⼝测试的postman客户端
2. ⽤于⾃动⽣成接⼝⽂档的框架apidoc
步骤三:将后端程序发布到服务器
发布到服务器后,接⼝就可以为更多⽤户服务了。
感想:
1.如果将后端开发⽐喻为制造械的话,如果把向⽤户提供服务⽐喻成打靶的话,那么⾯向接⼝开发⽆疑是⼀种很好的瞄准⽅式、射击⽅式。
本⼈总结的学习新技能步骤:
1.看技术的官⽅⽂档、看书籍,hello world尝试,明⽩基本理论(明⽩了理论就具备了解读优秀作品的能⼒)
2.解读优秀作品(例如借鉴先导们的作品,结合⾃⾝的实际需求进⾏修改,投⼊到实际的使⽤中,在使⽤中消化知识、感悟知识)
3.⾃⼰从0开始独⽴开发⼀次,通过实践成为别⼈的先导,巩固这项新技能。
学习知识 = 进⾷ + 咀嚼 + 消化 + 吸收
进⾷ = 阅读/学习,掌握基本理论、掌握赏析能⼒
咀嚼 = 做笔记整理/解读优秀作品(顺便再次阅读/学习)
消化 = 反复思考+理解
吸收 = 在实际⽣活学习或项⽬中尝试使⽤该知识、感受该知识
——《如何⾼效学习》
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论