Socket
Socket
Sign inDemoInstall

sanic-restplus

Package Overview
Dependencies
22
Maintainers
1
Alerts
File Explorer

Install Socket

Protect your apps from supply chain attacks

Install

sanic-restplus

Fully featured framework for fast, easy and documented API development with Sanic

    0.6.4

Maintainers
1

Readme

==============
Sanic RestPlus
==============

Sanic-RESTPlus is an extension for `Sanic`_ that adds support for quickly building REST APIs.
Sanic-RESTPlus encourages best practices with minimal setup.
If you are familiar with Sanic, Sanic-RESTPlus should be easy to pick up.
It provides a coherent collection of decorators and tools to describe your API
and expose its documentation properly using `Swagger`_.


Compatibility
=============

* Sanic-RestPlus requires Python 3.7+.
* Sanic-RestPlus works with Sanic v21.3+
* Sanic-RestPlus IS NOT CURRENTLY COMPATIBLE with Sanic v21.12 or above (due to limitations in sanic-plugin-toolkit).



Backward Compatibility Notice
------------------------------

Sanic-RestPlus version 0.6.0 was reworked and now requires Sanic v21.3 or later.

Sanic-RestPlus version 0.4.1 (and previous versions) **does not work** on Sanic 19.12+, see this bug here: https://github.com/ashleysommer/sanicpluginsframework/issues/15

Please use Sanic-Restplus v0.5.x if you need to deploy on Sanic v19.12 or v20.12

If you are using the Sanic v20.12LTS, please use Sanic-RestPlus v0.5.6.


Installation
============

In the near future, you will be able to install Sanic-Restplus with pip:

.. code-block:: console

    $ pip install sanic-restplus

or with easy_install:

.. code-block:: console

    $ easy_install sanic-restplus


Quick start
===========

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

.. code-block:: python

    from sanic import Sanic
    from sanic_restplus import Api, Resource, fields
    from sanic_restplus.restplus import restplus
    from sanic_plugin_toolkit import SanicPluginRealm
    app = Sanic(__name__)
    realm = SanicPluginRealm(app)
    rest_assoc = realm.register_plugin(restplus)

    api = Api(version='1.0', title='TodoMVC API',
              description='A simple TodoMVC API')

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

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


    class TodoDAO(object):
        def __init__(self):
            self.counter = 0
            self.todos = []

        def get(self, id):
            for todo in self.todos:
                if todo['id'] == id:
                    return todo
            api.abort(404, "Todo {} doesn't exist".format(id))

        def create(self, data):
            todo = data
            todo['id'] = self.counter = self.counter + 1
            self.todos.append(todo)
            return todo

        def update(self, id, data):
            todo = self.get(id)
            todo.update(data)
            return todo

        def delete(self, id):
            todo = self.get(id)
            self.todos.remove(todo)


    DAO = TodoDAO()
    DAO.create({'task': 'Build an API'})
    DAO.create({'task': '?????'})
    DAO.create({'task': 'profit!'})


    @ns.route('/')
    class TodoList(Resource):
        '''Shows a list of all todos, and lets you POST to add new tasks'''

        @ns.doc('list_todos')
        @ns.marshal_list_with(todo)
        async def get(self, request):
            '''List all tasks'''
            return DAO.todos

        @ns.doc('create_todo')
        @ns.expect(todo)
        @ns.marshal_with(todo, code=201)
        async def post(self, request):
            '''Create a new task'''
            return DAO.create(request.json), 201


    @ns.route('/<id:int>')
    @ns.response(404, 'Todo not found')
    @ns.param('id', 'The task identifier')
    class Todo(Resource):
        '''Show a single todo item and lets you delete them'''

        @ns.doc('get_todo')
        @ns.marshal_with(todo)
        async def get(self, request, id):
            '''Fetch a given resource'''
            return DAO.get(id)

        @ns.doc('delete_todo')
        @ns.response(204, 'Todo deleted')
        async def delete(self, request, id):
            '''Delete a task given its identifier'''
            DAO.delete(id)
            return '', 204

        @ns.expect(todo)
        @ns.marshal_with(todo)
        async def put(self, request, id):
            '''Update a task given its identifier'''
            return DAO.update(id, request.json)

    rest_assoc.api(api)

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




Documentation
=============

The documentation is hosted `on Read the Docs <http://flask-restplus.readthedocs.io/en/latest/>`_
That is the Flask RestPlus documentation, the Sanic-Restplus docs are not converted yet.

.. _Sanic: https://github.com/channelcat/sanic
.. _Swagger: http://swagger.io/

REMOVED Flask-Restplus changelog. See the flask-restplus changelog in the relevant parent repository.



Keywords

FAQs


Did you know?

Socket installs a GitHub app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc