打开天气App,温度是它自己测的吗?不是。App 调用了气象数据服务商的接口,服务器把数据返回来,App 负责画得好看。这个被调用的东西就是 api,全称应用程序编程接口,说白了是程序之间约好的一份调用规则。
生活里到处是 api
点外卖用微信付款,是外卖App调了微信支付的接口;查快递输单号,是查询页调了快递公司的接口;网页上点「第三方登录」,是调了对应平台的授权接口;智能音箱能听懂人话,背后也是语音识别服务的接口在跑。你不用懂每家怎么实现的,按约定发请求、收结果就行,这就是接口的价值。
一次调用长什么样
curl https://api.example.com/weather?city=beijing
这类接口一般按 restful 风格设计:GET 拿数据,POST 提交数据,返回的多半是 JSON 文本,前端解析后显示。参数拼在地址里或放在请求体里,鉴权通常靠一个 api key,谁申请谁持有,泄露了别人就能拿你的额度乱刷。
系统底层也有
不止网络服务。程序在 Windows 上弹对话框、读文件,调的是操作系统的 api;单片机点个灯,用的也是芯片厂商提供的接口函数;Windows 里一堆 dll 文件,装的正是各类接口的现成实现,程序不用自己重写。凡是别人写好、你按约定调用的功能入口,都算这个范畴。
和界面、SDK 的区别
界面是给人看的,api 是给程序调的。同一份数据,网页是它的界面,接口是它的 api。SDK 则是一包封装好的代码工具,帮你更省事地调某家的接口,比如地图厂商的定位 SDK,底层还是请求人家的服务。
日常用软件时感觉不到它,但两件事有关:接口出问题,App 的部分功能会集体失灵,比如支付一直转圈;自己的项目要接第三方服务时,看接口文档比看科普管用,文档里的示例请求抄下来改参数就能跑。
把 api 想成餐厅窗口就行:按菜单点单是发请求,窗口递菜是返回数据,后厨怎么做的不用管。下次看到「开放平台」几个字,进去翻两页文档,比看十篇解释文章都直观。