2.4 API 开发和集成

news2024/12/24 21:41:16

文章目录

  • API 开发和集成
    • API 的概念和作用
    • API 开发基础
    • API 集成
    • API 鉴权和安全
    • API 文档和测试
    • 微服务和 API 网关
    • 云服务和 API 集成
    • 未来趋势和发展
    • 实验
      • 实验一: 通过api post方式传入 json
      • 实验二:通过api将所需数据传入

API 开发和集成
API 的概念和作用介绍 API(应用程序编程接口)的定义和作用
解释为什么 API 在现代软件开发和系统集成中非常重要
API 开发基础

了解 API 的设计原则和最佳实践
介绍 RESTful API 的概念和特点
使用 Flask 或 Django 开发简单的 RESTful API,包括创建路由、定义资源和请求方法
API 集成

解释 API 集成的目的和好处,如系统之间的数据交换和功能扩展
使用 Python 的 requests 库进行 API 调用和数据传输
实现不同系统之间的数据交换,如与外部服务商的 API 集成
API 鉴权和安全

讨论 API 的鉴权机制,如基本认证、Token 鉴权等 >
强调保护 API 安全,防止恶意调用和数据泄露
使用 Python 实现安全的 API 调用和数据传输,保护敏感数据
API 文档和测试

编写清晰的 API 文档,包括接口说明、参数和返回值等
使用 Swagger 或其他 API 文档工具生成 API 文档
实现 API 的自动化测试,确保 API 功能和性能的稳定性
微服务和 API 网关

了解微服务架构,以及微服务之间的 API 调用和通信
引入 API 网关的概念,用于管理和调度微服务之间的 API 请求
实践使用 Python 编写的 API 网关,对微服务进行统一管理和访问控制
云服务和 API 集成

使用 Python 编写与云服务商的 API 集成脚本,如 AWS、Azure 或 Google Cloud 的 API 调用
实现自动化的云资源管理,包括创建实例、存储、网络等
利用 Python 脚本集成云服务,实现自动扩展、备份和监控等功能
未来趋势和发展

探讨 API 技术的未来发展,如 GraphQL、分布式 API 等
分析 API 在新兴技术领域的应用,如 AI、大数据和区块链
总结 API 开发和集成在现代软件开发中的不断演进和创新

API 开发和集成

API 的概念和作用

API,全称为应用程序编程接口,是一种使软件应用能够相互通信的接口。它定义了应用程序之间交互的方法,使得开发者可以使用已经定义好的功能,而不需要从零开始编写所有代码。

在现代软件开发和系统集成中,API 的作用不可忽视。它们使得不同的软件系统能够相互通信,共享数据和功能,从而提高开发效率,降低开发成本。例如,许多网站和应用程序会使用社交媒体平台的 API,让用户可以使用他们在社交媒体平台上的账户进行登录,这样就无需为每个网站或应用程序创建新的账户。

API 开发基础

API 的设计和开发需要遵循一些原则和最佳实践。首先,API 应该是简洁明了的,易于理解和使用。其次,API 应该是可扩展的,能够适应软件应用的变化和发展。

在 API 的设计中,RESTful API 是一种常见的设计风格。RESTful API 使用 HTTP 方法(如 GET、POST、PUT 和 DELETE)来操作资源,这些资源通常以 URL 的形式表示。例如,我们可以使用 GET 方法来获取资源,使用 POST 方法来创建新的资源。

在 Python 中,我们可以使用 Flask 或 Django 这样的框架来开发 RESTful API。以下是一个使用 Flask 开发的简单 API 的例子:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/tasks', methods=['GET'])
def get_tasks():
    tasks = [{'id': 1, 'name': 'Write blog post'}, {'id': 2, 'name': 'Test API'}]
    return jsonify({'tasks': tasks})

if __name__ == '__main__':
    app.run(debug=True)

在这个例子中,我们定义了一个 GET 方法的路由 /api/tasks,当用户访问这个 URL 时,会返回一个包含两个任务的 JSON 对象。

API 集成

API 集成是将两个或多个应用程序连接在一起,使它们可以共享数据和功能。这是通过使用每个应用程序的 API 来实现的。API 集成的主要好处是它可以提高效率,因为它允许不同的应用程序共享数据和功能,而不需要重复输入或复制数据。

Python 的 requests 库是一个常用的 HTTP 客户端库,可以用来发送 HTTP 请求。以下是一个使用 requests 库调用 API 的例子:

import requests

response = requests.get('http://example.com/api/tasks')
tasks = response.json()

在这个例子中,我们发送了一个 GET 请求到 http://example.com/api/tasks ,然后将返回的 JSON 数据解析为 Python 对象。

API 鉴权和安全

API 鉴权是确保只有经过授权的用户才能访问 API 的过程。常见的 API 鉴权机制包括基本认证(Basic Authentication)和令牌认证(Token Authentication)。

基本认证是一种简单的鉴权机制,它通过用户名和密码进行认证。然而,基本认证并不安全,因为它将用户名和密码以明文形式发送。

令牌认证是一种更安全的鉴权机制,它使用一个令牌(Token)来代替用户名和密码。令牌是在用户成功登录后由服务器生成的,它包含了用户的身份信息和一些元数据。

在 Python 中,我们可以使用 requests 库来进行 API 鉴权。以下是一个使用令牌认证的例子:

import requests

headers = {'Authorization': 'Token your-token'}
response = requests.get('http://example.com/api/tasks', headers=headers)
tasks = response.json()

在这个例子中,我们在请求头中添加了一个 Authorization 字段,其值为 Token your-token,其中 your-token 是你的令牌。

API 文档和测试

API 文档是描述 API 的详细信息的文档,包括 API 的功能、请求方法、请求参数、返回值等。一个好的 API 文档可以使开发者更容易地理解和使用 API。

Swagger 是一个常用的 API 文档工具,它可以自动生成 API 文档,并提供一个用户界面来浏览和测试 API。

API 测试是检查 API 是否按照预期工作的过程。API 测试可以检查 API 的功能、性能、安全性等。在 Python 中,我们可以使用 unittestpytest 这样的测试框架来进行 API 测试。

微服务和 API 网关

微服务架构是一种将应用程序分解为一组小型服务的方法,每个服务都运行在其自己的进程中,并通过 HTTP API 进行通信。微服务架构的主要优点是它可以提高系统的可扩展性和可维护性。

API 网关是一种处理 API 请求的服务器,它在微服务和外部客户端之间充当代理。API 网关的主要职责是路由请求、聚合数据和实施跨切面关注点,如身份验证和授权。

以下是一个使用 Python 和 Flask 编写的简单 API 网关的例子:

from flask import Flask, jsonify, request
import requests

app = Flask(__name__)

@app.route('/api/<service>/<resource>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def proxy(service, resource):
    response = requests.request(
        method=request.method,
        url=f'http://{service}/{resource}',
        headers={key: value for (key, value) in request.headers if key != 'Host'},
        data=request.get_data(),
        cookies=request.cookies,
        allow_redirects=False)

    return (response.content, response.status_code, response.headers.items())

if __name__ == '__main__':
    app.run(debug=True)

在这个例子中,API 网关将所有的 API 请求转发到相应的服务。

云服务和 API 集成

云服务提供了一种方便的方式来部署和管理应用程序。许多云服务提供商,如 AWS、Azure 和 Google Cloud,都提供了他们自己的 API,开发者可以使用这些 API 来管理云资源,如创建和删除实例、存储和网络。

以下是一个使用 Python 和 AWS SDK(boto3)编写的简单脚本,该脚本创建一个新的 EC2 实例:

import boto3

ec2 = boto3.resource('ec2')

instance = ec2.create_instances(
    ImageId='ami-0abcdef1234567890',
    MinCount=1,
    MaxCount=1,
    InstanceType='t2.micro',
    KeyName='my-key-pair',
    SubnetId='subnet-0abcdef1234567890')[0]

print(f'Created instance {instance.id}')

在这个例子中,我们使用 boto3.resource 函数创建了一个 EC2 资源对象,然后调用 create_instances 方法创建了一个新的 EC2 实例。

未来趋势和发展

API 技术正在不断发展和创新。例如,GraphQL 是一种新的 API 技术,它允许客户端指定他们需要的数据,从而避免了过度获取和数据不足的问题。

此外,API 在新兴技术领域也有广泛的应用。例如,在人工智能领域,许多服务提供商提供了 API 来访问他们的机器学习模型。在大数据领域,API 可以用来查询和分析大量的数据。在区块链领域,API 可以用来发送交易和查询区块链的状态。

总的来说,API 开发和集成在现代软件开发中的作用越来越重要。通过学习和掌握 API 技术,开发者可以提高他们的开发效率,扩大他们的技术视野,为未来的软件开发做好准备。

实验

实验一: 通过api post方式传入 json

安装python3(根据系统选择)

yum -y install python3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编辑 server.py 文件 vi server.py

from flask import Flask, request, jsonify

app = Flask(__name__)

# Create an in-memory structure to hold posted data
data = {"name": "lihua"}

@app.route('/', methods=['GET', 'POST'])
def handle_data():
    global data
    if request.method == 'POST':
        # Overwrite the old data with the posted JSON
        data = request.get_json()
        return '', 204
    else:
        return jsonify(data), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9999)

运行程序

python3 server.py &

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据提示IP访问。我这里是192.168.77.135:9999

image-20231204155452998

或者postman

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后修改方式为post,更改name值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

再改回get获取,或者浏览器访问。

image-20231204160141770

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从以上小实验可以看出,我们去操控一个json接受数据并不是很难。代码也就十几行,这个如果稍微优化一下代码,就可以实现通过api修改数据库中用户的账号名称,而且这个作为后端代码,不需要理会其他的一个传入的语言是什么,json交流,至于同学心中可能有疑问,你就这么简单就更改了数据库了,或者这个json那么简单获取了,不安全布拉不拉…,告诉你们,不会,绝对的安全,这种api接口,我不是很清楚,api加密什么的,就简单从运维层面上,我就不可能让别的用户拿到api连接,不对外暴露,而且我json格式你不可能get到。你就算网络通了,你也拿不到api。再有就是,现在都是容器内部通信,多层加密的,所以放心学吧

实验二:通过api将所需数据传入

在刚刚的基础上,我们再写一个脚本vi client.py

from flask import Flask, render_template_string
import requests

app = Flask(__name__)

@app.route('/')
def display_name():
    response = requests.get("http://192.168.77.135:9999")
    name = response.json()['name']
    return render_template_string("<p>Name received: {{ name }}</p>", name=name)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9988)

运行

python3 client.py &

l外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查看现象,根据提示IP访问。我这里是192.168.77.135:9988

image-20231204161709071

你可以认为这是一个后端界面。我们去不断的获取9999端口的数据。然后写入数据库,或者其他结构体存储起来,这样一个api调用就完成了。

这就是api请求的接收,通过9999暴露一个json,通过9988接受,这里只是方便演示,所以也开启了浏览器显示,否则是不必要的。

希望通过两个实验能够使你更加理解api调用,不至于那么惧怕它。很简单很实用的东西。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1282835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS2022创建一个C++项目使用教程

启动VS&#xff0c;打开之后会出现如下界面&#xff0c;点击“创建新项目”&#xff0c;创建一个新项目&#xff1a; 点击“空项目”&#xff0c;再点击“下一步” 给项目命名&#xff0c;点击“创建”&#xff1a; 点击“视图”&#xff0c;再点击解决方案资源管理器&#xff…

openEuler 20.03 (LTS-SP2) aarch64 cephadm 部署ceph18.2.0【1】离线部署 准备基础环境

准备3台虚拟机服务器(均可访问公网) 10.2.1.176 &#xff08;作为操作机&#xff09; 10.2.1.191 10.2.1.219 安装基础工具 yum install -y vim 配置hosts 编辑/etc/hosts&#xff0c;添加 10.2.1.176 ceph-176 10.2.1.191 ceph-191 10.2.1.219 ceph-219 配置免密登录…

【Docker】资源配额及私有镜像仓库

资源配额及私有镜像仓库 一、Docker资源配额1.1、控制cpu1.1.1、cpu份额控制1.1.2、core核心控制1.1.3、配额控制参数的混合使用 1.2、控制内存1.3、控制IO1.4、资源释放 二、Docker私有镜像仓库Harbor2.1、Harbor简介2.2、为Harbor自签发证书【1】生成ca证书【2】生成域名的证…

伦敦银破位指标是哪些?

在伦敦银市场&#xff0c;破位通常有5种情形&#xff1a;技术形态破位、均线攴撑破位、技术指标破位、市场心理破位、高位盘整区破位。技术形态破位主要是指技术形态的重要颈线位&#xff0c;如多重顶、双顶、头肩顶等颈线位&#xff0c;以及支撑线&#xff08;主要是橫盘整理形…

盘点最近两个世纪那些搞怪又精彩的专利

人类的创新是无止境的&#xff0c;下面收集的就是最近两个世纪全球那些奇怪搞笑、精彩的6项专利。 小胡子卫士 (1876) 这款“胡须防护罩”由 VA.Gates 于 1876 年获得专利&#xff0c;是在节日盛宴期间保护胡须的巧妙解决方案。“弯曲和凹形的护罩&#xff0c;可以由硫化橡胶、…

prime靶机打靶记录

靶机下载地址 https://download.vulnhub.com/prime/Prime_Series_Level-1.rar nmap搜索目标 使用nmap -sn 192.168.41.0/24找到目标靶机192.168.41.136 扫描端口&#xff0c;因为是靶机&#xff0c;所以速率直接调了10000 扫出来两个端口22和80&#xff0c;进行详细的扫描 没…

【QML】QML与cpp交互(一)—— QML直接调用cpp函数

目录 1、cpp 创建一个类 2、将类对象暴露给QML 3、QML通过对象直接调用cpp函数 1、cpp 创建一个类 类模板如下: #include <QtCore/QObject>class vacUdpClient: public QObject {Q_OBJECT public: vacUdpClient(QObject* parent nullptr): QObject(parent) {}// Q…

Python使用爬虫ip爬取动态网页

写爬虫很难&#xff1f;在我看来&#xff0c;写爬虫需要具备一定的编程基础和网络知识&#xff0c;但并不需要非常高深的技术。在学习爬虫的过程中&#xff0c;我发现最重要的是掌握好两个点&#xff1a;一是如何分析网页结构&#xff0c;二是如何处理数据。对于第一个点&#…

Linux下Redis安装及配置

首先下载redis安装包&#xff1a;地址 这里我使用的是7.0版本的&#xff01; 将文件上传至linux上&#xff0c;此处不再多叙述&#xff0c;不会操作的&#xff0c;建议使用ftp&#xff01; 第一步&#xff1a;解压压缩包 tar -zxvf redis-7.0.14.tar.gz第二步&#xff1a;移…

【Seata源码学习 】篇六 全局事务提交与回滚

【Seata源码学习 】篇六 全局事务提交与回滚 全局事务提交 TM在RPC远程调用RM后,如果没有出现异常&#xff0c;将向TC发送提交全局事务请求io.seata.tm.api.TransactionalTemplate#execute public Object execute(TransactionalExecutor business) throws Throwable {// 1. …

qt-C++笔记之addItem(), addWidget(), addLayout()

qt-C笔记之addItem(), addWidget(), addLayout() code review! 文章目录 qt-C笔记之addItem(), addWidget(), addLayout()0.《官方文档》相关示例截图1.ChatGPT解释2.《Qt 5.12实战》相关示例截图《Qt 5.12实战》&#xff1a;5.6 组合框 3.addWidget()4.addWidget()和addChil…

LD_PRELOAD劫持、ngixn临时文件、无需临时文件rce

LD_PRELOAD劫持 <1> LD_PRELOAD简介 LD_PRELOAD 是linux下的一个环境变量。用于动态链接库的加载&#xff0c;在动态链接库的过程中他的优先级是最高的。类似于 .user.ini 中的 auto_prepend_file&#xff0c;那么我们就可以在自己定义的动态链接库中装入恶意函数。 也…

如何更改Jupyter Notebook中的环境?

1.首先&#xff0c;打开终端 2.接着&#xff0c;分别输入以下命令 conda env list 把EXPose替换为自己的环境变量 conda activate EXPose 3.接下来安装‘ ipykernel ’软件包 conda install ipykernel 4. 将该环境添加到Jupyter Notebook中&#xff1b;在Jupyter Notebook…

TiDB专题---2、TiDB整体架构和应用场景

上个章节我们讲解了TiDB的发展和特性&#xff0c;这节我们讲下TiDB具体的架构和应用场景。首先我们回顾下TiDB的优势。 TiDB的优势 与传统的单机数据库相比&#xff0c;TiDB 具有以下优势&#xff1a; 纯分布式架构&#xff0c;拥有良好的扩展性&#xff0c;支持弹性的扩缩容…

Docker Registry本地镜像仓库部署并实现远程连接拉取镜像

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…

Combined Private Circuits - Combined Security Refurbished

目录 摘要引言针对组合攻击的对策相关工作 Combined Private Circuits - Combined Security Refurbished. CCS 2023 摘要 物理攻击是众所周知的对加密实现的威胁。虽然针对被动侧通道分析&#xff08;SCA&#xff09;和主动故障注入分析&#xff08;FIA&#xff09;的对策是单…

无人机停机坪的主要功能有哪些

随着无人机行业领域的不断完善&#xff0c;无人机停机坪作为一项关键基础设施&#xff0c;正发挥着越来越重要的作用。无人机停机坪也叫无人机机巢、无人机机库、无人机机场。无人机停机坪不仅是无人机的“家”&#xff0c;更是其高效运行的关键环节。让我们一同探索无人机停机…

全球与中国协作机器人市场:增长趋势、竞争格局与前景展望

协作机器人&#xff08;cobot&#xff09;是一种设计用于与人类协作和互动工作的机器人。协作机器人配备了各种感测器和先进技术&#xff0c;以确保与人类的安全协作。协作机器人应用于多种产业&#xff0c;包括制造业、医疗保健、物流和农业。协作机器人可用于需要人工监督和介…

SpringCache入门案例

依赖 <!--SpringCache起步依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId><version>2.7.3</version> </dependency> <!--Redis起步依赖--&g…

yolov5实现多图形识别和图像训练

1.使用了yolov7,检测更好,但是训练上有问题,运行不起来,转了一圈发现yolov5是应用更广泛使用简单 2.怎么使用 //下载代码 https://github.com/ultralytics/yolov5 //安装依赖 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package //按…