Skip to main content

Helpers, syntaxic sugar and Swagger documentation for Flask-Restful

Project description

Flask-RestPlus provide syntaxic suger, helpers and automatically generated Swagger documentation on top of Flask-Restful.

Compatibility

Flask-RestPlus requires Python 2.7+.

Installation

You can install Flask-Restplus with pip:

$ pip install flask-restplus

or with easy_install:

$ easy_install flask-restplus

Quick start

With Flask-Restplus, you only import the api instance to route and document your endpoints.

from flask import Flask
from flask.ext.restplus import Api, Resource, fields

app = Flask(__name__)
api = Api(app, version='1.0', title='Todo API',
    description='A simple TODO API extracted from the original flask-restful example',
)

ns = api.namespace('todos', description='TODO operations')

TODOS = {
    'todo1': {'task': 'build an API'},
    'todo2': {'task': '?????'},
    'todo3': {'task': 'profit!'},
}

todo = api.model('Todo', {
    'task': fields.String(required=True, description='The task details')
})

listed_todo = api.model('ListedTodo', {
    'id': fields.String(required=True, description='The todo ID'),
    'todo': fields.Nested(todo, description='The Todo')
})


def abort_if_todo_doesnt_exist(todo_id):
    if todo_id not in TODOS:
        api.abort(404, "Todo {} doesn't exist".format(todo_id))

parser = api.parser()
parser.add_argument('task', type=str, required=True, help='The task details', location='form')


@ns.route('/<string:todo_id>')
@api.doc(responses={404: 'Todo not found'}, params={'todo_id': 'The Todo ID'})
class Todo(Resource):
    '''Show a single todo item and lets you delete them'''
    @api.doc(description='todo_id should be in {0}'.format(', '.join(TODOS.keys())))
    @api.marshal_with(todo)
    def get(self, todo_id):
        '''Fetch a given resource'''
        abort_if_todo_doesnt_exist(todo_id)
        return TODOS[todo_id]

    @api.doc(responses={204: 'Todo deleted'})
    def delete(self, todo_id):
        '''Delete a given resource'''
        abort_if_todo_doesnt_exist(todo_id)
        del TODOS[todo_id]
        return '', 204

    @api.doc(parser=parser)
    @api.marshal_with(todo)
    def put(self, todo_id):
        '''Update a given resource'''
        args = parser.parse_args()
        task = {'task': args['task']}
        TODOS[todo_id] = task
        return task


@ns.route('/')
class TodoList(Resource):
    '''Shows a list of all todos, and lets you POST to add new tasks'''
    @api.marshal_list_with(listed_todo)
    def get(self):
        '''List all todos'''
        return [{'id': id, 'todo': todo} for id, todo in TODOS.items()]

    @api.doc(parser=parser)
    @api.marshal_with(todo, code=201)
    def post(self):
        '''Create a todo'''
        args = parser.parse_args()
        todo_id = 'todo%d' % (len(TODOS) + 1)
        TODOS[todo_id] = {'task': args['task']}
        return TODOS[todo_id], 201


if __name__ == '__main__':
    app.run(debug=True)

Documentation

The documentation is hosted on Read the Docs

Changelog

0.4.0

  • Port to Flask-Restful 0.3+

  • Use the default Blueprint/App mecanism

  • Allow to hide some ressources or methods using @api.doc(False) or @api.hide

  • Allow to globally customize the default operationId with the default_id callable parameter

0.3.0

  • Switch to Swagger 2.0 (Major breakage)
    • notes documentation is now description

    • nickname documentation is now id

    • new responses declaration format

  • Added missing body parameter to document body input

  • Last release before Flask-Restful 0.3+ compatibility switch

0.2.4

  • Handle description and required attributes on fields.List

0.2.3

  • Fix custom fields registeration

0.2.2

  • Fix model list in declaration

0.2.1

  • Allow to type custom fields with Api.model

  • Handle custom fields into fieds.List

0.2

  • Upgraded to SwaggerUI 0.2.22

  • Support additional field documentation attributes: required, description, enum, min, max and default

  • Initial support for model in RequestParser

0.1.3

  • Fix Api.marshal() shortcut

0.1.2

  • Added Api.marshal_with() and Api.marshal_list_with() decorators

  • Added Api.marshal() shortcut

0.1.1

  • Use zip_safe=False for proper packaging.

0.1

  • Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask-restplus-0.4.0.tar.gz (197.7 kB view details)

Uploaded Source

Built Distribution

flask_restplus-0.4.0-py2.py3-none-any.whl (207.1 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file flask-restplus-0.4.0.tar.gz.

File metadata

File hashes

Hashes for flask-restplus-0.4.0.tar.gz
Algorithm Hash digest
SHA256 7c9a97020d1d0a882a1b06c4571ef212ea564b1e2af286df866a018a58de7822
MD5 f27d6360e470f3be69518f875bc6dc36
BLAKE2b-256 4ce186375748e029c65c8f481b6457cdf6c3ac613713b609c50b848f29e197cc

See more details on using hashes here.

File details

Details for the file flask_restplus-0.4.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for flask_restplus-0.4.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3afb9eb6184b791f9b9e0f14b6530904e566d6959e9b3ee86f82e9a24b49aab6
MD5 8215a2fdc132a16345feb0e90e51db80
BLAKE2b-256 46634628c75b474b9956295fc365ff234971ba3fd811b3f4e1dbf4460e0bce71

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page