Python中使用BaseHTTPServer模块实现简单的RESTAPI服务器
发布时间:2023-12-24 07:23:28
BaseHTTPServer模块是Python内置的模块,用于实现基本的HTTP服务器。
下面是一个使用BaseHTTPServer模块实现简单REST API服务器的例子:
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import json
# 定义一个请求处理类,继承自BaseHTTPRequestHandler
class RequestHandler(BaseHTTPRequestHandler):
# 处理GET请求
def do_GET(self):
# 设置响应状态码为200
self.send_response(200)
# 设置响应头部为json格式
self.send_header('Content-type', 'application/json')
self.end_headers()
# 构造响应数据
data = {'message': 'Hello, World!'}
# 将数据转换为json格式
json_data = json.dumps(data)
# 发送响应数据
self.wfile.write(json_data)
# 处理POST请求
def do_POST(self):
# 获取请求的数据长度
content_length = int(self.headers['Content-Length'])
# 读取请求数据
post_data = self.rfile.read(content_length)
# 将请求数据解码为字符串
post_data_str = post_data.decode('utf-8')
# 设置响应状态码为200
self.send_response(200)
# 设置响应头部为json格式
self.send_header('Content-type', 'application/json')
self.end_headers()
# 构造响应数据
data = {'message': 'You have sent a POST request with data:', 'data': post_data_str}
# 将数据转换为json格式
json_data = json.dumps(data)
# 发送响应数据
self.wfile.write(json_data)
# 创建HTTP服务器对象,指定请求处理类为RequestHandler
server = HTTPServer(('localhost', 8000), RequestHandler)
print('Starting server at http://localhost:8000')
# 启动服务器
server.serve_forever()
在这个例子中,我们创建了一个RequestHandler类,继承自BaseHTTPRequestHandler,覆盖了do_GET和do_POST方法,分别用于处理GET和POST请求。在do_GET方法中,我们构造了一个响应数据,并将其转换为json格式返回给客户端。在do_POST方法中,我们首先获取请求中的数据,然后构造响应数据返回给客户端。
最后,我们创建了一个HTTPServer对象,指定了服务器的地址为localhost和端口号为8000,并将请求处理类设置为RequestHandler。然后启动服务器并一直运行下去。
可以使用curl等工具进行测试:
$ curl http://localhost:8000
{"message": "Hello, World!"}
$ curl -X POST -d "name=John&age=30" http://localhost:8000
{"data": "name=John&age=30", "message": "You have sent a POST request with data:"}
这样就实现了一个简单的REST API服务器。
