Fully featured framework for fast, easy and documented API development with Sanic
Project description
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:
$ pip install sanic-restplus
or with easy_install:
$ easy_install sanic-restplus
Quick start
With Sanic-Restplus, you only import the api instance to route and document your endpoints.
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 That is the Flask RestPlus documentation, the Sanic-Restplus docs are not converted yet.
REMOVED Flask-Restplus changelog. See the flask-restplus changelog in the relevant parent repository.
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
Built Distribution
File details
Details for the file sanic-restplus-0.6.4.tar.gz
.
File metadata
- Download URL: sanic-restplus-0.6.4.tar.gz
- Upload date:
- Size: 2.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
7404255272dad409013ab8671d41dbd7a9ce56cfdc1efa1800b8c5b88aa689b9
|
|
MD5 |
fa643a3ae0c1073e22918e2b07520f3e
|
|
BLAKE2b-256 |
230e65db9ae296af8f875cd42ffeb03b4927941b25ddabbe568f34d282840764
|
File details
Details for the file sanic_restplus-0.6.4-py2.py3-none-any.whl
.
File metadata
- Download URL: sanic_restplus-0.6.4-py2.py3-none-any.whl
- Upload date:
- Size: 2.6 MB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
52f4d83efd995d0d009175d02e0e33506a531b901b85e7fc27cb7c256ba8d311
|
|
MD5 |
b8bf401a3b16a1fa6c094b250f9c5f28
|
|
BLAKE2b-256 |
13c396f7c3fc20fc2411901edd2de0a4f70f2eab127a2689677f374010afe434
|