• 通过代码解释什么是API,什么是SDK?


    这个问题说来惭愧,读书时找实习面的第一家公司,问的第一个问题就是这个。

    当时我没能说清楚,回去之后就上百度查。结果查了很久还是看不懂,然后就把这个问题搁置了。

    谁知道毕业正式工作后,又再一次地面对了这个问题......(事实告诉我们,欠的知识债总是要还的)

    现在回过头想,我能明白自己为啥想不通这个问题:

    1. 没用过 SDK
    2. 思维只停留在前后端 API 接口交互

    所以想要弄清楚这个问题,看别人写的概念解释文章可能帮助不大,还是得自己亲手设计一下 API,使用或简单封装一个 SDK。

    下面,我尝试设计一个小故事,直接通过代码讲清楚这个事儿。

    对外提供云你好服务

    假设我是一个软件服务提供商,我设计了一个打招呼的服务,给他起了个名字叫:云你好。

    用户只要调用我的 API 接口,就能使用我的服务,我会向他打一个招呼。

    首先我起一个后端服务,这里选择用 python,主要是用 python 比较快,代码少,解释这个问题和语言无关哈。(先看代码,再解释)

    # 云你好服务源码
    from flask import Flask
    from flask import request
    
    app = Flask(__name__)
    
    # 云你好服务 API 接口
    @app.get("/api/hello")
    def hello():
        # 看用户是否传递了参数,参数为打招呼的目标
        name = request.args.get("name", "")
        # 如果传了参数就向目标对象打招呼,输出 Hello XXX,否则输出 Hello World
        return f"Hello {name}" if name else "Hello World"
    
    # 启动云你好服务
    if __name__ == '__main__':
        app.run()
    

    从上面代码可以看出,我定义好了你好云的 API 接口:

    @app.get("/api/hello")
    def hello():
        ......
    

    当我的服务跑起来后,我就会告诉用户我的 API 调用方式:

    请求地址:GET http://127.0.0.1:5000/api/hello

    可选请求参数:name - 打招呼的对象名儿

    当然更规范的做法是提供一份 API 文档。

    没有 SDK 如何使用云你好

    接下来我们切换一下身份,假设我现在是一名云你好的用户。

    在我登陆上云你好的官网后,只看到了云你好定义的 API 调用规则。

    也就是说,如果我想使用云你好服务,不管我是写 python,写 java,或是写 golang,都得写发送 http 请求的代码,调用云你好的 API 使用打招呼服务。

    比如在 python 中我们可以这样写:

    # 我是云你好服务的一名客户,我通过发送 http get 请求使用云你好
    
    import requests
    
    # API 地址
    url = "http://127.0.0.1:5000/api/hello"
    # 发送 GET 请求
    response = requests.get(url=url, params={"name": "阿菌"})
    # 打印响应结果
    print(response.text)
    

    最后得到结果:Hello 阿菌

    更好地服务我的客户

    接下来我们切换一下身份,假设我变回了云你好的服务提供商。

    经过一些简单的调研,我听说有非常多的 python / java / golang 工作者喜欢使用我们的云你好服务。

    为了让他们更方便地使用云你好服务,我决定向他们提供云你好服务 python sdk / java sdk / golang sdk,进一步降低他们使用云你好服务的难度(忽悠他们更多的服务费)

    下面我以 python sdk 作为示例,在 sdk 中,我会封装好使用云你好服务的逻辑,仅对用户提供一个 hello 方法,这样只要用户安装好云你好 sdk,就能直接调用 hello 方法使用云你好服务了。

    # 云你好 python sdk
    import requests
    
    
    class HelloSDK:
        # 云你好服务地址
        service_url = "http://127.0.0.1:5000/api/hello"
    
        @classmethod
        def hello(cls, name):
            response = requests.get(url=cls.service_url, params={"name": name})
            return response.text
    

    写好 sdk 后,我们会在官方网站上更新道:

    大家好,欢迎使用云你好 python sdk,您可以通过以下方式使用 sdk:

    1. 安装云你好 sdk:pip install hello-sdk
    2. 使用你好云 sdk:
    from hello_sdk import HelloSDK
    
    HelloSDK.hello("阿菌")
    

    使用 SDK 访问你好云

    然后我们再次切换身份,假设我是你好云服务的用户,你好云发布 SDK 了,我非常高兴,于是我的代码就简化成这样了:

    # 我是云你好服务的一名客户,我通过你好云的 hello-sdk 使用你好云服务
    
    from hello_sdk import HelloSDK
    
    HelloSDK.hello("阿菌")
    

    得到的结果仍然是:Hello 阿菌

    总结

    希望上面的代码能帮助大家理解 API 和 SDK,当然它只是一个极简的 Demo,不能代表 API 和 SDK 这两个概念的全部东西。

    IT 行业中有很多概念,他们背后往往对应的是一类行为,如果仅从技术名词的角度理解是非常痛苦的,所以极力推荐动手实践学习。

    API 的全称是:Application Program Interface(应用程序接口)

    SDK 的全称是:Software Development Kit(软件开发工具包)

    如果让我总结 API 和 SDK 的区别,我觉得 API 可以理解成一种标准吧,我们按照服务提供商定义的 API 标准去调用他们的服务,就能得到相应的结果。

    而 SDK 可以理解为对 API 背后服务的一种封装,它更贴近用户,能大幅降低用户使用服务的开发成本。

    最后,如果同学们还想进一步学习的话,推荐去看一下云厂商的 API 和 SDK 定义,甚至分别动手体验一下,绝对瞬间秒懂。

    往期推荐:

    1. 写代码解释什么是api,什么是sdk
    2. 飞机大战小游戏全制作过程分享
    3. 仿flappy bird小游戏制作分享
    4. 如何开始编写技术博客?markdown语法入门,分享使人进步
    5. 请求参数、表单参数、url参数、header参数、Cookie参数有什么区别?
  • 相关阅读:
    如何监听 MySQL 实现数据变化后的实时通知
    将自定义RPM包加入YUM
    java计算机毕业设计医院远程诊断系统源程序+mysql+系统+lw文档+远程调试
    Jenkins: 配合docker来部署项目
    基于SSM+Vue的校园教务系统的设计与实现
    【自学笔记】如何在 Python 中使用 YAML 文件? 了解 YAML 格式和规范
    UE4_定序器控制蓝图对象
    2023-10-10 mysql-{mysql_alter_table}-出错后回滚-记录
    JavaScript预备知识
    毫秒级精度计划任务管理、系统运维管理、定时执行任务、定时任务执行、任务定时执行软件 —— 定时执行专家
  • 原文地址:https://www.cnblogs.com/tanshaoshenghao/p/16217608.html