什么是SDK?SDK与API区别又是什么?

网上的文章解释实在让人难懂,那我就用写代码的方式解释一下。

这里我用到python的Flask库对外提供api

首先写一个后端服务,比如我提供一个“hello xxx” 的服务,运行起来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/api', methods=['GET'])
def hello_world():

name = request.args.get("name","")
print(f"name: {name}")
if name :
return "Hello, " + name + "!"
else:
return "Hello, World!"
if __name__ == '__main__':
app.run()

会有一个地址 127.0.0.1:5000 ,在我们本地5000端口开启一个服务。

然后我们在浏览器输入我们的接口 127.0.0.1:5000/api 并同时设定传入参数 name = j
浏览器帮助我们发送了http请求

如图:
image.png

我们可以看到在浏览器中返回给我们对应的值


但如果我是一个用户,我需要用这个api,那么我就需要写请求,来使用这个服务

1
2
3
4
import requests
url = "http://127.0.0.1:5000/api"
respone=requests.get(url=url,params={"name":"j"})
print(respone.txt)

但如果是一个复杂的api,开发者就需要重复写这些繁杂的代码

作为一个云服务商,就可以用SDK封装这些代码

1
2
3
4
5
6
7
import requests
class HelloSDK:
@classmethod
def get_hello(cls,name):
url = "http://localhost:5000/api"
response = requests.get(url=url,params={"name":name})
return response.text

我们把使用API服务的代码封装起来。


再把身份换到开发者,我现在要使用这个服务,那么我就可以直接下载服务商的SDK,直接调用,如下图:

image.png

这样我只需要一行代码即可完成调用。


如今各个云服务的厂商都会提供SDK
例如下图的腾讯云
image.png

调用这些云厂商的服务,那么一定会涉及到对你的密钥的加密,那么使用SDK即可快速使用这些服务,不需要去查这些复杂的过程。


总结

API是一种定义,SDK是方便开发者使用

你调用了一个函数,这个函数不是你写的,那么这个函数就是api。
多个这种函数的提供方被称为lib,他们帮助你快速实现底层逻辑,而不需要你使用std去逐个实现。比如调用opengl画各种图像。
然而也有大型的业务功能一键调用,它内部实现了各种逻辑,只是让你的程序能够快速实现复杂的业务功能。比如后台的语音合成功能。这种对业务提供api的玩意叫sdk。
lib与sdk的区别就是一个是提供底层实现,一个是提供业务实现。
当你决定一个项目需要怎样设计才能保证性能,安全,扩展。各个环节用什么技术,什么lib,什么sdk的时候,这个玩意叫架构。不同于api,lib,sdk可以是黑盒的,架构必须是透明的。