分享

API是什么-CSDN博客

 和相品 2024-11-02

        API是“应用程序编程接口”(Application Programming Interface)的缩写,它是一套规则、协议和工具,用于构建软件应用。API定义了不同软件组件之间如何交互,允许开发者更容易地使用某些功能,而无需了解其内部实现细节。通过使用API,开发者可以高效地复用代码、接入外部服务、构建复杂功能,同时保持代码的模块化和可维护性。

不同的软件层次和应用场景出发,API可以分为以下几类:

  1. 系统API:也称为本地API或操作系统API,它为运行在操作系统上的应用程序提供了访问硬件、内存、文件系统和其他操作系统服务的能力。open(), write(), read(), close()等就是系统API的例子。

  2. 库API:由软件库提供的API,允许开发者利用库中封装的功能,如图形渲染库OpenGL、图像处理库(OpenCV)、数学运算库BLAS等。

  3. Web API:特别是RESTful API和SOAP API,它们允许网络应用程序通过HTTP协议与服务器交换数据和进行功能调用,常用于网页和移动应用后台服务的交互。

  4. 应用程序API:专为某个应用程序设计的接口,用于扩展其功能或与其他系统集成,如Office应用的API,可以让开发者创建与Office套件交互的应用。

  5. 第三方API:由第三方服务商提供的API,允许开发者访问其服务或数据,如社交媒体平台(Facebook, Twitter)、地图服务(Google Maps)、支付服务(PayPal)等的API。

  6. 移动设备API:针对移动平台(如iOS的Swift API、Android的SDK)设计的接口,支持开发移动应用程序特有的功能,如GPS定位、相机访问、推送通知等。

  7. 硬件API:用于与硬件设备交互的接口,如DirectX、OpenGL用于图形和游戏开发,以及各种传感器和外设的控制接口。

  8. 云API:云服务提供商(如AWS、Azure、Google Cloud)提供的API,用于管理云资源、部署应用程序和服务、处理大数据等。

  9. RPC (Remote Procedure Call) APIgRPC API:用于跨网络调用远程服务,实现像调用本地函数一样调用远程过程,gRPC特别强调高性能和协议缓冲区。

  10. 事件驱动API和消息队列API:用于处理异步事件和消息传递,如AMQP(Advanced Message Queuing Protocol)、Kafka等。

  11. 软件开发工具API:IDEs(集成开发环境)和开发工具包提供的API,用于自动化构建、测试、部署流程等。

        API的分类界限可能不是绝对的,有些API可能会同时具有上述分类中的多个特征。

1. 系统API 示例(C语言,Linux环境)

功能:展示如何使用系统API打开、写入、读取并关闭一个文件。

在Linux系统中,“一切皆文件”的哲学深入人心,这意味着系统把几乎所有资源(包括硬件设备、管道、套接字等)都抽象为文件来处理。因此,你可以使用系统API(如open(), read(), write(), close()等)来操作不仅仅是常规的磁盘文件,还包括许多系统相关的特殊文件。

  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <unistd.h>
  4. #include <sys/stat.h>

  5. int main() {
  6. int fd;
  7. const char *filename = "testfile.txt";

  8. // 系统API: open()
  9. fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
  10. if (fd == -1) {
  11. perror("open");
  12. return 1;
  13. }

  14. // 系统API: write()
  15. const char *msg = "Hello from System API!";
  16. ssize_t bytes_written = write(fd, msg, strlen(msg));
  17. if (bytes_written == -1) {
  18. perror("write");
  19. } else {
  20. printf("Wrote %zd bytes.\n", bytes_written);
  21. }

  22. // 关闭文件
  23. close(fd);

  24. // 另外打开文件用于读取
  25. fd = open(filename, O_RDONLY);
  26. if (fd == -1) return 1;

  27. // 系统API: read()
  28. char read_buffer[100];
  29. ssize_t bytes_read = read(fd, read_buffer, sizeof(read_buffer) - 1);
  30. if (bytes_read > 0) {
  31. read_buffer[bytes_read] = '\0'; // 添加结束符
  32. printf("Read: %s\n", read_buffer);
  33. } else {
  34. perror("read");
  35. }

  36. // 最终关闭文件
  37. close(fd);
  38. return 0;
  39. }

2. 库API 示例(Python,使用NumPy库)

功能:展示如何使用NumPy库进行数组操作。
  1. import numpy as np

  2. # 库API: NumPy创建数组并进行数学运算
  3. arr = np.array([1, 2, 3])
  4. squared = np.square(arr)
  5. print("Original array:", arr)
  6. print("Squared array:", squared)

3. Web API 示例(使用Python的requests库访问GitHub API)

功能:查询GitHub上某个用户的公开仓库信息。
  1. import requests

  2. # Web API: 访问GitHub API获取用户仓库列表
  3. username = "octocat"
  4. url = f"https://api.github.com/users/{username}/repos"
  5. response = requests.get(url)

  6. if response.status_code == 200:
  7. repositories = response.json()
  8. for repo in repositories:
  9. print(repo["name"])
  10. else:
  11. print(f"Failed to fetch data. Status code: {response.status_code}")

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多