Skip to content

ainur-fa/api_testing

Repository files navigation

Scoring API

Описание

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"}

Описание методов

online_score.

Аргументы

  • 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}}

clients_interests.

Аргументы

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages