Skip to main content

Automated REST APIs for existing database-driven systems

Project description

sandman
-----

**sandman** "makes things REST". Have an existing database you'd like to expose via
a REST API? Normally, you'd have to write a ton of boilerplate code for
the ORM you're using.

We're programmers. We don't write boilerplate.

Simple Setup
````````````

.. code:: python
from sandman import app, db

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///chinook'

from sandman.model import register, Model

class Artist(Model):
__tablename__ = 'Artist'

class Album(Model):
__tablename__ = 'Album'

class Playlist(Model):
__tablename__ = 'Playlist'

register((Artist, Album, Playlist))

app.run()

Let's start our new API server and make a request.

.. code:: bash

$ python runserver.py &
* Running on http://127.0.0.1:5000/

$ curl GET http://localhost:5000/artists

Here is the JSON returned::

.. code:: json

{
"ArtistId": 273,
"Name": "C. Monteverdi, Nigel Rogers - Chiaroscuro; London Baroque; London Cornett & Sackbu",
"links": [
{
"rel": "self",
"uri": "/artists/ArtistId"
}
]
},
{
"ArtistId": 274,
"Name": "Nash Ensemble",
"links": [
{
"rel": "self",
"uri": "/artists/ArtistId"
}
]
},
{
"ArtistId": 275,
"Name": "Philip Glass Ensemble",
"links": [
{
"rel": "self",
"uri": "/artists/ArtistId"
}
]
}
]

Batteries Included
``````````````````

With **sandman**, (almost) zero boilerplate code is required. Your existing database
structure and schema is introspected and your database tables magically get a
RESTful API. For each table, Sandman creates:

- proper endpoints

- support for a configurable set of HTTP verbs

- GET

- POST

- PATCH

- DELETE

- responses with appropriate ``rel`` links automatically

- essentially a HATEOAS-based service sitting in front of your database

*Warning: Sandman is still very much a work in progress.* It is not suitable for
use **anywhere.** Don't use it for anything important. It's also often changing
in backwards incompatible ways.

Links
`````

* `website <http://www.github.com/jeffknupp/sandman/>`_
* `documentation <http://pythonhosted.org/sandman/>`_

Project details


Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page