Python 实现简易 RESTful API 的原理与实操
本文介绍如何使用 Python 标准库快速搭建简易 RESTful API 服务。通过继承基础请求处理器、自定义 URI 路由映射及查询参数解析,实现 GET 请求下的 JSON 数据返回。提供完整代码结构与本地运行验证步骤,帮助开发者理解后端接口的基础工作流。
Python 实现简易 RESTful API 的原理与步骤
第1步:理解 RESTful 核心请求机制
RESTful 是一种目前主流的互联网软件架构设计风格,全称为 Representational State Transfer。其核心理念是将网站视为一套面向资源的软件系统,通过标准的 HTTP 方法与 URI(统一资源标识符)进行交互。主要包含以下映射关系:
GET:用于获取指定资源POST:用于创建新资源或更新资源PUT:用于完整更新现有资源DELETE:用于删除指定资源
开发者只需对外暴露一组清晰的 URI,客户端即可借助浏览器、curl 等工具与后台服务完成通信。该架构由 Roy Thomas Fielding 在其 2000 年博士论文中提出,广泛运用于 SDN(软件定义网络)、Web 应用及各类开放平台中。
第2步:构建基础 HTTP 服务器框架
在 Python 中无需安装第三方库,可直接利用内置的 http.server 模块创建监听服务。核心操作是继承 BaseHTTPRequestHandler 基类,重写请求处理方法,并在初始化阶段预留路由字典与基础路径变量。
# -*- coding: UTF-8 -*-
import http.server
import socketserver
import urllib.parse
import sys
class Restful(http.server.BaseHTTPRequestHandler):
def __init__(self, request, client_address, server):
super().__init__(request, client_address, server)
self.dp = None # 基础路径前缀
self.router = {} # URI 到资源函数的映射字典
def basepath(self):
pass
def getrestlet(self):
pass
def send_json(self, data):
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
self.wfile.write(data.encode('utf-8'))
self.wfile.close()
def done(self):
self.dp = self.basepath()
self.router = self.getrestlet()
第3步:配置路由映射与参数解析逻辑
路由注册的本质是建立 URI 字符串与业务方法的键值对。以模拟 JSON 接口为例,需重写 do_GET 方法拦截请求,提取 self.path 中的目标 URI,并对 ? 后的查询参数进行拆分。将解析出的键值对传入对应资源函数,即可返回结构化数据。
class TestJSON(Restful):
def get_data_by_params(self, vpc, vr):
# 模拟多组固定数据供匹配查找
pool = [
'{"vpc":1,"vrouter":3,"days":[1,2,3]}',
'{"vpc":1,"vrouter":4,"days":[23,21,3]}',
'{"vpc":5,"vrouter":3,"days":[13,2,23]}'
]
target_vpc = '"vpc":'+str(vpc)
target_vr = '"vrouter":'+str(vr)
for item in pool:
if target_vpc in item and target_vr in item:
return item
return '{}'
def firewall_info(self):
return '{"filter":["baidu.com","example.cn"],"acl":{"accept":123,"reject":321}}'
def do_GET(self):
self.done()
print(self.path)
# 处理带参数的 JSON 接口
if '/json?' in self.path:
# 分离路径与查询字符串
parsed = urllib.parse.urlparse(self.path)
query_string = urllib.parse.parse_qs(parsed.query)
vpc = query_string.get('vpc', [''])[0]
vr = query_string.get('vrouter', [''])[0]
key_base = parsed.path + '?'
for k in self.router.keys():
if k in key_base:
self.send_json(self.router[k](vpc, vr))
return
# 处理静态防火墙接口
elif '/firewall' in self.path:
self.send_json(self.router['/firewall']())
return
self.send_json('{}')
def basepath(self):
return "/ins"
def getrestlet(self):
rr = {}
rr['/json?'] = self.get_data_by_params
rr['/firewall'] = self.firewall_info
return rr
第4步:启动服务并调用测试
完成类定义后,实例化 HTTPServer 并绑定本地回环地址与监听端口。默认以测试用例 TestJSON 为例,配置如下:
try:
server = http.server.HTTPServer(('127.0.0.1', 8084), TestJSON)
print("服务已启动,监听端口 8084...")
server.serve_forever()
except KeyboardInterrupt:
print("服务已停止")
sys.exit(0)
启动脚本后,打开浏览器或终端访问测试地址:http://127.0.0.1:8084/ins/json?vpc=1&vrouter=3。服务端收到请求后,会按预设逻辑匹配数据并以 JSON 格式回显。

运行局限排查与优化建议
本示例仅用于演示底层工作机理,实际工程中需注意以下问题:内置的 BaseHTTPRequestHandler 性能有限且不支持异步高并发;当前路由注册逻辑耦合在业务类内部,导致控制器与视图界限模糊。建议在实际项目中采用装饰器模式或路由表外置方案解耦;同时完善 do_POST、do_PUT、do_DELETE 的处理分支,并加入请求体大小限制与非法参数校验以防止越权或注入风险。
总结
通过手动继承基础 HTTP 处理器、定义 basepath 前缀与 router 映射字典,可以清晰掌握 RESTful 接口从请求拦截、参数拆分到资源调用的完整链路。对于日常调试或轻量级内部工具而言,这种零依赖的实现方式十分高效。以上就是 Python 搭建简易 RESTful API 的详细内容,更多关于 Python 后端开发与网络编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













