falcon的json模式输入和输出
falconjsonio的Python项目详细描述
通过定义可接受的值来验证http请求和响应体 使用json模式。用于Falcon web framework。
使用概述
定义请求体架构,并且只有在 请求符合您的规范。否则,错误将返回到 打电话的人。
定义您的响应体架构,并在之前验证您的响应 返回发件人。与 规范将返回一个500错误。
使用req.context['doc']检索请求json。
在req.context['result']中设置JSON响应。
使用中间件
启用中间件:
app = falcon.API( middleware=[ falconjsonio.middleware.RequireJSON(), falconjsonio.middleware.JSONTranslator(), ], )
定义您的要求:
from falconjsonio.schema import request_schema, response_schema people_post_request_schema = { 'type': 'object', 'properties': { 'title': {'type': 'string'}, 'name': {'type': 'string'}, 'dob': {'type': 'date-time'}, 'email': {'type': 'email'}, }, 'required': ['name', 'dob'], } people_post_response_schema = { 'oneOf': [ { 'type': 'object', 'properties': { 'href': {'type': uri'}, }, 'required': ['uri'], }, { 'type': 'object', 'properties': { 'error': {'type': 'string'}, }, 'required': ['error'], }, ], } # ... class People(object): @response_schema(people_get_response_schema) def on_get(self, req, resp): # Put your JSON response here: req.context['result'] = {'some': 'json'} @request_schema(people_post_request_schema) @response_schema(people_post_response_schema) def on_post(self, req, resp): # JSON request supplied here: form = req.context['doc'] # Put your JSON response here: req.context['result'] = {'some': 'json'}
当然,要将端点连接起来:
app.add_route('/people', People())
如果方法是从父类继承的,则可以应用 而是将decorator传递给资源类,并将方法名传递给 装饰工:
class People(object): def on_get(self, req, resp): # Put your JSON response here: req.context['result'] = {'some': 'json'} def on_post(self, req, resp): # JSON request supplied here: form = req.context['doc'] # Put your JSON response here: req.context['result'] = {'some': 'json'} @response_schema(schema=people_get_response_schema, method_name='on_get') @request_schema(schema=people_post_request_schema, method_name='on_post') @response_schema(schema=people_post_response_schema, method_name='on_post') class ChildPeople(People): pass
当您有一个包含所有 Smarts和您的孩子类只声明了 父类(例如 falcon-autocrud)
贡献的快速入门
virtualenv -p `which python3` virtualenv source virtualenv/bin/activate pip install -r requirements.txt pip install -r dev_requirements.txt nosetests