当前位置: 首页 > 科技观察

API与SDK:有何区别?

时间:2023-03-11 23:48:34 科技观察

前言什么是API?什么是SDK?两者之间是什么关系?欢迎来到这个每周系列的问题。既然重点来了,相信大家或多或少都听说过这两个名词。因此,在为您解答之前,让我们先从一个例子开始。如果要开发一个OCR应用(通俗的说就是文字识别应用),它的功能就是识别用户上传的一张图片,然后识别出图片中的文字返回给用户。如下图所示:通常,OCR应用的后端服务都部署在云端,那么移动应用与云端服务之间应该如何进行通信呢?这就是API和SDK发挥作用的地方。API通信的API特点首先,我们需要了解API与通信有关,是为应用程序(服务)定义的与其他应用程序(服务)进行通信的协议。在上面的例子中,你可以简单的理解为API是OCR应用与云服务之间的沟通桥梁。那么API到底是什么?API的全称是ApplicationProgrammingInterface,即“应用程序编程接口”。一般指一些预定义的功能,目的是为应用程序和开发人员提供访问一组基于某些软件或硬件的程序的能力,而无需访问源代码或了解内部工作机制的细节。以Java为例,当你要实现一个数组排序功能时,你会先手写一个排序算法,还是直接使用Arrays.sort()函数?我想你心里已经有了答案。抽象其次,我们需要了解API的另一个重要特性——抽象。抽象指的是什么?或者以这个OCR应用为例。我们在使用云端提供的文字识别能力(比如百度文字识别)的时候,背后可能有成千上万的代码,比如提供识别能力的机器学习代码,提供web能力的后端代码等等在。但是作为一个APP开发者,你需要看这些代码是怎么写的吗?百度提供的文字识别能力不知道背后的源码就不能调用吗?当然不是。通常服务商已经给你提供了文档,告诉你如何调用相应的服务,你只要按照他的要求去做就可以了。因此,在您的APP与OCR服务之间,API抽象了所有复杂的逻辑,简化了调用流程,让您只需要考虑获取您需要的数据。StandardizedAPIs是标准化的,这意味着有关于如何定义API的行业标准,例如SOAP、REST、GraphQL等。我在《你的第一本 SpringBoot 书》[1]中写过什么是RESTfulAPI。感兴趣的朋友可以点击阅读。这是我正在写的一个SpringBoot入门教程。它还没有完成。欢迎读者不要吝啬自己的建议。API的组件那么,API通常由什么组成?首先,我们需要向云端发送一些数据,即所谓的“请求”。从本地应用向云端发送请求,需要分几个步骤完成,以REST为例。对于RESTAPI调用请求,第一步是指定传输方式,通常对应HTTP方式,如下图:当你要上传图片时,通常使用POST方式,然后通过一些参数。包括请求的内容(图像本身)。然后加上要请求的地址,组成一个完整的请求。如下图所示:之后服务器会以JSON等形式将数据返回给你,在你使用的云服务的文档中也会标注。SDK说了这么多,你应该对API有所了解,那么这个时候问题就来了,作为开发者,你在实际项目中是如何调用API的呢?还得自己构造HTTP请求,拼接URL,加上需要的Parameters,处理返回的JSON对象,麻烦?麻烦。那么有没有什么好的方法可以简化这些操作,让我只需要给一张图片,然后把结果返回给我呢?自然,这就是我们接下来要说的SDK。SDK的全称是SoftwareDevelopmentKit,软件开发工具包。一般是一些软件工程师用来针对特定的软件包、软件框架、硬件平台、操作系统等构建应用软件的开发工具的集合。实现产品软件的某项功能。SDK的一个示例是JDK。还是以上面的OCR应用为例,如果我们使用某厂商的SDK服务,那么我们甚至不需要构建HTTP请求,只调用一个方法即可,可能的代码如下图所示。OCRResultres=ocrClient.ocr("pic.jpg").getResult();通过调用这行代码,SDK会自动封装API请求,作为响应,你得到的结果不一定是JSON对象,也可能是代码。比如上面代码段中的OCRResult,这是因为SDK也已经将JSON对象反序列化为你需要的对象,比如JavaModel。SDK相当于开发集成工具环境,API是数据接口。可以在SDK提供的“环境”中请求API。同样,这里的“环境”也是一个抽象的概念。如果不使用SDK,也可以直接调用API,但是这个环境必须要开发者自己实现。区别其实从上面的内容我们也了解到API在更多的场合更像是SDK的一个子集。它们的区别如下:API通常是具有特定功能的函数;而SDK是很多功能的集合。函数的集合更像是一个工具包。?API通常作为数据接口,SDK相当于工具环境,通常需要在SDK环境中调用APl。?SDK比API具有更高的封装级别。以上就是本文的全部内容。如果您觉得文章对您有帮助,请关注并转发给您的朋友。这对我来说真的很重要。大家的支持是我继续更新文章的动力,谢谢大家!