Nic*_*ico 6 python api rest json python-3.x
我正在测试一个C#应用程序,它向另一个Rest API发出请求,我想模拟服务器.我知道基本的python,我想知道我是否可以编写一个简单的API Rest服务器而不涉及像Django这样的大型框架.这将是一个简单的服务器,我通过请求体接收一个json,我必须返回另一个json(内部返回的逻辑,就像一个视图).
最好的祝福!
像这样简单:
@path(/api/v1/somepath, GET)
def my_function(request):
json_input = request.body.json()
# My logic here
response.status = 200
response.body = {'some_field': 'something'}
return response
Run Code Online (Sandbox Code Playgroud)
如果您真的不想使用任何外部框架/库,您可以创建一个扩展的简单类BaseHTTPRequestHandler,如下所示:
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")
Run Code Online (Sandbox Code Playgroud)
然后在您选择的端口(默认为 80)本地启动服务器,就像这样:
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()
Run Code Online (Sandbox Code Playgroud)
如果您需要轻松管理大量路由,您可以使用klein或Flask微框架(甚至bottle)来使您更轻松,更简单,一个简单的最小用法示例klein如下所示:
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))
Run Code Online (Sandbox Code Playgroud)
然后像这样运行服务器:
if __name__ == '__main__':
store = ItemStore()
store.app.run('localhost', 8080)
Run Code Online (Sandbox Code Playgroud)
此外,如果您想远程使用模拟 apis 而不仅仅是本地,您可以使用像ngrok这样的隧道工具。它非常简单且易于使用。
| 归档时间: |
|
| 查看次数: |
1399 次 |
| 最近记录: |