Trong trường hợp bạn thực sự không muốn sử dụng bất kỳ khuôn khổ bên ngoài/thư viện, bạn có thể tạo một lớp đơn giản kéo dài BaseHTTPRequestHandler
, một cái gì đó như thế này:
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import json
class S(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
def do_GET(self):
self._set_headers()
self.data_string = self.rfile.read(int(self.headers['Content-Length']))
self.send_response(200)
self.end_headers()
data = json.loads(self.data_string)
# your processing
outJson = {"success": True}
self.wfile.write(json.dumps(outJson))
def do_HEAD(self):
self._set_headers()
self.wfile.write("HEAD")
def do_POST(self):
self._set_headers()
self.wfile.write("POST")
và sau đó khởi động máy chủ cục bộ tại cảng của sự lựa chọn của bạn (80 theo mặc định) chỉ đơn giản như thế này:
def run(port=80):
httpd = HTTPServer(('', port), S)
print 'Starting httpd...'
httpd.serve_forever()
if __name__ == "__main__":
from sys import argv
if len(argv) == 2:
run(port=int(argv[1]))
else:
run()
và nếu bạn cần phải quản lý rất nhiều các tuyến đường một cách dễ dàng, bạn có thể sử dụng klein
hoặc Flask
microframeworks (hoặc thậm chí bottle
) để làm cho nó dễ dàng hơn và đơn giản hơn cho bạn, đơn giản tối thiểu ví dụ sử dụng cho việc sử dụng klein
sẽ giống như thế này:
import json
from klein import Klein
class ItemStore(object):
app = Klein()
def __init__(self):
self._items = {}
@app.route('/')
def items(self, request):
request.setHeader('Content-Type', 'application/json')
return json.dumps(self._items)
@app.route('/<string:name>', methods=['PUT'])
def save_item(self, request, name):
request.setHeader('Content-Type', 'application/json')
body = json.loads(request.content.read())
self._items[name] = body
return json.dumps({'success': True})
@app.route('/<string:name>', methods=['GET'])
def get_item(self, request, name):
request.setHeader('Content-Type', 'application/json')
return json.dumps(self._items.get(name))
và sau đó chạy các máy chủ như thế này:
if __name__ == '__main__':
store = ItemStore()
store.app.run('localhost', 8080)
Ngoài ra, nếu bạn muốn sử dụng apis giả từ xa và không chỉ tại địa phương, bạn có thể sử dụng các công cụ đào hầm như ngrok. Nó khá đơn giản và dễ sử dụng.
@nice, bạn cũng có thể xem xét Máy chủ JSON: https://github.com/typicode/json-server vốn rất tiện dụng cho các API giả mạo. Cung cấp một bộ hoàn chỉnh các động từ HTTP, bao gồm GET, POST, PUT mà không có một dòng mã! –
@nico Cũng xem Flask: http://flask.pocoo.org/. Con trăn của nó chỉ, chết đơn giản để sử dụng và bắt đầu! –
Tại sao lại là máy chủ? Tại sao không chỉ giả lập thư viện yêu cầu và tránh hoàn toàn kết nối mạng? –