5分钟构建电商API接口服务 | python小知识

news/2024/4/29 16:16:35/文章来源:https://blog.csdn.net/onebound_linda/article/details/131716610

1. 什么是API

我们经常会使用一些API接口来完成特定的功能,比如查询天气的数据,下载股票的数据,亦或是调用ChatGPT模型的结构等等。

API全称是Application Programming Interface,即应用程序接口,它通常提供了一个功能函数,而这个功能函数的输入和输出是和调用方相互约定的。

从架构上来讲,API通常从客户端和服务端模型;客户端以数据形式向服务器发送请求,服务器使用该客户端输入来开始执行内部函数,并将输出数据返回到客户端。

所以我们要开发一个电商API接口,从设计上就需要明确:

  • 你要提供什么样的功能

  • 功能的输入是什么

  • 功能的输出返回是什么

从技术上,要提供一个服务来接收请求和返回结果,通常是一个满足HTTP协议的HTTP接口,也可以是RPC接口。我们这里要讲的是HTTP接口

这也是API的本质。

2. 用Flask构建API

要实现一个API,我们要构建一个HTTP服务。HTTP(超文本传输协议)是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范,是一个典型的请求/响应模式的协议。

Flask是python中轻量的web框架,Flask的两个核心模块除了模板渲染之外就是请求响应处理,其中请求响应处理是由 Werkzeug(WSGI 工具库)完成,而模板渲染是由Jinja(模板渲染库)完成。

Flask因为轻量灵活,用来构建API接口十分合适。

2.1 Flask入门

安装Flask

pip install flask

我们看一个简单的例子:

from flask import Flaskapp = Flask(__name__)@app.route('/hello')
def hello():return 'hello world'if __name__ == '__main__':app.run("0.0.0.0", debug=True, port=6006)

调用(假设上面的文件为hello.py):

python hello.py

图片

此时,你调用http://127.0.0.1:6006/hello就会返回hello world

上面是最简单的一个接口了,从上面我们可知Flask的工作机制:

  • Flask(__name__)申明了一个服务app

  • app.run来启动这个服务,包括服务的地址ip和端口

  • @app.route装饰器定义了接口访问的URL地址和方法(GET/POST)

  • hello的函数就是具体接收请求响应的函数功能模块,由@app.route装饰

2.2 实用的FlaskAPI

上面的例子显然是不能满足一个完整的API的功能,首先我们要接收请求的数据,Flask是通过request来接收请求数据,HTTP请求通常由两个方式GET和POST。

from flask import Flask
from flask import request
import json
import tracebackapp = Flask(__name__)@app.route('/hello')
def hello():return 'hello world'@app.route('/v1/task', methods=['GET', 'POST'])
def do_task():try:print(request.method)if request.method == "GET":content = request.args.get("content")# comment = request.values.get("content")res = int(content) + 10print(res, type(content))elif request.method == "POST":print("========", request.headers)content_type = request.headers.get('Content-Type')if "multipart/form-data" in content_type:form_data = dict(request.form)# files_data = dict(request.files)# print(form_data)res = int(form_data.get('content')) + 14elif "application/json" in content_type:# request.get_data() # 原始的数据input_dict = request.get_json()res = input_dict.get('content') + 12elif "application/x-www-form-urlencoded" in content_type:input_dict = request.form# request.values.get("content")else:print(request.get_data())print('url: %s , script_root: %s , path: %s , base_url: %s , url_root : %s' % (request.url, request.script_root, request.path, request.base_url, request.url_root))return json.dumps({"code": 0, "msg":"success", "data": res})except:err_msg = 'url: %s, err_msg: %s' % (request.url, (str(traceback.format_exc())))print(err_msg)return json.dumps({"code": -1, "msg":"failed", "data": 0})if __name__ == '__main__':app.run("0.0.0.0", debug=True, port=6006)

以GET方式请求

http://127.0.0.1:6006/v1/task?content=3
# {"code": 0, "msg": "success", "data": 13}
# 127.0.0.1 - - [20/Mar/2023 23:53:28] "GET /v1/task?content=3 HTTP/1.1" 200 -

以POST方式请求

POST是通过表单form的方式来传递数据,数据可以使用不同的Content-Type来发送。比如:

  • application/json 的方式 ,请求body体的内容就是{"a": "b", "c": "d"}

  • application/x-www-form-urlencoded 的方式,则body体的内容就是 a=b&c=d

  • multipart/form-data 通常是要上传文件

POST请求调用如下:

import requests
import json
url = 'http://127.0.0.1:6006/v1/task'
headers = {'content-type': "application/json", 'Authorization': 'APP appid = 4abf1a,token = 9480295ab2e2eddb8'}
s = json.dumps({'content': 1, 'key2': 'value2'})
r = requests.post(url, data=s, headers=headers)
print(r.text)url = 'http://127.0.0.1:6006/v1/task'
files = {'file': open('lena.jpg', 'rb')}
s = {'content': 1, 'key2': 'value2'}
r = requests.post(url, files=files, data=s)
print(r.text)

除此之外,从上面的例子可知:

  • GET方式是通过request.args获取数据

  • POST方式是通过request.get_json() request.get_data() request.form获取数据

  • request.method获取请求方式

  • request.headers获取HTTP头信息

3. 总结

今天分享了用Flask构建API接口,总结如下:

  • API的本质是客户端访问服务端的函数,访问的方式是一个HTTP请求(HTTP接口)

  • HTTP请求有GET和POST

  • Flask用request接收客户端请求

  • POST请求有不同的类型,json或者x-www-form-urlencoded或者multipart/form-data,不同的方式有不同的接收方式

  • API接口返回通常以json形式返回

 

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

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

相关文章

Mysql单表多表查询练习

题目要求: 1.查询student表的所有记录 2.查询student表的第2到4条记录 3.从student表查询所有的学生的学号(id),姓名(name),和院系(department)的信息 4.从student表…

SpringAMQP - 消息传输时,如何提高性能?解决 SQL 注入问题?

目录 一、问题背景 二、从消息转化器根源解决问题 1.引入依赖 2.在服务生产者和消费者中都重新定义一个 MessageConverter,注入到 Spring 容器中 一、问题背景 在SpringAMQP的发送方法中,接收消息的类型是Object,也就是说我们可以发送任意…

用 GPU 并行环境 Isaac Gym + 强化学习库 ElegantRL:训练机器人Ant,3小时6000分,最高12000分

前排提醒,目前我们能 “用 ppo 四分钟训练 ant 到 6000 分”,比本文的 3 小时快了很多很多,有空会更新代码 https://blog.csdn.net/sinat_39620217/article/details/131724602 介绍了 Isaac Gym 库 如何使用 GPU 做大规模并行仿真,对环境模块提速。这篇帖子,我们使用 1 …

class文件反编译成Java文件

下载jad158g.win压缩包解压到指定的磁盘下(下载目录:https://varaneckas.com/jad/) 操作命令:jad -o -r -s java -d src classes/**/*.class 此处src为生成Java文件存放的文件夹,classes则为需要转化成Java的class文件…

docker 里面各种 command not found 总结

一、ip:command not found 执行命令: apt-get update & apt-get install -y iproute2 二、yum:command not found 执行命令: apt-get update & apt-get install -y yum 三、ping:command not found 执行命…

Openlayers实战:多地图底图切换

在实际的地图项目中,不管是我们看到的百度地图还是高德地图等,都会有地图切换这一项。 在Openlayers实战中,我们用三种地图做demo,分别是谷歌地图。Openstreetmap,stamen地图。 切换的主要原则是设置三个底图层,设定其显示状态,用到了visible这一个属性。 效果图 源代码…

OpenCV for Python 入坑第一天:图像的基础操作

我们都知道,OpenCV能够帮助我们处理视频和图像,咱们在图像处理中,除了Pillow库之外,最经常用到的也是它了。那么现在咱们就正式入坑OpenCV for Python,一起来感受一下OpenCV的魅力吧! 文章目录 读取图像 im…

02LINGO基本操作

某公司新购置了某种设备 6 台,欲分配给下属的4 个企业,已知各企业获得这种设备后年创利润如表 1.1 所示,单位为千万元。问应如何分配这些设备能使年创总利润最大,最大利润是多少? 甲乙丙丁1423426455376764788657986671086 甲公…

国产芯片——单片机32位mcu的应用

随着物联网与人工智能和智能制造的发展,单片机作为嵌入式系统的核心控制器,在各类行业应用中占据重要位置。其中32位MCU在芯片设计、制造工艺、封装技术上等取得显著突破,以高性能的技术条件被广泛应用在智能物联等行业的方案开发中。今天我们…

txt文本筛选—python操作

需求:若文档中某行最后一列内容为0,则删除该行,否则保留该行内容,并将筛选后的内容保存到新的文本文档中。 # 读取原始txt文件 with open(depth_values.txt, r) as file:lines file.readlines()# 过滤掉第三列内容为0的行 filter…

Ubuntu22.04密码忘记怎么办 Ubuntu重置root密码方法

在Ubuntu 22.04 或其他更高版本上不小心忘记root或其他账户的密码怎么办? 首先uname -r查看当前系统正在使用的内核版本,记下来 前提:是你的本地电脑,有物理访问权限。其他如远程登录的不适用这套改密方法。 通过以下步骤&#…

解决打开excel时报错 “不能使用对象链接和嵌入”

问题截图 打开excel文件或者插入对象时,直接弹出不能使用对象链接和嵌入报错信息。 解决方法 按 winr 组合快捷键,打开运行,输入 dcomcnfg.exe 按回车确定 此时进入到组件服务管理界面,依次选择 组件服务-计算机-我的电脑-DOCM…

LaTex 1【字体、符号、表格】

​(上一期已经安装完软件,但是突然出现了一点子问题不会解决,先用overleaf来学习吧,网站还是很给力的) 关键字部分: \quad:代表空格【无论你打多少个空格都不是空格,要输入“\quad”】 字体部分…

ECMAScript 6 之二

目录 2.6 Symbol 2.7 Map 和 Set 2.8 迭代器和生成器 2.9 Promise对象 2.10 Proxy对象 2.11 async的用法 2.22 类class 2.23 模块化实现 2.6 Symbol 原始数据类型,它表示是独一无二的值。它属于 JavaScript 语言的原生数据类型之一,其他数据类型…

6.2.8 网络基本服务----万维网(www)

6.2.8 网络基本服务----万维网(www) 万维网即www(World Wide Web)是开源的信息空间,使用URL也就是统一资源标识符标识文档和Web资源,使用超文本链接互相连接资源,万维网并非某种特殊的计算机网…

Linux下Lua和C++交互

前言 lua(wiki 中文 官方社区:lua-users)是一门开源、简明、可扩展且高效的弱类型解释型脚本语言。 由于其实现遵循C标准,它几乎能在所有的平台(windows、linux、MacOS、Android、iOS、PlayStation、XBox、wii等&…

【大数据之Hive】二十三、HQL语法优化之数据倾斜

1 数据倾斜概述 数据倾斜指参与计算的数据分布不均,即某个key或者某些key的数据量远超其他key,导致在shuffle阶段,大量相同key的数据被发往同一个Reduce,导致该Reduce所需的时间远超其他Reduce,成为整个任务的瓶颈。  …

数据结构与算法——什么是线性表(线性存储结构)

我们知道,具有“一对一”逻辑关系的数据,最佳的存储方式是使用线性表。那么,什么是线性表呢? 线性表,全名为线性存储结构。使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来&#xf…

海岸带地物分类步骤

1.读取图像 使用 Envi 打开 imageKSC.tif 影像。在 Toolbox 工具栏中选择 Spectral->Build 3D Cube。在 3D Cube File 对话框中选择高光谱数据集,显示信息为 614*512*176 的高光谱影像,单击 OK 按钮。 图1 原始影像 2.选择波段 当打开 3D Cube RGB…

【数学建模】统计分析方法

文章目录 1.回归分析2. 逻辑回归3. 聚类分析4. 判别分析5. 主成分分析6. 因子分析7. 对应分析 1.回归分析 数据量要多,样本总量n越大越好——>保证拟合效果更好,预测效果越好 一般n>40/45较好 方法 建立回归模型 yiβ0β1i……βkxkiεi 所估计的…