Musicstore asynchronous example based on Python 3.6, aiohttp and asyncpg.
- Postgres 9.6 or above with extensions support (uuid-ossp required)
- Python 3.6
- aiohttp 3.3.2
- asyncpg 0.16
- json
- jsonschema 2.6
- yaml 3.12
- Edit configuration files in
config
folder whereapp.yaml
is used for server configuration andposgres_cfg.yaml
is for database connection. - You can manage config files in
settings.py
file. - To initialize database execute
init_db.py
file. - To run server loop execute
main.py
file.
API key should be in HEADER as a key "x-api-key" and uuid api key value.
{
"email" : "email@email.com",
"first_name" : "Name",
"last_name" : "Surname"
}
{
"err" : "error message"
}
header x-api-key:296c7f23-cb66-4dad-bc99-36a0c796dabb
GET /user
{
"email" : "email@email.com",
"first_name" : "Name",
"last_name" : "Surname"
}
POST /user?email=email@email.com&first_name=Name&last_name=Surname
{
"api_key" : "296c7f23-cb66-4dad-bc99-36a0c796dabb"
}
{
"err" : "error message"
}
header x-api-key:296c7f23-cb66-4dad-bc99-36a0c796dabb
DELETE /user
{
"status" : true
}
{
"err" : "error message"
}
header x-api-key:296c7f23-cb66-4dad-bc99-36a0c796dabb
GET /tracks
[
{
"id": "17",
"name": "One more new track",
"album_id": "9",
"created": "2018-07-08 11:36:51.118071",
"updated": "2018-07-08 11:36:51.118071"
},
{
"id": "18",
"name": "My little pig",
"album_id": "9",
"created": "2018-07-08 12:08:51.105279",
"updated": "2018-07-08 12:08:51.105279"
}
]
{
"err" : "error message"
}
header x-api-key:296c7f23-cb66-4dad-bc99-36a0c796dabb
POST /tracks?name=My New Track&album_id=1
{
"status": true
}
{
"err" : "error message"
}
header x-api-key:296c7f23-cb66-4dad-bc99-36a0c796dabb
DELETE /tracks?&id=1
{
"status": true
}
{
"err" : "error message"
}
header x-api-key:296c7f23-cb66-4dad-bc99-36a0c796dabb
PUT /tracks?id=1&name=My New New Track&album_id=2
{
"status": true
}
{
"err" : "error message"
}
header x-api-key:296c7f23-cb66-4dad-bc99-36a0c796dabb
POST /albums
&name=My new album
&metadata={
"release_year" : 1984,
"awards" : [
"Grammy",
"MTV music awards"
],
"publisher": "Warner music",
"ost": [
"Silent Hill",
"Supernatural"
]
}
INFO
Metadata is a json string and validated in models/albums.py
using json schema
{
"status": true
}
{
"err" : "error message"
}
header x-api-key:296c7f23-cb66-4dad-bc99-36a0c796dabb
GET /album
[
{
"id": "1",
"name": "My new album",
"metadata": {
"ost": [
"Silent hill",
"Supernatural"
],
"awards": [
"Grammy",
"MTV music awards"
],
"publisher": "Warner music",
"release_year": 1984
},
"created": "2018-07-06 21:03:56.347246",
"updated": "2018-07-08 10:52:08.806811"
}
]
{
"err" : "error message"
}