Marlin

a fast, frill-free REST API with ZERO setup time is too interesting.

Quick Start Guide

pip install marlin # install marlin to the python environment. marlin-server start # start marlin server - port: 5000

Detailed Installation in Ubuntu

redis-server

sudo apt-get install redis-server

create virtualenv

sudo apt-get install python-pip sudo pip install virtualenv virtualenv marlin-env source marlin-env/bin/activate

requests, ujson, flask, python-daemon

pip install flask requests ujson python-daemon redis

install marlin

pip install marlin # install marlin to the python environment.

Managing Server

marlin-server start # starts server with default conf on port 5000 marlin-server stop # stops the server marlin-server restart # restart the server marlin-server live # starts a server on DEBUG mode

Request Methods

METHOD URL RESPONSE DESCRIPTION GET /api/v1/[model]?start=1&end=10 [data] 1-10 returns the 1-10 elements in the [model] GET /api/v1/[model]/1 data item returns the element with id 1 GET /ping/ 200/500 check if service is up and connected POST /api/v1/[model]/ [data] adds data to the model PUT /api/v1/[model]/1/ [data] edit data DELETE /api/v1/[model]/1 200 delete the data item DELETE /api/v1/[model]/ - delete complete data in model DELETE /api/v1/[model]?force=1 - delete and reset model (starts with id=1

Server Configuration

marlin.config

For custom configuration, just create a marlin.config on the directory from where you are starting marlin-server.

[SERVER] DEBUG = True PID_FILE = /tmp/marlin.pid LOG_FILE = /tmp/marlin.log SERVER_PORT = 5000 [REDIS] REDIS_SERVER = localhost REDIS_PORT = 6379 API_PREFIX = /api/ [APP] APP_NAME = marlin

Custom urls and functions

Always, a basic REST API is just a scaffolding for the application, and custom defined urls and functions make it beautiful. As marlin is more focused on performance, it is designed for flexibility as well.

It is pretty simple to create custom functions in Marlin.

Just place marlin_function.py in the present working directory (pwd), with custom routes and custom responses.

# marlin_functions.py from marlin import app @ app.route ( " /example/ " ): return Response( " Simple Custom Response " )

or a more complex example.

To get a custom element based on a user id

import json from marlin import app, RedisDatabaseManager from flask import Response, request @ app.route ( " /simple_get/<model> " ) def custom_get ( model ): rdm = RedisDatabaseManager(request, model, version = ' v1 ' ) user_id = 127 if rdm: rdm.manipulate_data() rdm.get_from_redis(user_id) # get data for the specific user id else : return json.dumps({ " status " : " Something is not right " }) if rdm.status and rdm.data: return Response(rdm.string_data, content_type = ' application/json; charset=utf-8 ' ) elif rdm.status: return Response(json.dumps({ ' status ' : " No data Found " }), content_type = ' application/json; charset=utf-8 ' , status = 404 ) else : return json.dumps({ " status " : " Something is not right " })

A little more complicated Example

Following example filter all the objects with name=Apple