欢迎访问宙启技术站
智能推送

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服务器。