2.4 API 开发和集成

文章目录

  • 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, jsonifyapp = 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 requestsresponse = 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 requestsheaders = {'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 requestsapp = 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 boto3ec2 = 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, jsonifyapp = Flask(__name__)# Create an in-memory structure to hold posted data
data = {"name": "lihua"}@app.route('/', methods=['GET', 'POST'])
def handle_data():global dataif request.method == 'POST':# Overwrite the old data with the posted JSONdata = request.get_json()return '', 204else:return jsonify(data), 200if __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 requestsapp = 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.mzph.cn/news/195937.shtml

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

相关文章

StarRocks上新,“One Data、All Analytics”还有多远?

K.K在《未来十二大趋势》中认为&#xff0c;我们正处于一个数据流动的时代。商业乃数据之商业。归根结底&#xff0c;你在处理的都是数据。 的确&#xff0c;当数据成为新的核心生产要素之际&#xff0c;数据分析就犹如最重要的生产工具之一&#xff0c;决定着企业在数字化时代…

Python爬虫超详细讲解(零基础入门,包教包会)

先看后赞&#xff0c;养成习惯。 点赞收藏&#xff0c;人生辉煌。 讲解我们的爬虫之前&#xff0c;先概述关于爬虫的简单概念&#xff08;毕竟是零基础教程&#xff09; 爬虫 网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff09;就是模拟浏览器发送网络…

贝叶斯分类器(Bayesian Classifier)

贝叶斯分类器&#xff08;Bayesian Classifier&#xff09;详解 贝叶斯分类器是基于贝叶斯定理的一类统计分类方法。它们在给定数据的条件下&#xff0c;通过计算不同类别的概率来进行分类。 贝叶斯定理 贝叶斯定理是贝叶斯分类器的核心&#xff0c;它提供了在已知某些信息的…

InsCode实践分享:一款强大的Web代码编辑器

InsCode是一款基于Web的代码编辑器&#xff0c;它提供了丰富的功能和便捷的操作界面&#xff0c;可以满足程序员在编写、调试和分享代码方面的各种需求。本文将从以下几个方面介绍InsCode的实践分享&#xff1a;使用体验、主要功能、扩展应用、团队协作和未来发展。 一、使用体…

es6 相关面试总结

1、es6 是什么 新一代的js 语言标准,对其核心做了升级优化,更加适合大型应用开发。 2、箭头函数优缺点 优点: 1.代码优化 2.this 指向不会变动,永远指向其父元素 缺点: 1.没有arguments 参数 2.不能通过 apply call bind改变this指向 不能用箭头函数的场景: 1.构…

【Avue】select的远程搜索 [模糊搜索]

一、需求 【模糊搜索】 二、实现avue的远程搜索 1、search为搜索 2、remote远程搜索 3、dictValue{{key}}为输入的值

JS 排序学习记录

排序 1、快速排序 快速排序&#xff08;Quick Sort&#xff09;是一种常用的排序算法&#xff0c;其原理基于分治策略。快速排序的基本思想是通过选择一个基准元素&#xff08;pivot&#xff09;&#xff0c;将待排序序列分割成两部分&#xff0c;一部分所有元素小于等于基准…

数实融合!低代码推动工业数字化转型走“深”向“实”

当下&#xff0c;“数字化、智能化”已经不再是新鲜词。毕竟&#xff0c;在早几年前就已经有企业喊出大举进军数字化的口号&#xff0c;轰轰烈烈的数字化转型运动也持续了很长一段时间&#xff0c;有一些业内人士甚至判断“如今的企业数字化已经走过了成熟期&#xff0c;来到了…

使用群晖Docker搭建HomeAssistant并实现异地公网访问家中智能设备

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使…

Shopee买家通系统内置防指纹技术可解决多账号管理操作

为了解决多账号管理的难题&#xff0c;我们发现了一款强大的利器——Shopee买家通系统&#xff0c;它为我们提供了便捷而高效的辅助操作。这款系统基于先进的指纹浏览器技术开发&#xff0c;实现了全自动化的操作&#xff0c;让多账号管理变得轻而易举。 Shopee买家通系统内置了…

element-ui upload组件中将file文件数据转成二进制流数据格式

方法一 handleBeforeUpload (file)const reader new FileReader()reader.readAsArrayBuffer(file)reader.onload async function (theFile) {const binary new Blob([theFile.target.result]) // 转成二进制流数据 即binary数据格式}}方法二 const aBlob new Blob([file],…

霍尔传感器的分类

霍尔传感器分为线型霍尔传感器和开关型霍尔传感器两种。 &#xff08;一&#xff09;开关型霍尔传感器由稳压器、霍尔元件、差分放大器&#xff0c;斯密特触发器和输出级组成&#xff0c;它输出数字量。开关型霍尔传感器还有一种特殊的形式&#xff0c;称为锁键型霍尔传感器。 …

有关ADW400环保监测模块的详细介绍-安科瑞 蒋静

1 概述 ADW400 环保监测模块主要用于计量低压网络的三相有功电能&#xff0c;同时可选择最大四个回路的电流输入&#xff0c;具有 RS485 通讯和 470MHz 无线通讯功能&#xff0c;方便用户进行用电监测、集抄和管理。可灵活安装于配电箱内&#xff0c;实现对不 同区域和不同负荷…

深入探讨网络抓取:如何使用 Scala 和 Dispatch 获取 LinkedIn 图片

网络抓取是一种从互联网上获取数据的技术&#xff0c;它可以用于各种目的&#xff0c;例如数据分析、信息检索、竞争情报等。网络抓取的过程通常包括以下几个步骤&#xff1a; 发送 HTTP 请求到目标网站解析响应的 HTML 文档提取所需的数据存储或处理数据 在本文中&#xff0…

【1】基于多设计模式下的同步异步日志系统-项目介绍

1. 项目介绍 本项⽬主要实现⼀个日志系统&#xff0c; 其主要支持以下功能: • 支持多级别日志消息 • 支持同步日志和异步日志 • 支持可靠写⼊日志到控制台、文件以及滚动文件中 • 支持多线程程序并发写日志 • 支持扩展不同的日志落地⽬标地 2. 开发环境 • CentOS 7 • vs…

更新头像之后,如何通知对方头像已更新?

有两种方案&#xff1a; 第一种&#xff0c;A更新用户信息之后&#xff0c;发一条通知&#xff0c;通知其他好友&#xff0c;自己已经更新了用户信息&#xff0c;其好友收到通知之后&#xff0c;从服务器请求A的最新用户信息&#xff0c;刷新本地的用户缓存&#xff1b; 第二…

2、猴子吃桃问题。每天早上都吃了前一天剩下的一半零一个。

2、猴子吃桃问题。猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不过瘾&#xff0c;又多吃了一个&#xff0c;第二天早上又将剩下的桃子吃掉一半&#xff0c;又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个&#xff0c;到第 10天早上想再吃时&…

假设二叉树采用二叉链存储结构存储,设计一个算法,求先序遍历序列中第 k(1 <= k <= 二叉树中结点个数) 个结点的值。

问题描述&#xff1a;假设二叉树采用二叉链存储结构存储&#xff0c;设计一个算法&#xff0c;求先序遍历序列中第 k(1 < k < 二叉树中结点个数) 个结点的值。 分析&#xff1a; 考虑使用递归&#xff0c;题目说求先序序列第 k 个结点值&#xff0c;所以考虑使用先序递归…

Python 类:探索面向对象编程的奇妙世界

在 Python 中&#xff0c;类是一种强大的工具&#xff0c;可以让你更有组织地编写代码&#xff0c;实现真正的面向对象编程。 本篇文章将详细介绍 Python 类的知识点和使用方法&#xff0c;通过通俗易懂的解释和使用案例&#xff0c;帮助大家轻松理解并掌握类的奥秘。 1、类和…

封装带插槽的表格

子组件 <template><div><table><thead><tr><th v-for"col,colIndex in columns" :key"colIndex">{{ col.title }}</th></tr></thead><tbody v-if"instList.length >0"><tr …