Quick schemaless and generic API for development tests
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
Dockerfile
LICENCE
README.md
app.py
lookup.py
requirements.txt
wercker.yml

README.md

Generic API

This is a shemaless and generic api for development tests. You can create any endpoint and add json objects as you wish. The data is persisted on disk by shelve.

Run with docker (Alpine Linux based)

docker run -d --name generic-api -v `pwd`/data:/app/data -p 5000:5000 lvidarte/generic-api:latest

POST method

The header Content-Type: application/json is not necessary, the api assumes you are sending jsons.

$ curl localhost:5000/points -d '{"x": 1, "y": 2}'
{
  "_id": "1", 
  "x": 1, 
  "y": 2
}
$ curl localhost:5000/points -d '{"x": 5, "y": 10}'
{
  "_id": "2", 
  "x": 5, 
  "y": 10
}

GET method

$ curl localhost:5000/points
{
  "1": {
    "_id": "1", 
    "x": 1, 
    "y": 2
  }, 
  "2": {
    "_id": "2", 
    "x": 5, 
    "y": 10
  }
}
$ curl localhost:5000/points/1
{
  "_id": "1", 
  "x": 1, 
  "y": 2
}
$ curl localhost:5000/points/1/x
1

DELETE method

$ curl -XDELETE localhost:5000/points/1
{
  "_id": "1", 
  "x": 1, 
  "y": 2
}

Nested example

Create authors and books

$ curl localhost:5000/authors -d '{"name": "Asimov"}'
{
  "_id": "1", 
  "name": "Asimov"
}

$ curl localhost:5000/authors/1/books -d '{"title": "Nemesis", "year": 1988}'
{
  "_id": "1", 
  "title": "Nemesis", 
  "year": 1988
}

$ curl localhost:5000/authors/1/books -d '{"title": "Foundation and Earth", "year": 1987}'
{
  "_id": "2", 
  "title": "Foundation and Earth", 
  "year": 1987
}

Get the full data

$ curl localhost:5000/authors/1
{
  "_id": "1", 
  "books": {
    "1": {
      "_id": "1", 
      "title": "Nemesis", 
      "year": 1988
    }, 
    "2": {
      "_id": "2", 
      "title": "Foundation and Earth", 
      "year": 1987
    }
  }, 
  "name": "Asimov"
}

You can get only some field

$ curl localhost:5000/authors/1/books/2/title
"Foundation and Earth"

$ curl localhost:5000/authors/1/books/2/year
1987

And change any field as you wish

$ curl localhost:5000/authors/1/books/2/year -d '1986'
1986


$ curl localhost:5000/authors/1/books/2
{
  "_id": "2", 
  "title": "Foundation and Earth", 
  "year": 1986
}

PUT method

There is not PUT method, use POST instead.

Logs

$ docker logs -f generic-api 
172.17.0.1 - - [16/Jun/2017 04:50:56] "GET /points HTTP/1.1" 200 -
172.17.0.1 - - [16/Jun/2017 04:51:40] "POST /points HTTP/1.1" 201 -
172.17.0.1 - - [16/Jun/2017 04:51:55] "DELETE /points/1 HTTP/1.1" 404 -