Build and document REST APIs with aiohttp and apispec
Project description
Install
pip install aiohttp-apispec
Quickstart
from aiohttp_apispec import docs, use_kwargs, marshal_with, AiohttpApiSpec
from aiohttp import web
from marshmallow import Schema, fields
class RequestSchema(Schema):
id = fields.Int()
name = fields.Str(description='name')
bool_field = fields.Bool()
class ResponseSchema(Schema):
msg = fields.Str()
data = fields.Dict()
@docs(
tags=['mytag'],
summary='Test method summary',
description='Test method description',
)
@use_kwargs(RequestSchema(strict=True))
@marshal_with(ResponseSchema(), 200)
async def index(request):
return web.json_response({'msg': 'done', 'data': {}})
app = web.Application()
app.router.add_post('/v1/test', index)
# init docs with all parameters, usual for ApiSpec
doc = AiohttpApiSpec(
app=app, title='My Documentation', version='v1', url='/api/docs/api-docs'
)
# now we can find it on 'http://localhost:8080/api/docs/api-docs'
web.run_app(app)
Adding validation middleware
from aiohttp_apispec import aiohttp_apispec_middleware
...
app.middlewares.append(aiohttp_apispec_middleware)
Now you can access all validated data in route from request['data']
like so:
@docs(
tags=['mytag'],
summary='Test method summary',
description='Test method description',
)
@use_kwargs(RequestSchema(strict=True))
@marshal_with(ResponseSchema(), 200)
async def index(request):
uid = request['data']['id']
name = request['data']['name']
return web.json_response(
{'msg': 'done', 'data': {'info': f'name - {name}, id - {uid}'}}
)
Build swagger web client
You can do it easily with aiohttp_swagger library:
from aiohttp_swagger import setup_swagger
...
setup_swagger(
app=app, swagger_url='/api/doc', swagger_info=app['swagger_dict']
)
# now we can access swagger client on /api/doc url
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
aiohttp-apispec-0.5.2.tar.gz
(5.4 kB
view hashes)