Python 实现简易 RESTful API 的原理与实操

程一诺
程一诺
发布时间:2026-10-12| 6人浏览过
原创

本文介绍如何使用 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 格式回显。

Chrome浏览器加载插件后显示的JSON响应结果
在浏览器中访问配置的接口地址,配合格式化插件可清晰查看返回的结构化数据

运行局限排查与优化建议

本示例仅用于演示底层工作机理,实际工程中需注意以下问题:内置的 BaseHTTPRequestHandler 性能有限且不支持异步高并发;当前路由注册逻辑耦合在业务类内部,导致控制器与视图界限模糊。建议在实际项目中采用装饰器模式或路由表外置方案解耦;同时完善 do_POST、do_PUT、do_DELETE 的处理分支,并加入请求体大小限制与非法参数校验以防止越权或注入风险。

总结

通过手动继承基础 HTTP 处理器、定义 basepath 前缀与 router 映射字典,可以清晰掌握 RESTful 接口从请求拦截、参数拆分到资源调用的完整链路。对于日常调试或轻量级内部工具而言,这种零依赖的实现方式十分高效。以上就是 Python 搭建简易 RESTful API 的详细内容,更多关于 Python 后端开发与网络编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。