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

Python中使用HTTPServer()搭建一个简单的RESTfulAPI服务器

发布时间:2023-12-26 14:44:41

在Python中,可以使用HTTPServer模块来搭建一个简单的RESTful API服务器。HTTPServer模块是Python标准库中的模块,提供了一个轻量级的HTTP服务器实现。

以下是一个使用HTTPServer搭建RESTful API服务器的示例代码:

from http.server import BaseHTTPRequestHandler, HTTPServer
import json

# 数据存储
data = []

# RESTful API处理类
class APIHandler(BaseHTTPRequestHandler):
    # 处理GET请求
    def do_GET(self):
        if self.path == '/api/data':
            self.send_response(200)
            self.send_header('Content-type', 'application/json')
            self.end_headers()
            self.wfile.write(json.dumps(data).encode())
        else:
            self.send_response(404)
            self.end_headers()
            self.wfile.write(b'404 Not Found')

    # 处理POST请求
    def do_POST(self):
        if self.path == '/api/data':
            content_length = int(self.headers['Content-Length'])
            post_data = self.rfile.read(content_length)
            data.append(json.loads(post_data))
            self.send_response(201)
            self.send_header('Content-type', 'application/json')
            self.end_headers()
            self.wfile.write(json.dumps(data[-1]).encode())
        else:
            self.send_response(404)
            self.end_headers()
            self.wfile.write(b'404 Not Found')

    # 处理PUT请求
    def do_PUT(self):
        if self.path.startswith('/api/data/'):
            data_id = self.path.split('/')[-1]
            content_length = int(self.headers['Content-Length'])
            put_data = self.rfile.read(content_length)
            for item in data:
                if item['id'] == int(data_id):
                    item.update(json.loads(put_data))
                    break
            self.send_response(200)
            self.send_header('Content-type', 'application/json')
            self.end_headers()
            self.wfile.write(json.dumps(item).encode())
        else:
            self.send_response(404)
            self.end_headers()
            self.wfile.write(b'404 Not Found')

    # 处理DELETE请求
    def do_DELETE(self):
        if self.path.startswith('/api/data/'):
            data_id = self.path.split('/')[-1]
            for index, item in enumerate(data):
                if item['id'] == int(data_id):
                    del data[index]
                    break
            self.send_response(204)
            self.end_headers()
        else:
            self.send_response(404)
            self.end_headers()
            self.wfile.write(b'404 Not Found')


# 启动RESTful API服务器
def run():
    host = 'localhost'
    port = 8000
    server = HTTPServer((host, port), APIHandler)
    print('Starting server on http://{}:{}'.format(host, port))
    server.serve_forever()

# 运行服务器
if __name__ == '__main__':
    run()

上述示例代码中,我们定义了一个APIHandler类,继承自BaseHTTPRequestHandler,用于处理不同的HTTP请求方法。我们使用一个全局列表data来存储数据,模拟一个简单的数据库。

APIHandler中,我们定义了do_GETdo_POSTdo_PUTdo_DELETE等方法来处理不同的HTTP请求方法。例如,do_GET方法用于处理GET请求,如果请求的路径为/api/data,则返回存储的数据data;否则返回404 Not Found。do_POST方法用于处理POST请求,接收请求中的数据,将其解析为JSON格式,并存储在data列表中,并返回存储的数据。do_PUT方法和do_DELETE方法类似,用于处理PUT和DELETE请求。

run函数中,我们指定服务器的主机和端口,并创建一个HTTPServer实例,指定处理请求的APIHandler类。然后,我们通过调用server.serve_forever()方法来启动服务器。

要运行上述服务器,可以在命令行中运行该脚本文件,然后在浏览器或其他HTTP客户端中访问http://localhost:8000/api/data即可查看使用API的效果。

以上就是一个使用HTTPServer搭建简单的RESTful API服务器的示例。你可以根据自己的需求修改这个示例,添加更多的路由和处理逻辑,实现更复杂的RESTful API服务。