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

简介: Flask是python中轻量的web框架,Flask的两个核心模块除了模板渲染之外就是请求响应处理,其中请求响应处理是由 Werkzeug(WSGI 工具库)完成,而模板渲染是由Jinja(模板渲染库)完成。Flask因为轻量灵活,用来构建API接口十分合适

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

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
AI 代码解读

我们看一个简单的例子:

from flask import Flask

app = Flask(__name__)

@app.route('/hello')
def hello():
    return 'hello world'

if __name__ == '__main__':
    app.run("0.0.0.0", debug=True, port=6006)
AI 代码解读

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

python hello.py
AI 代码解读

yyq-2023-03-20-23-16-58.png

此时,你调用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 traceback

app = 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) + 10
            print(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')) + 14
                
            elif "application/json" in content_type:
                # request.get_data() # 原始的数据
                input_dict = request.get_json()
                res = input_dict.get('content') + 12

            elif "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)
AI 代码解读

以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 -
AI 代码解读

以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)
AI 代码解读

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

  • 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形式返回
目录
打赏
0
14
10
3
243
分享
相关文章
利用通义大模型构建个性化推荐系统——从数据预处理到实时API部署
本文详细介绍了基于通义大模型构建个性化推荐系统的全流程,涵盖数据预处理、模型微调、实时部署及效果优化。通过采用Qwen-72B结合LoRA技术,实现电商场景下CTR提升58%,GMV增长12.7%。文章分析了特征工程、多任务学习和性能调优的关键步骤,并探讨内存优化与蒸馏实践。最后总结了大模型在推荐系统中的适用场景与局限性,提出未来向MoE架构和因果推断方向演进的建议。
146 10
电商API行业标准与规范体系构建:推动电商行业规范化前行
电商API行业标准与规范是推动电商高效发展的核心。通过数据格式标准化、接口设计一致性及严格的安全措施,可提升数据交互效率、保障安全并促进系统兼容性。淘宝、京东、拼多多等平台的实践展示了其重要性。未来,智能化、隐私保护强化和跨平台集成将成为主要趋势,助力电商生态持续繁荣。
电商API接口开放平台的生态构建与运营策略
本文探讨了电商API接口开放平台在推动电商行业发展中的重要作用,涵盖用户体验提升、业务创新促进、运营效率提高及销售渠道拓展等方面。同时,文章分析了生态构建的关键要素,如明确目标受众、制定吸引政策和强化支持体系,并提出数据共享、个性化服务与安全合规等运营策略。最后展望未来,指出跨平台支持、个性化服务与生态共赢将成为主要发展趋势,为电商行业的持续创新提供参考。
111 2
基于通义大模型的智能客服系统构建实战:从模型微调到API部署
本文详细解析了基于通义大模型的智能客服系统构建全流程,涵盖数据准备、模型微调、性能优化及API部署等关键环节。通过实战案例与代码演示,展示了如何针对客服场景优化训练数据、高效微调大模型、解决部署中的延迟与并发问题,以及构建完整的API服务与监控体系。文章还探讨了性能优化进阶技术,如模型量化压缩和缓存策略,并提供了安全与合规实践建议。最终总结显示,微调后模型意图识别准确率提升14.3%,QPS从12.3提升至86.7,延迟降低74%。
227 14
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
淘宝京东价格监控API接口:构建智能价格生态的基石
淘宝和京东的价格监控API接口为品牌方、商家及第三方服务商提供了强大的数据支持,以下从接口功能、调用方式、应用场景等方面进行详细介绍
深入浅出:微店商品详情API接口Python攻略
本教程介绍如何使用Python与微店商品详情API交互。首先,确保安装`requests`库(`pip install requests`)。接着,在微店开发者平台注册应用以获取API访问权限。然后,通过编写Python代码调用API,示例函数`get_weidian_product_detail`可传入商品ID和AppKey获取商品详情(如名称、价格、图片等)。最后,处理返回的JSON数据并注意错误处理和查阅最新API文档。按此步骤,即可顺利获取商品信息。
深入浅出:拼多多商品列表API接口Python攻略
拼多多是中国领先的社交电商平台,为开发者提供了丰富的API接口,用于集成商品数据到第三方应用。通过Python可以轻松调用这些API获取商品列表。主要步骤包括:1) 安装必要库(如`requests`);2) 使用AppKey和AppSecret获取访问令牌;3) 调用商品列表API,传入参数如商品ID、页码等;4) 解析返回的JSON数据提取所需信息。按照此流程,开发者能够快速实现与拼多多平台的数据交互。
电商API安全与合规:构建可信的电商生态
电商API作为连接电商平台与商家、支付、物流等环节的核心桥梁,其安全与合规性对构建可信电商生态至关重要。本文探讨了电商API的重要性、面临的安全挑战(如未授权访问、数据泄露)、合规要求(如《数据安全法》)以及安全策略(如身份验证、数据加密)。未来,随着个性化服务、跨平台支持和生态合作的深化,电商API将在安全性与功能性上迎来更多机遇与挑战,需多方协作共建安全可信的电商环境。
淘宝商品评论API接口,json数据示例参考
淘宝开放平台提供了多种API接口来获取商品评论数据,其中taobao.item.reviews.get是一个常用的接口,用于获取指定商品的评论信息。以下是关于该接口的详细介绍和使用方法:

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问