如何结合BaseHTTPRequestHandler与http.server实现多API端点?
用BaseHTTPRequestHandler实现多API端点并集成到http.server
完全可行,你可以通过继承BaseHTTPRequestHandler自定义请求处理器,让http.server使用这个处理器来处理不同API端点的请求。以下是具体实现步骤:
1. 项目结构
先搭建基础的项目目录:
your_project/ ├── api/ │ └── helloworld.py └── server.py
2. 编写自定义请求处理器
在api/helloworld.py中实现继承自BaseHTTPRequestHandler的子类,处理指定API路径的请求:
from http.server import BaseHTTPRequestHandler class HelloWorldHandler(BaseHTTPRequestHandler): def do_GET(self): # 匹配目标API路径 if self.path == '/api/helloworld': # 返回成功响应 self.send_response(200) self.send_header('Content-type', 'text/plain; charset=utf-8') self.end_headers() self.wfile.write(b'Hello World') else: # 未匹配路径返回404 self.send_response(404) self.send_header('Content-type', 'text/plain; charset=utf-8') self.end_headers() self.wfile.write(b'404 Not Found')
3. 集成处理器并启动服务器
在server.py中创建HTTPServer实例,指定自定义的处理器类:
from http.server import HTTPServer from api.helloworld import HelloWorldHandler def run_server(): server_address = ('', 8000) # 空字符串表示监听所有地址,端口8000 httpd = HTTPServer(server_address, HelloWorldHandler) print('服务器启动在 http://localhost:8000') try: httpd.serve_forever() except KeyboardInterrupt: httpd.shutdown() print('服务器已关闭') if __name__ == '__main__': run_server()
4. 运行与测试
在项目根目录执行命令:
python server.py
访问http://localhost:8000/api/helloworld即可看到Hello World;访问其他路径会返回404提示。
扩展多个API端点
如果需要添加更多端点,可以优化处理器的结构,用路由映射来管理不同路径对应的处理逻辑,让代码更易维护:
# 修改api/helloworld.py中的HelloWorldHandler class HelloWorldHandler(BaseHTTPRequestHandler): def do_GET(self): # 路由映射:路径 -> 处理函数 routes = { '/api/helloworld': self.handle_hello_world, '/api/greet': self.handle_greet, '/api/status': self.handle_status } # 匹配路由,默认返回404 handler = routes.get(self.path, self.handle_404) handler() def handle_hello_world(self): self.send_response(200) self.send_header('Content-type', 'text/plain; charset=utf-8') self.end_headers() self.wfile.write(b'Hello World') def handle_greet(self): self.send_response(200) self.send_header('Content-type', 'text/plain; charset=utf-8') self.end_headers() self.wfile.write(b'Hello from greet endpoint!') def handle_status(self): self.send_response(200) self.send_header('Content-type', 'application/json; charset=utf-8') self.end_headers() self.wfile.write(b'{"status": "ok"}') def handle_404(self): self.send_response(404) self.send_header('Content-type', 'text/plain; charset=utf-8') self.end_headers() self.wfile.write(b'404 Not Found')
内容的提问来源于stack exchange,提问作者DeKrypt
相关产品推荐
相关产品推荐

