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

在Python中使用http.server.BaseHTTPRequestHandler创建RESTAPI服务器

发布时间:2024-01-04 17:59:48

要使用http.server.BaseHTTPRequestHandler创建REST API服务器,需要继承该基类并重写一些方法来处理HTTP请求。下面是一个使用例子,其中定义了两个简单的API端点:一个用于处理GET请求,另一个用于处理POST请求。

from http.server import BaseHTTPRequestHandler, HTTPServer
import json

# 定义API端点和请求处理函数
class MyHandler(BaseHTTPRequestHandler):
    def handle_response(self, status_code, response):
        self.send_response(status_code)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(json.dumps(response).encode())

    # 处理GET请求
    def do_GET(self):
        if self.path == '/api':
            response = {'message': 'Hello, GET request!'}
            self.handle_response(200, response)
        else:
            self.handle_response(404, {'error': 'Invalid endpoint'})

    # 处理POST请求
    def do_POST(self):
        if self.path == '/api':
            content_length = int(self.headers['Content-Length'])
            post_data = self.rfile.read(content_length).decode('utf-8')
            post_data = json.loads(post_data)
            response = {'message': f'Hello, POST request! You sent: {post_data}'}
            self.handle_response(200, response)
        else:
            self.handle_response(404, {'error': 'Invalid endpoint'})

# 创建服务器
server_address = ('', 8000)
httpd = HTTPServer(server_address, MyHandler)
print('Starting server...')
httpd.serve_forever()

在这个例子中,我们首先定义了一个MyHandler类,继承自http.server.BaseHTTPRequestHandler。在MyHandler类中,我们重写了do_GETdo_POST方法来处理相应的GET和POST请求。在这些方法中,我们根据请求的路径来判断请求的API端点,并返回相应的响应。对于GET请求,我们返回一个简单的JSON响应;对于POST请求,我们解析请求的数据,并将其包含在响应中返回。

然后,我们创建了一个HTTPServer实例,并将MyHandler类的实例作为处理程序传递给HTTPServer。最后,我们启动了服务器,在本例中是在本地8000端口监听HTTP请求。

要测试这个REST API服务器,您可以使用命令行工具(如curl或httpie)或使用Python中的requests库进行请求。例如,要向服务器发送POST请求,您可以运行以下命令:

$ http POST http://localhost:8000/api name=John age=30

响应应该类似于:

HTTP/1.0 200 OK
Content-type: application/json

{
    "message": "Hello, POST request! You sent: {'name': 'John', 'age': 30}"
}

相应地,您可以使用GET请求来测试GET API端点:

$ http GET http://localhost:8000/api

响应应该类似于:

HTTP/1.0 200 OK
Content-type: application/json

{
    "message": "Hello, GET request!"
}

使用http.server.BaseHTTPRequestHandler创建REST API服务器可以让您更灵活地控制请求的处理过程,并根据需要扩展和自定义。然而,请注意,这只是一个简单的示例,不适用于生产环境中的大型和复杂的REST API。在实际应用中,您可能需要考虑使用更高级的框架(如Flask或Django)来构建和管理REST API。