Micro.Rest

Create autodocumented REST APIs with built-in validation. Created on top of Micro.Web

Getting started

Full featured example - redis-backed FIFO queue

import asyncio
import aioredis
from micro.web import Micro
from micro.rest import rest, templated_docstring, make_api

FIFO_ITEM = """
  object {
        string {1,5000} item `An item`;
  } -> FIFOItem;
"""

class Items:

   app = Micro()

   @rest()
   @app.route("/", method="GET")
   @templated_docstring(output=FIFO_ITEM)
   @asyncio.coroutine
   def get_item(self, request):
       """
       Get last item from FIFO queue
       @summary Get last item from FIFO queue
       @operation_id Item_get
       @output 200 $output
       """
       queue_name, item = yield from request.app['redis'].blpop('_QUEUE')
       return item.decode('utf-8')

   @rest()
   @app.route("/", method="POST")
   @templated_docstring(input=FIFO_ITEM)
   @asyncio.coroutine
   def put_item(self, request):
       """
       Put the item into FIFO queue
       @summary Put the item into FIFO queue
       @operation_id Item_put
       @input $input
       @output 204
       """
       request_json = yield from request.json()
       yield from request.app['redis'].rpush(
            '_QUEUE', request_json['item'].encode('utf-8')
       )

class Root:

   app = Micro()

   def __init__(self):
       self.app.mount("/item", Items())

@asyncio.coroutine
def init():
   root.app['redis'] = yield from aioredis.create_pool(
       ('localhost', 6379),
       minsize=5, maxsize=10
   )
   return make_api(root.app,
        name='FIFOQueue', description='A redis-backed FIFO queue', version='1')

if __name__ == '__main__':
   api = asyncio.get_event_loop().run_until_complete(init())
   api.debug()

Dependencies

  • Micro.Web
  • Hipchat.Orderly
  • jsonschema

Indices and tables