互联网人必备:深刻理解什么是API接口

API(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

如果作为新人的你有这样的经历:在会议上听到前后端的程序员们对着你给出的设计稿讨论“这边要加一个API”、“那个页面的API要改动”,特别是他们说了一堆你不太懂的事情还反过来问你:你觉得要用什么方案?(WTF)又或者,那帮人最终讨论的结果是某个“接口”没法做,导致你的设计稿得改改改,然而你一脸懵逼,并搞不清楚状况。

那么到底什么是程序员口中API?

API(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。最简单直观的解释就是:API=接口,如果还不明白下面的解释就更直观简单了。


一些同行的解释:

“一个联通前端和后端的通道,通常用字段来做暗语,就叫API。”

“API是,面向网页、手机APP等终端设备和应用,提供和网站后台进行交互的入口。”

“这是个哲学问题,API应该是服务开发者和服务使用者之间制定的关于如何服务使用的约定。”

从老司机们的描述中,我们看到和API有关的总有两个角色出现:”前端-后端“、”网页APP-网站后台“、”开发者-服务使用者“;而API发挥的则是:”联通xxx的通道“、”进行交互的入口“、”xxx的约定“等串联那两个角色的作用。

似乎有一些眉目,但还是有点模糊。下面,我就从设(pu)计(tong)师(ren)的角度,用更形象的比喻来说明一下:

这是一个和物流有关的故事,首先我们设定两个场所:一个叫仓库,一个叫店铺。仓库是囤积所有货物的地方,库中的货物按照一定的规矩摆放。而店铺有很多,分散在各地;店铺总需要从仓库调货,货物运达后会被按照能吸引顾客的方式陈列在货架上。

那么问题来了:我们能想到,在店铺陈列时几乎不会与仓库存货的摆放一样(不能理解的想想宜家)。如果店员小哥贸然来到仓库自己取货必然会遇到很多困难(假设仓库很庞大,小哥并不是仓库管理员)。另外,若店铺搞促销要对几种货物组合打包(买洗发水送赠品牙刷之类的),不管是在仓库或店铺进行,也必然会影响到它们的正常运作。如何帮助店铺更方便的从仓库中调货,又避免仓库内混乱不堪?(请不要纠结”店铺自己不是应该有小仓库嘛”这种事情,请关注比喻本身…)

现在,我们在这个调配货物的过程中加入一个中转环节。店铺告诉中转站他们需要什么,由中转站专业调配分配打包,等待店铺小哥前来取走。于是问题就这么愉快地解决了。

在这个物流的故事中“货物”就是数据,存放货物的“总仓库”可以看做数据库,而“店铺”就可以看做我们的网站、App。我们页面上显示的内容、数字,以及用户的操作请求和结果都可以看做是“货物”——数据,会不停的经历这个运输过程。

货物在仓库“按规矩摆放”可以看做数据库的存储结构;在店铺那头,货品的陈列”需要能够吸引到客户“,就代表了我们在设计网站、App的页面信息时需要注重用户体验一般。前端页面的数据展示与后端数据库的存储结构的不一,便是店铺陈列与仓库摆货规则的不一。我们的页面需要的数据,如果都直接去连搜索数据库,就会像故事中的店员去仓库找货物一样没效率。此外,通常我们的产品是由很多流程组成的,其中充满了判断逻辑和计算,这就好比故事中店铺的促销活动时需要”货品再组合“。

如果把这些对数据的操作放在数据库或者页面上进行则会降低他们的运作效率(一般来说情愿放在前端也不放在数据库,数据库的运作更加重要。而放在前端页面来做这些事情,就是我们通常说的”写死“)。我想大家都能猜到,故事中的中转站就是我们所说的API接口了。程序员们在争吵的,其实是如何定义这个API中的内容。根据上面的故事,中转站需要根据店铺的要求预先调配好货物,并且在必要的时候进行分配打包。而这个调配分配打包的过程就是程序员争论的——API中所要包含的字段、计算、逻辑判断。作为设计师,你的设计的页面、流程都极大的影响甚至是决定了前后端这个”物流”的过程。而这个“物流”的过程就是前后端的交互逻辑(看到这里的“交互”二字,交互设计师们你们有什么感想~)。

另外,我们称网页、APP为前端(APP称为客户端),简单来说他们都是运行在用户的终端上的(手机,或自己电脑的浏览器里)。而数据库和API我们都称他们为服务端、后端,简单来说,因为他们远隔万里运行在世界另一边的高级电脑里(即服务器)。

有没有稍微理解了一些呢?

上面的故事只是为了帮助大家更具象的理解API的大致原理,入个门。而实际情况下,前后端的运行逻辑会更加复杂(比如故事中仓库到店铺是单向流通,而真实的程序中则是双向的),更详细的就需要大家回到实战环境自己体会啦。

原文发布于微信公众号 - BestSDK(bestsdk)

原文发表时间:2016-10-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏haifeiWu与他朋友们的专栏

个人博客折腾记

个人博客,也折腾了3年多了吧,不说已经特别稳定了,但起码也做成了自己满意样子,后续还需要继续调整。虽然现在的博客看似简单,并且用的模板,但在博客的这条路上也花了...

31510
来自专栏灯塔大数据

荐读|爬虫还在用Python?我与Node.js不得不说的故事

深夜闲来无事,默默的打开github,在搜索框中填入了”Stars:>1”,本想着依旧可以在第一页看到Spark的身影,结果第一个映入眼帘的是这个: ? 快速...

1.6K50
来自专栏携程技术中心

干货 | 携程呼叫中心异地双活——座席服务的高可用

颜值高的,点上面! 随着业务量的不断上升,呼叫中心已经从单纯的大容量单中心逐渐向多地多中心演化,在这种架构下,多地呼叫中心的统一协作成为整合资源、提升可用性、提...

55390
来自专栏企鹅号快讯

想开发微信小游戏,先看看腾讯是如何制定规则的

关键时刻,第一时间送达! ? 作者 | 凌华彬、王哲 责编 | 徐威龙 一、前言 在第一篇文章《微信小游戏开发上手》中,我们给大家介绍了上手微信小游戏开发所需要...

1.2K50
来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–应付账款(158)-9 F110使用自动付款程序过账付款

4.10 F110使用自动付款程序过账付款 预付款,贷项凭证和发票之间的差异将被付款程序自动过账。 您可以用经典付款媒介程序或付款媒介工作台来产生付款媒介。在下...

446120
来自专栏Seebug漏洞平台

被忽视的攻击面:Python package 钓鱼

1 概 述 2017年6月2日,Paper 收录了一篇 fate0 的《Package 钓鱼》 文章,该文章讲述了作者在 PyPI 上投放恶意的 Pyth...

34050
来自专栏Golang语言社区

Golang语言-写一个检测 tcp udp 状态的包

因为要跟着 dockerpool 的基友写 Docker 管理的程序,所以今年的目标是学习 go 语言。 看完 go 的入门教程,高深的代码还看不懂,所以决定先...

39250
来自专栏花叔的专栏

解读指纹识别、自定义配图、获取发票抬头等小程序API

话说,8月18日微信小程序的开发能力更新了。 关注小程序的读者从版本号就能发现,1.4版本的基础库经历了三个版本,最近上一次版本号是1.4.3,这次是1.5.0...

513100
来自专栏美丽应用

小折腾:修改蓝牙耳机按键映射

30330
来自专栏FreeBuf

物联网究竟有多不安全?2016年IOT设备漏洞情况汇总

近年来,随着智能手机、可穿戴设备、活动追踪器、无线网络、智能汽车、智能家居等终端设备和网络设备的迅速发展和普及利用,针对IOT设备的网络攻击事件比例呈上升趋势,...

44570

扫码关注云+社区

领取腾讯云代金券