API入门指南
前几天我去奶奶家给她讲解API(应用程序接口)的相关知识。
如果你是一名计算机科学专业的学生,或者正在尝试进入软件行业,你可能会经常遇到 API 这个词。API 代表应用程序编程接口(Application Programming Interface),它是软件开发中不可或缺的一部分。要理解 API,让我们从这个缩写词的最后一个词——接口(Interface)开始。
什么是接口?
界面是一个层(或抽象层),它将大部分底层功能从用户眼前移除,并为用户提供一个简单的平台来与实体(例如电视)进行交互!
我们使用电视遥控器来换台、调节音量或屏幕亮度。在这里,电视遥控器充当了我们与电视的交互界面。作为最终用户,我们只需使用遥控器上的按钮,就能控制电视的所有功能,甚至无需了解其工作原理。
你听说过GUI这个词吗?GUI——图形用户界面,提供了一种界面,使用户更容易操作特定的程序。
同样,对于开发人员来说,大多数组件都是可重用的,它们经过抽象,并通过接口(API)进行访问,用于应用程序编程。因此,就有了 API。
API简介
API 提供所需的数据,并将底层代码的大部分实现抽象化,从而为软件开发人员节省大量时间、开发成本,并且通常可以节省大量工作(如果从头开始编写的话)。
如今,我们提到“API”时,通常指的是基于Web的API,但API的应用范围远不止于此。例如,如果要将字符串转换为大写,任何编程语言都提供了相应的方法。这就是API的实际应用。我们当然也可以通过操作底层代码来实现同样的功能,但使用API显然更加便捷、快速和方便。
同样,框架为开发者提供 API,以加快应用程序的开发速度。这些 API 为我们完成了大量工作,避免了开发者重复造轮子。我们只需向框架 API 提供所需数据即可。
基于 Web 的 API
我们现在都知道,API 通过抽象化底层的大量事物为我们做了很多工作,随着技术的进步,API 也随之发展。
随着互联网,尤其是云计算的出现,越来越多的人开始通过互联网传输数据。同样,许多企业和机构也开始使用应用程序接口(API)通过互联网提供服务。
假设用户想要查询今天的天气,显然用户的手机里没有内置气压计,也没有连接到当地气象站的线缆。用户只需使用一款天气应用,该应用会利用用户手机的GPS定位功能,将位置信息发送到远程的基于Web的API,API再将当前的天气数据返回给用户的手机。
开发者可以使用多种方法构建远程 API。最流行的方法是REST(表述性状态转移)。采用这种方法的 API 被称为RESTful API。
REST API 非常流行,以至于人们提到任何 API 时,通常指的是 RESTful API。
要了解如何从 RESTful API 访问数据,就需要了解计算机如何通过互联网相互通信。
互联网
连接到互联网的设备种类繁多,例如台式电脑、智能手机、服务器、游戏主机等等。人们不禁会问,韩国的智能冰箱是如何通过互联网与远在夏威夷的气象站进行通信并获取数据的呢?这其中必然存在某种通用语言、规则,或者用技术术语来说——协议。
让我来介绍一下超文本传输协议,简称HTTP。HTTP是一种通用协议(或规则),所有连接到互联网的设备,无论其底层设计如何,都使用它来进行相互通信,以确保彼此能够理解。
超文本传输协议(Hypertext Transfer Protocol)顾名思义,传输的是名为“超文本”的东西。
为了便于理解,我们不妨将超文本理解为包含一些文本和链接的文档,这些文本和链接显示在计算机屏幕(或类似设备)上,用户可以轻松访问。
这种超文本通常是通过客户端(你的计算机)向远程服务器(连接到互联网的其他计算机)发送请求而获得的,然后远程服务器会以包含数据的超文本文件作为响应。
HTTP 请求必须伴随一个 HTTP 动词——GET、POST、DELETE 等,通常默认使用 GET。但本博客并非讨论 HTTP 请求或计算机网络,因此为了便于理解,我们假设 GET 用于从服务器检索数据,POST 用于发送数据,DELETE 用于发送删除服务器上数据的请求。
回到我们的 RESTful API 如何获取数据这个问题,客户端(智能冰箱)向服务器(一台位于夏威夷、繁忙而孤单的计算机)请求资源(天气数据),服务器则返回该资源(同样是天气数据)。此外,REST API 是无状态的——传输过程中的任何数据都不会在客户端和服务器之间存储。
好了,那么我们能用 API 做什么呢?
我们几乎可以开发出任何用途的任何应用程序!
- 想开发一款能告诉你地球轨道卫星位置的应用程序吗?— https://api.nasa.gov/
- 想用 Alexa 控制你的特斯拉吗?— https://www.teslaapi.io/(非官方支持)
- 15 分钟内就能开发一个天气应用?当然可以——https: //openweathermap.org/api
- 想查询本地列车时刻表?— https://indianrailapi.com/
- 你说的是表情包?为什么不呢——https: //imgflip.com/api
下一篇博客中,我将调用其中一个 API,使用几种方法来获取数据。在此之前,请欣赏这篇漫画:
更多信息请访问:https://theycantalk.com/
实用链接
- https://www.youtube.com/watch?v=GZvSYJDk-us&t=5086s — 来自 freeCodeCamp.org 的精彩视频。我的大部分内容都来源于此视频。
- https://developer.mozilla.org/en-US/docs/Web/API
- https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
