回想起去年的这个时候,我正准备学SSM框架,要说原因也没有什么深层的原因,因为是先导师兄推荐去学的、也因为学了可以变强,仅此而已。直到后来学完了Springboot,也体验了前后端分离开发,才明白学习SSM、Springboot框架的实际目的——纯后端开发是面向接口的,而学习Spring框架则可使后端开发者更便捷地进行面向接口开发。
[ 注意:此接口(API)非彼接口(interface) ]
内容预告
本文将包含笔者对面向接口开发的理解,主要包括:
- 什么是接口以及它的种类有哪些;
- 面向接口开发的好处;
- 面向接口开发的威胁;
- 如何进行面向接口开发;
希望可以帮助人们理解什么是后端开发。
一、什么是接口
这里的接口指的是API(Application Programming Interface,应用程序编程接口),在进行后端开发时,API的形式一般是url,用户通过交互端发送网络请求到这个url即可享受服务器的服务。
二、接口的种类
Before all:
在开始介绍接口的种类之前,请大家在浏览器的新标签分别打开以下三个网站:
并开启浏览器的“开发者模式”(快捷键通常是F12),并由 Nextwork --> XHR 逐步进入到 XMLHttpRequest(XHR)请求记录界面,在这里可以看到浏览器发送的所有XHR请求(非页面跳转的请求),而这些请求的url地址,正是本文所说的接口
类型一:信息型接口
以淘宝网为例,当用户在搜索框中输入"456"后,浏览器会发送下面这个请求到淘宝服务器进行信息搜索:
待服务器搜索完信息后,会把信息打包成 json 格式的数据返回给用户(这时的信息数据还是纯文本),然后用户就能够看到经过渲染后的页面了(这时的信息数据已经是相应位置的内容了)。其中 json 格式是一种便于进行数据渲染的数据展现形式。
类型二:功能型接口
以网易云音乐的web端登录为例,当用户输入账号密码并点击登录后,浏览器会将相应的信息以网络请求的形式发送到服务器上专门用于登录的API接口,随后网易云音乐的服务器将会检验登录是否成功,若成功则记录用户的已登录状态,并将 JWT (Json Web Token)等信息返回给用户。
这样用户便实现的登录的目的。
类型三:资源型接口
以百度语音合成 REST API 为例,当用户按照API接口文档的规则拼装好一个url后,访问该url即可得到百度语音合成的结果(.mp3文件)。
百度语音API的使用规则请自行套索
本节内容总结如下:
接口类型 | 返回内容 | 应用场景 |
---|---|---|
信息型接口 | 文本 / json | 动态渲染、搜索 |
功能性接口 | 文本 / JWT | 登录注册、上传文件 |
资源型接口 | 资源 / 图片、视频、音频等 | 加载资源文件 |
三、面向接口开发的好处
好处一:前后端解耦
这里说的解耦,指的是解开页面与服务器的耦合。
在网站开发模式的发展史中,有一段时期是以JSP开发模式为主流的JSP时代,在JSP时代下,开发的任务主要集中在后端开发者身上。相信用过JSP开发网站的后端开发者,如果没有前端基础的话,如果在网站开发时是边学边写页面的话,会感受到前端知识的浩如烟海。而对于前端开发者来说,毕竟JSP不完全是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.如果将后端开发比喻为制造枪械的话,如果把向用户提供服务比喻成打靶的话,那么面向接口开发无疑是一种很好的瞄准方式、射击方式。
本人总结的学习新技能步骤:
1.看技术的官方文档、看书籍,hello world尝试,明白基本理论(明白了理论就具备了解读优秀作品的能力)
2.解读优秀作品(例如借鉴先导们的作品,结合自身的实际需求进行修改,投入到实际的使用中,在使用中消化知识、感悟知识)
3.自己从0开始独立开发一次,通过实践成为别人的先导,巩固这项新技能。
学习知识 = 进食 + 咀嚼 + 消化 + 吸收
进食 = 阅读/学习,掌握基本理论、掌握赏析能力
咀嚼 = 做笔记整理/解读优秀作品(顺便再次阅读/学习)
消化 = 反复思考+理解
吸收 = 在实际生活学习或项目中尝试使用该知识、感受该知识
——《如何高效学习》