使用flask和apispec构建和记录restapi
flask-apispec-rovanion的Python项目详细描述
flask apispec是在flask中构建restapi的轻量级工具。flask apispec使用webargs进行请求解析,使用marshmallow进行响应格式化,使用apispec自动生成扩展标记。您可以将flask apispec与香草烧瓶或功能更丰富的框架(如Flask-RESTful)一起使用。
安装
pip install flask-apispec
快速启动
fromflaskimportFlaskfromflask_apispecimportuse_kwargs,marshal_withfrommarshmallowimportfields,Schemafrom.modelsimportPetapp=Flask(__name__)classPetSchema(Schema):classMeta:fields=('name','category','size')@app.route('/pets')@use_kwargs({'category':fields.Str(),'size':fields.Str()})@marshal_with(PetSchema(many=True))defget_pets(**kwargs):returnPet.query.filter_by(**kwargs)
flask apispec可用于基于函数和类的视图:
fromflaskimportmake_responsefromflask_apispec.viewsimportMethodResourceclassPetResource(MethodResource):@marshal_with(PetSchema)defget(self,pet_id):returnPet.query.filter(Pet.id==pet_id).one()@use_kwargs(PetSchema)@marshal_with(PetSchema,code=201)defpost(self,**kwargs):returnPet(**kwargs)@use_kwargs(PetSchema)@marshal_with(PetSchema)defput(self,pet_id,**kwargs):pet=Pet.query.filter(Pet.id==pet_id).one()pet.__dict__.update(**kwargs)returnpet@marshal_with(None,code=204)defdelete(self,pet_id):pet=Pet.query.filter(Pet.id==pet_id).one()pet.delete()returnmake_response('',204)
flask apispec为视图函数和类生成夸张的标记。默认情况下,swagger json服务于/swagger/,swagger ui服务于/swagger ui/。
fromapispecimportAPISpecfromflask_apispec.extensionimportFlaskApiSpecapp.config.update({'APISPEC_SPEC':APISpec(title='pets',version='v1',plugins=['apispec.ext.marshmallow'],),'APISPEC_SWAGGER_URL':'/swagger/',})docs=FlaskApiSpec(app)docs.register(get_pets)docs.register(PetResource)