W przypadku, gdy naprawdę nie chcesz używać żadnych zewnętrznych ram/bibliotek, można utworzyć prostą klasę, która rozciąga BaseHTTPRequestHandler
, coś takiego:
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")
a następnie uruchomić serwer lokalnie w porcie wyboru (domyślnie 80) po prostu tak:
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()
i jeśli potrzebujesz na łatwe zarządzanie wiele tras, można użyć klein
lub Flask
microframeworks (lub nawet bottle
), aby łatwiej i prościej dla ciebie proste minimalny przykład użycia za korzystanie klein
będzie wyglądać mniej więcej tak:
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))
a następnie uruchomić serwer tak:
if __name__ == '__main__':
store = ItemStore()
store.app.run('localhost', 8080)
Ponadto, jeśli chcesz zdalnie i nie używać mock API tylko lokalnie, można użyć narzędzia tunelowania jak ngrok. Jest bardzo prosty i łatwy w użyciu.
@tutaj możesz również rzucić okiem na serwer JSON: https://github.com/typicode/json-server, który jest bardzo przydatny do wyśmiewania API. Zapewnia pełny zestaw czasowników HTTP, w tym GET, POST, PUT bez pojedynczego wiersza kodu! –
@nico Zobacz także Flask: http://flask.pocoo.org/. Python tylko, martwy prosty w użyciu i zacząć! –
Dlaczego serwer? Dlaczego po prostu nie sfałszować samej biblioteki żądań i całkowicie uniknąć połączeń sieciowych? –