Madame
RESTful API for MongoDB built on Flask
Install / Use
/learn @asdine/MadameREADME
Madame
Madame is a dynamic RESTful API for MongoDB based on Flask.
:Author: Asdine El Hrychy :Version: 0.1
Release v0.1.2.a (documentation <https://madame.readthedocs.org>_)
Features
- REST-compliant
- HATEOAS
- Dynamic collections
- JSON Schemas separated from code
- JSON Validation
- Cache
- Versioning
- Read-only by default
CRUD
Madame supports built-in CRUD operations.
======= ======
Action Method
======= ======
Create POST
Read GET
Update PATCH
Update* POST
Delete DELETE
======= ======
*Update method can use POST or PATCH, whether the user updates the entire document or not.
Schemas
Madame keeps database schemas separated from code, and uses JSON to describe them.
To validate the data, it uses the strong schema validation library : Validictory <https://github.com/sunlightlabs/validictory>_. ::
{ "contacts": { "title" : "Contacts", "description" : "My contact list", "schema" : { "type" : "object", "properties" : { "firstname" : { "type" : "string", "minLength" : 1, "maxLength" : 10 }, "lastname" : { "type" : "string", "minLength" : 1, "maxLength" : 15, "required" : true }, "phone-number" : { "type" : "string", "format": "phone" } } } } }
Dynamic
You can add and delete new schemas without turning the servers off and use them immediatly. ::
import requests, json
data = { "pets" : { "title": "Pets", "description" : "My pets", "schema" : { "type" : "object", "properties" : { "name" : { "type" : "string", "minLength" : 1, "maxLength" : 15, "required" : True } } } } } headers = {'content-type': 'application/json'} r = requests.post('http://localhost:5000/', data=json.dumps(data), headers=headers) print r.status_code 201
You can then add new pets in your collection. ::
$ curl -i -d '{ "name" : "Betise" }' -H "Content-Type: application/json" http://localhost:5000/pets/ HTTP/1.0 201 CREATED Content-Type: application/json Content-Length: 263 ETag: "17c62e0fd3f85bf0f7db76fc2c90027f3309a83c" Server: Werkzeug/0.8.3 Python/2.7.3 Date: Fri, 04 Jan 2013 15:36:00 GMT
{ "title": "Document created", "links": [ { "methods": ["GET", "POST", "DELETE"], "href": "http://localhost:5000/pets/", "description": "You are here.", "rel": "self", "title": "Pets" }, { "href": "http://localhost:5000/pets/50e6f6e00ef3c414fcf66b45", "rel": "item" } ], }
Filtering and sorting
Madame uses MongoDB options for filtering and sorting. ::
$ curl http://localhost:5000/pets/?limit=1&skip=20
Installation
::
$ pip install madame
Usage
::
from madame import Madame
app = Madame()
app.run()
Versioning
::
from madame import Madame
app = Madame('/v1')
app.run()
Flask and Ajax
Use Madame as an Ajax extension of your website. As Madame is built on Flask, you can still use it as a normal website. ::
from madame import Madame
from flask import render_template
app = Madame('/ajax')
@app.route('/')
def index():
return render_template('index.html')
if __name__ == "__main__":
app.run()
Future
- Highly customizable
- Authentication
- Pagination
GET /<collection>/<chosenIdentifier>
and so on.
Feedback
Any comment or advice would be highly appreciated!
Documentation
Complete documentation is available at https://madame.readthedocs.org <https://madame.readthedocs.org>_
License
Madame is MIT licensed. See the LICENSE <https://github.com/asdine/madame/blob/master/LICENSE>_ for details.
Credits
Flask <http://flask.pocoo.org/>_
Pymongo <http://api.mongodb.org/python/current/>_
Validictory <https://github.com/sunlightlabs/validictory>_
Authors
Madame is developped by Asdine El Hrychy.
See the AUTHORS <https://github.com/asdine/madame/blob/master/AUTHORS>_ for details.
Twitter <https://twitter.com/asdine_>_
Related Skills
node-connect
344.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
99.2kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
99.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
344.4kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
