什么是API?

您在计算机上运行的许多应用程序都有一个用户界面,通常具有可单击的按钮、可拖动的图标和可输入的文本字段。一些应用程序使用终端作为界面,因此用户可以输入命令,而不是单击按钮或拖动图标。应用程序编程接口(API)也是一个接口,但它是针对应用程序而不是用户的。

当然,所有计算机最终都是供用户使用的,但是API使人类可以轻松编写代码,进而控制API背后的应用程序。 对于人类而言,API是使用应用程序的一种无效且间接的方式,但是对于计算机来说,API是发送信号和获取有意义的数据的一种方便的方式。可以在本地或通过网络(最大的是互联网)访问API,并且可以将它们设计为接受来自任何数量的编程语言和协议的输入。

API通常用于视频游戏设计和修改,扩展复杂的应用程序以及从网站抓取数据并与之交互。

通过API简化编程

API的一个优点是它可以向用户隐藏复杂的代码需求。例如,这是一个简单的C程序,在屏幕上打印“Hello world”:

#include <stdio.h>

int main(int argc, char *argv[]) {
    int i;
    for(i=1;i<argc;i++) {
        printf("%s\n",argv[i]);
    }
    return 0;
}

编写用于产生相同输出的API可以极大地简化代码。例如,这里有一个虚构的API(看起来很像Lua):

cprint(hello_msg)

当然,创建API的代码通常很复杂,正如这个简单示例的Lua示例所演示的那样,但是最终用户不必处理这个问题。最终用户看到的只是一种简化的编程语言,它提供了对非常复杂的计算结果的访问。

通过API简化查询

类似地,可以通过API向最终用户提供特定操作或信息查询的指令。API使人们能够在不需要学习复杂命令或公开敏感数据的情况下使用特性。例如,如果您运行一个支持论坛或聊天服务器,您可能希望共享其他用户的数量(例如,出席的用户越多,得到支持问题的答案的机会就越大),但不共享他们的用户名或活动。

一个实际的例子是由开源的Git主机GitLab实现的发布API。GitLab有一个丰富的API来帮助开发人员标记他们最近发布的软件版本。虽然程序员可以在GitLab web UI中创建发布版本,但是许多开发人员更喜欢自动化这个过程,这样就不需要手动点击选项屏幕。GitLab使通过HTTP(使用POST方法)发送命令成为可能。这里有一个例子:

$ curl --header 'Content-Type: application/json' --header "PRIVATE-TOKEN: example_token" \
  --data '{ "name": "Release", "tag_name": "2.4", "description": "Fixed Makefile.am" }' \
  --request POST https://gitlab.com/api/v4/projects/trashy%2Ftrashy

GitLab API还有更多的功能,包括获取关于标记和发布的信息、删除发布、更新发布等等。因为API使用标准的HTTP方法,所以开发人员很容易使用它并将其集成到现有的流程中。

什么是API密钥

在GitLab示例中,您可能已经注意到需要密钥。API密钥与完全交互式界面中的用户名和密码具有相同的功能。由于希望通过API进行交互的两个实体都是计算机,因此提供用户名和密码字段会非常复杂,例如,登录并检查电子邮件时会看到该字段。取而代之的是,向人类程序员颁发了API密钥,该密钥可包含在编写的与API交互的代码中。

获取API密钥的不同取决于为谁编写API。例如,GitLab在其访问令牌设置面板中提供API密钥,而(闭源)Twitter服务通过开发人员子域提供API密钥。由于API密钥通常被认为是开发人员的工具,所以它们很少被默认分发给每个用户,而是根据请求保留给高级用户。

API密钥具有与用户名和密码相同的优点:它们规范了对敏感数据的访问。正如API允许一个应用程序根据通过API提供的调用有选择地显示信息一样,API密钥允许根据请求调用是否具有有效的API密钥来进行异常处理。

SDK和API之间的区别

API从用于控制应用程序的工具中抽象出应用程序的编程功能。软件开发工具包(SDK)是应用程序的文字编程功能。

在开放源码中,API通常是为了方便或安全而提供的。有时,API使程序员可以轻松地围绕复杂的应用程序构建工具,而不必过多地了解应用程序的工作方式。有时,API保护重要或敏感的数据,同时仍然允许访问其他数据。

在专有应用程序中,SDK充当代码库的“最开放”部分,通常需要花费金钱才能合法地访问它。它通常是开发人员购买产品的一部分,因此他们可以使用它进行开发。

从技术上讲,开源中不需要SDK。任何人都可以直接使用和修改源代码。然而,一些开放源码项目提供了一个SDK,用于向开发人员指出对于最常见的用例来说哪些功能是最重要的。例如,如果您想开发一个Qt应用程序,您可能想要使用Qt SDK,即使Qt是开源的,因为当人们谈论开发Qt应用程序时,他们的意思是他们正在使用Qt库来开发他们自己的应用程序。如果您想要开发Qt本身,您不会使用Qt SDK,因为您实际上是在编写SDK。

在某些情况下,SDK和API之间的分隔可能会模糊,但是通常,SDK提供对库的访问,而API使用这些库根据命令生成结果。

如何创建API

API是一个接口,这意味着它的存在是为了促进交互。在计算中,一个交互通常由一个请求和一个答案组成。如果您编写的代码通过协议而不是直接人工干预来监听指令,那么您可能已经创建了一个API。

API可以用任何编程语言编写。许多是在JBoss和3scale等“中间件”的帮助下用Java编写的,而其他的则是用Python使用Flask或Django或Pyramid编写的。还有一些是用Ruby、Perl、Lua、C、c++、. net和几乎任何你能想到的其他语言编写的。

什么是RESTful API

在他的论文中,Roy Fielding博士描述了一种他称为表示状态转移(Representational State Transfer,REST)的API风格。关于什么是RESTful API,有很多微妙之处,但最重要的一点是无状态的概念:服务器(API的一方根据从客户端接收到的提示执行操作)必须不存储用户数据,并且必须从客户端接收所需的一切。这意味着RESTful API必须具有设计为提供完成交互所需的所有数据的调用。

如果您编写了提供用户银行余额的API,那么您的API必须接受用户名和密码(或API密钥)、相关银行帐户、检索银行余额所需的命令以及任何选项(例如货币类型和语言)。所有这些信息都必须随每个请求一起提供,因为在每个请求之后,服务器将返回其默认的“无知识(no-knowledge)”状态,就好像从未收到任何人的请求一样。即使用户正在执行相关任务,例如在将资金从该帐户转移到另一个帐户之前获得帐户余额,服务器也要求将所有凭据和详细信息作为请求的一部分进行传输。

RESTful API有很多好处,其中最重要的是客户机和服务器分离。由于服务器不包含用户数据,并且不依赖于特定类型的接口,因此许多开发人员可以开发唯一的客户端。这意味着手机应用程序和基于终端的应用程序可以在不做任何修改的情况下为同一服务器开发,因为API提供了一致的接口。大多数终端命令的功能是一样的,这不是巧合。即使允许存储持久选项的配置文件的命令仍然提供环境变量或命令行选项,供您指定重要参数、输入和输出。RESTful API非常类似于在其他系统上运行的命令。

利用API

如果您从未使用过API,请尝试使用简单的API,然后记录您喜欢它的哪些方面以及它的限制。如果您是开发人员,请阅读API设计并尝试编写API。与开源本身一样,API的概念帮助计算变得更灵活、更容易访问和更高效。

六一编程网

发表评论

Next Post

Python中使用Tkinter制作记事本

周三 5月 6 , 2020
让我们看看如何使用Tkinter在Python中创建一个简单的记事本。该记事本GUI将包含各种菜单, […]