HTTP API сервис скоринга. Требуется предварительно настроенный и запущенный локально redis сервер.
Запуск api:
python api.py
Сервер принимает POST запросы на
http://<server_ip_address>/<method>
содержащие валидный json.
Доступные методы
- online_score
- clients_interests
{"account": "<имя компании партнера>", "login": "<имя пользователя>", "method": "<имя метода>", "token": "<аутентификационный токен>", "arguments": {<словарь с аргументами вызываемого метода>}}
- account - строка, опционально, может быть пустым
- login - строка, обязательно, может быть пустым
- method - строка, обязательно, может быть пустым
- token - строка, обязательно, может быть пустым
- arguments - словарь (объект в терминах json), обязательно, может быть пустым
OK:
{"code": <числовой код>, "response": {<ответ вызываемого метода>}}
Ошибка:
{"code": <числовой код>, "error": {<сообщение об ошибке>}}
При ошибке аутентификации:
{"code": 403, "error": "Forbidden"}
Аргументы
- phone - строка или число, длиной 11, начинается с 7, опционально, может быть пустым
- email - строка, в которой есть @, опционально, может быть пустым
- first_name - строка, опционально, может быть пустым
- last_name - строка, опционально, может быть пустым
- birthday - дата в формате DD.MM.YYYY, с которой прошло не больше 70 лет, опционально, может быть пустым
- gender - число 0, 1 или 2, опционально, может быть пустым
В ответ выдается число, вычисляемое для полученных аргументов.
{"score": <число>}
или если запрос пришел от валидного пользователя admin
{"score": 42}
или если произошла ошибка валидации
{"code": 422, "error": "<сообщение о том какое поле(я) невалидно(ы) и как именно>"}
Пример
$ curl -X POST -H "Content-Type: application/json" -d '{"account": "horns&hoofs", "login": "h&f", "method": "online_score", "token": "55cc9ce545bcd144300fe9efc28e65d415b923ebb6be1e19d2750a2c03e80dd209a27954dca045e5bb12418e7d89b6d718a9e35af34e14e1d5bcd5a08f21fc95", "arguments": {"phone": "79175002040", "email": "stupnikov@otus.ru", "first_name": "Стансилав", "last_name": "Ступников", "birthday": "01.01.1990", "gender": 1}}' http://127.0.0.1:8080/method/
{"code": 200, "response": {"score": 5.0}}
Аргументы
- client_ids - массив числе, обязательно, не пустое
- date - дата в формате DD.MM.YYYY, опционально, может быть пустым
Ответ
в ответ выдается словарь <id клиента>:<список интересов>
.
{"client_id1": ["interest1", "interest2" ...], "client2": [...] ...}
или если произошла ошибка валидации
{"code": 422, "error": "<сообщение о том какое поле(я) невалидно(ы) и как именно>"}
Пример
$ curl -X POST -H "Content-Type: application/json" -d '{"account": "horns&hoofs", "login": "admin", "method": "clients_interests", "token": "d3573aff1555cd67dccf21b95fe8c4dc8732f33fd4e32461b7fe6a71d83c947688515e36774c00fb630b039fe2223c991f045f13f24091386050205c324687a0", "arguments": {"client_ids": [1,2,3,4], "date": "20.07.2017"}}' http://127.0.0.1:8080/method/
{"code": 200, "response": {"1": ["books", "hi-tech"], "2": ["pets", "tv"], "3": ["travel", "music"], "4": ["cinema", "geek"]}}
Логирование скрипта ведется в формате в формате '[%(asctime)s] %(levelname).1s %(message)s'
c датой в виде '%Y.%m.%d %H:%M:%S'
.
Логи будут писаться в файл, в случае если указан аргумент командной строки --log
при запуске, иначе в stdout.
Пример:
python api.py --log scoring.txt
Python 3.6 +
Запуск тестов
pip install pytest
python -m pytest tests