Mock Hive¶
Most of the time creating a new API is a time-consuming task. Other teams (or people) might be depending on your API to create clients or the application that will consume your data.
Usually you’d give them the contract of your API (or worse, they’d have to wait until your API is ready). bzz comes packed with a mocked responses API that allows you to easily craft a mock API that can be used by clients/partners/teams/aliens.
This way you can keep focus in the development of your API, while at the same time allowing people to work with what will eventually be replaced by the real API.
Using Mock Hive¶
Let’s create a new server with a few mocked routes. MockedRoutes expects a list of tuples with
[(‘METHOD’, ‘URL or regex’, dict(body=”string or function”, status=”200”, cookies={‘cookie’: ‘yum’}))]
import tornado.web
import bzz
server = None
#first create the routes
mocked_routes = bzz.MockHive.routes_for([
('GET', '/much/api', dict(body='much api')),
('POST', '/much/api'),
('*', '/much/match', dict(body='such match')),
('*', r'/such/.*', dict(body='such match')),
('GET', '/much/error', dict(body='WOW', status=404)),
('GET', '/much/authentication', dict(body='WOW', cookies={'super': 'cow'})),
('GET', '/such/function', dict(body=lambda x: x.method)),
])
def handle_api_response(response):
# making sure we get the right route
try:
assert response.code == 200, response.code
assert response.body == six.b('much api'), response.body
finally:
io_loop.stop()
def get_route():
# let's test one of them
http_client.fetch(
'http://localhost:8891/much/api',
method='GET',
callback=handle_api_response
)
application = tornado.web.Application(mocked_routes)
server = HTTPServer(application, io_loop=io_loop)
server.listen(8891)
io_loop.add_timeout(1, get_route)
io_loop.start()