一篇就够 | 面向接口开发

回想起去年的这个时候,我正准备学SSM框架,要说原因也没有什么深层的原因,因为是先导师兄推荐去学的、也因为学了可以变强,仅此而已。直到后来学完了Springboot,也体验了前后端分离开发,才明白学习SSM、Springboot框架的实际目的——纯后端开发是面向接口的,而学习Spring框架则可使后端开发者更便捷地进行面向接口开发。

[ 注意:此接口(API)非彼接口(interface) ]

内容预告

本文将包含笔者对面向接口开发的理解,主要包括:

  1. 什么是接口以及它的种类有哪些;
  2. 面向接口开发的好处;
  3. 面向接口开发的威胁;
  4. 如何进行面向接口开发;

希望可以帮助人们理解什么是后端开发。

什么是面向接口开发

一、什么是接口

这里的接口指的是API(Application Programming Interface,应用程序编程接口),在进行后端开发时,API的形式一般是url,用户通过交互端发送网络请求到这个url即可享受服务器的服务。

二、接口的种类

Before all:

在开始介绍接口的种类之前,请大家在浏览器的新标签分别打开以下三个网站:

  1. https://www.taobao.com/
  2. https://music.163.com/
  3. http://ai.baidu.com/docs#/TTS-API/top

并开启浏览器的“开发者模式”(快捷键通常是F12),并由 Nextwork --> XHR 逐步进入到 XMLHttpRequest(XHR)请求记录界面,在这里可以看到浏览器发送的所有XHR请求(非页面跳转的请求),而这些请求的url地址,正是本文所说的接口

以 Chrome 浏览器为例

类型一:信息型接口

淘宝网为例,当用户在搜索框中输入"456"后,浏览器会发送下面这个请求到淘宝服务器进行信息搜索:

https://s.taobao.com/api?_ksTS=1537948494224_212&callback=jsonp213&ajax=true&m=customized&stats_click=search_radio_all:1&q=456&s=36&imgfile=&initiative_id=staobaoz_20180926&bcoffset=0&js=1&ie=utf8&rn=f6fe7f859aaf6ff7e63ddfb0ccc9c766

待服务器搜索完信息后,会把信息打包成 json 格式的数据返回给用户(这时的信息数据还是纯文本),然后用户就能够看到经过渲染后的页面了(这时的信息数据已经是相应位置的内容了)。其中 json 格式是一种便于进行数据渲染的数据展现形式。

信息型接口

类型二:功能型接口

网易云音乐的web端登录为例,当用户输入账号密码并点击登录后,浏览器会将相应的信息以网络请求的形式发送到服务器上专门用于登录的API接口,随后网易云音乐的服务器将会检验登录是否成功,若成功则记录用户的已登录状态,并将 JWT (Json Web Token)等信息返回给用户。
这样用户便实现的登录的目的。

请求的url地址

请求发送的数据

请求返回的结果

类型三:资源型接口

以百度语音合成 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. 用于接口测试的postman客户端
2. 用于自动生成接口文档的框架apidoc

步骤三:将后端程序发布到服务器

发布到服务器后,接口就可以为更多用户服务了。


感想:
1.如果将后端开发比喻为制造枪械的话,如果把向用户提供服务比喻成打靶的话,那么面向接口开发无疑是一种很好的瞄准方式、射击方式。


本人总结的学习新技能步骤:
1.看技术的官方文档、看书籍,hello world尝试,明白基本理论(明白了理论就具备了解读优秀作品的能力)
2.解读优秀作品(例如借鉴先导们的作品,结合自身的实际需求进行修改,投入到实际的使用中,在使用中消化知识、感悟知识)
3.自己从0开始独立开发一次,通过实践成为别人的先导,巩固这项新技能。

学习知识 = 进食 + 咀嚼 + 消化 + 吸收
进食 = 阅读/学习,掌握基本理论、掌握赏析能力
咀嚼 = 做笔记整理/解读优秀作品(顺便再次阅读/学习)
消化 = 反复思考+理解
吸收 = 在实际生活学习或项目中尝试使用该知识、感受该知识
——《如何高效学习》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,424评论 25 707
  • 时间都在网上烧完了,于是你都记不清有多久没读完一本书了。新买的《未来简史》是不是还没拆包装?偶尔逛一下书店就是拿本...
    米娅C阅读 305评论 0 1
  • 《投资最重要的事》,一本有关投资策略和工具的书,包含各类逆向思维、心理活动、技巧方法等,即分析得到,又有很强的洞察...
    FrankCoach阅读 235评论 0 0