Skip to content
ivngithub edited this page Feb 13, 2017 · 30 revisions

Список ресурсов:

/auth - аутентификация пользователя - POST
/register - регистрация пользователя - POST
/status - информация о пользователе - GET
/users - список пользователей - GET
/user/<id> - пользователь, где <id> это номер в базе (Int) - GET, PUT, DELETE
/user/changepass - смена пароля пользователя - PUT
/user/restore - восстановление пароля пользователя - POST
/sites - список всех сайтов - GET
/site/{<id>|<name>} - один из сайтов, где <id> это номер в базе (Int), <name> его название (Str) - GET, POST, PUT, DELETE
/persons - список всех личностей - GET
/person/{<id>|<name>} - личность, где <id> это номер в базе (Int), где <name> имя/фамилия (Str) - GET, POST, PUT, DELETE
/keywords - список ключевых слов поиска - GET
/keyword/{<id>|<name>} - ключевое слово, где это номер в базе (Int), текстовое значение (Str) - GET, POST, PUT, DELETE
/base_statistic - общая статистика краулера, отображает количество скачанных страниц, не распарсенных страниц, распарсенных - GET
/base_statistic/{<id>} - статистика краулера по <id> сайта - GET
/rank_statistic - общая статистика краулера, отображает количество найденных совпадений для персон и для всех сайтов - GET
/rank_statistic/{<id>} - статистика краулера по <id> сайта - GET
/rank_statistic/{<date>} - статистика краулера по <date>, верный формат <%Y-%m-%d> - GET
/rank_statistic/{<id>}/{<date>} - статистика краулера по <id> и <date> - GET
/rank_statistic/{<date1>}/{<date2>} - статистика краулера за период от <date1> по <date2>- GET
/rank_statistic/{<id>}/{<date1>}/{<date2>} - статистика краулера по <id> и за период от <date1> по <date2>- GET

Авторизация:

ресурс: /auth
Поддерживаемые запросы: POST
Возвращаемые коды: 200, 400
Параметры: Content-Type: application/json {"username":"", "password":""}

Используется JWT авторизация.
Для получения ключа необходимо отправить POST запрос:
POST http://host:5000/auth
Content-Type: application/json {"username":"someUser", "password":"secretWord"}

в ответе будет ключ - token::
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "email": "test@email", "id": 7, "name": "testUser", "role": 3, "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0ODY4MjY1ODUsImlhdCI6MTQ4NjgxOTM4NSwibmJmIjoxNDg2ODE5Mzg1LCJpZGVudGl0eSI6N30.C5wHMGHS5zsoiY_4md3tUd_7qiJ1oB6Pnh22mxEOy6U", "token_exp": "2017-02-11 15:23:05 GMT" }

его необходимо передавать в заголовке запросов в виде ("JWT_пробел_ключ"):
Authorization:"JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0ODY4MjY1ODUsImlhdCI6MTQ4NjgxOTM4NSwibmJmIjoxNDg2ODE5Mzg1LCJpZGVudGl0eSI6N30.C5wHMGHS5zsoiY_4md3tUd_7qiJ1oB6Pnh22mxEOy6U"

Создание пользователей:

ресурс: /register
Поддерживаемые запросы: POST
Возвращаемые коды: 200, 400, 403
Параметры: Content-Type: application/json {"username":"", "password":"", "email":"", "name":""} - обязательны для передачи. Роль и администратор будут подставлены автоматически.

пример: POST http://host:5000/register
Content-Type: application/json {"name":"Имя", "email":"mail@me.com", "username":"name" ,"password":"secret"}

ответ:
HTTP/1.0 201 CREATED
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "email": "mail@me.com", "id": 2, "name": "Имя", "role": 2, "username": "name" }

Редактирование пользователей:

ресурс: /user/<id>
Поддерживаемые запросы: PUT
Возвращаемые коды: 200, 201, 400, 403, 404
Параметры: Content-Type: application/json {"username":"", "password":"", "email":"", "name":""} - обязательны для передачи, а вот их значения нет. В случае пустого значения, поле изменено не будет.

пример:
PUT http://host:5000/user/2
Content-Type: application/json {"name":"имя", "email":"", "username":"" ,"password":""}

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "email": "mail@me.com", "id": 2, "name": "имя", "role": 2, "username": "name" }

Изменение пароля пользователя:

ресурс: /user/changepass
Поддерживаемые запросы: PUT
Возвращаемые коды: 200, 400
Параметры: Content-Type: application/json {"password":"", "new_password":""}

пример:
PUT http://host:5000/user/changepass
Content-Type: application/json {"password":"old_one", "new_password":"new_one"}

ответ: HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "message": "Password changed!" }

Восстановление/сброс пароля пользователя:

ресурс: /user/restore
Поддерживаемые запросы: POST
Возвращаемые коды: 200, 400, 404
Параметры: Content-Type: application/json {"email":""}

пример:
POST http://host:5000/user/restore
Content-Type: application/json {"email":"some@scarymail"}

ответ: HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "message": "We send an email to you." }

Список сайтов:

ресурс: /sites
Поддерживаемые запросы: GET
Возвращаемые коды: 200
Параметры: нет

пример:
GET http://host:5000/sites

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "sites": [ { "admin_id": 1, "id": 1, "name": "lenta.ru" }, { "admin_id": 1, "id": 2, "name": "rbk.ru" } ] }

Взаимодействие с объектами в списке сайтов:

ресурс: /site, /site/<id>, /site/<name>
Поддерживаемые запросы: GET, POST, PUT, DELETE
Возвращаемые коды: 200, 201, 400, 403, 404
Параметры: Content-Type: application/json {"name":""}

получить информацию:
по ID:
GET http://host:5000/site/1
по имени:
GET http://host:5000/site/lenta.ru

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "admin_id": 1, "id": 1, "name": "lenta.ru" }

создание:
PUT http://host:5000/site/0
Content-Type: application/json {"name":"site.ru"}
или:
POST http://host:5000/site
Content-Type: application/json {"name":"site.ru"}

ответ:
HTTP/1.0 201 CREATED
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "admin_id": 1, "id": 1, "name": "lenta.ru" }

изменение:
PUT http://host:5000/site/1
Content-Type: application/json {"name":"site.ru"}

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "admin_id": 1, "id": 1, "name": "site.ru" }

удаление:
DELETE http://host:5000/site/1

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "message": "Site deleted." }

Если в базе не найден такой объект:
HTTP/1.0 404 NOT FOUND
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "message": "Site not found." }

Список персон:

ресурс: /persons
Поддерживаемые запросы: GET
Возвращаемые коды: 200
Параметры: нет

пример:
GET http://host:5000/persons

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "persons": [ { "admin_id": 2, "id": 1, "keywords": [ { "id": 1, "name": "Путину", "person_id": 1 }, ], "name": "Путин" }, ] }

Взаимодействие с объектами в списке персон:

ресурс: /person, /person/<id>, /person/<name>
Поддерживаемые запросы: GET, POST, PUT, DELETE
Возвращаемые коды: 200, 201, 400, 403, 404
Параметры: Content-Type: application/json {"name":""}

Информация об объекте:
GET http://host:5000/person/1 или:
GET http://host:5000/person/Фамилия

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "admin_id": 1, "id": 2, "keywords": [] "name": "Фамилия" }

Создание объекта:
POST http://host:5000/person
Content-Type: application/json {"name":"Имя"}
или:
PUT http://host:5000/person/0
Content-Type: application/json {"name":"Имя"}

ответ:
HTTP/1.0 201 CREATED
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "admin_id": 1, "id": 2, "keywords": [] "name": "Имя" }

В случае если объект уже существует:
HTTP/1.0 400 BAD REQUEST
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "message": "A person with name 'Имя' already exists." }

редактирование:
PUT http://host:5000/person/2
Content-Type: application/json {"name":"ИмяДлинное"}

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "admin_id": 1, "id": 2, "keywords": [] "name": "ИмяДлинное" }

удаление:
DELETE http://host:5000/person/2

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{
"message": "Person deleted"
}

Список ключевых слов:

ресурс: /keywords
Поддерживаемые запросы: GET
Возвращаемые коды: 200
Параметры: нет

пример:
GET http://host:5000/keywords

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "keywords": [ { "id": 1, "name": "Путину", "person_id": 1 }, { "id": 2, "name": "Путиным", "person_id": 1 }, { "id": 3, "name": "Путине", "person_id": 1 } ] }

Взаимодействие с объектами в списке ключевых слов:

ресурс: /keyword, /keyword/<id>, /keyword/<name>
Поддерживаемые запросы: GET, POST, PUT, DELETE
Возвращаемые коды: 200, 201, 400, 403, 404
Параметры: Content-Type: application/json {"name":"", "person_id": ""}

Информация об объекте:
GET http://host:5000/keyword/1 или:
GET http://host:5000/keyword/Путину

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "id": 2, "name": "Путину", "person_id": 1 }

Создание объекта:
POST http://host:5000/keyword
Content-Type: application/json {"name":"Медведеву", "person_id": "2"}
или:
PUT http://host:5000/keyword/0
Content-Type: application/json {"name":"Медведеву", "person_id": "2"}

ответ:
HTTP/1.0 201 CREATED
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "id": 4, "name": "Медведеву", "person_id": 2 }

В случае если объект уже существует:
HTTP/1.0 400 BAD REQUEST
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "message": "A keyword with name 'Медведеву' already exists." }

редактирование:
PUT http://host:5000/keyword/2
Content-Type: application/json {"name":"ИмяДлинное", "person_id": "3"}

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "id": 2, "name": "ИмяДлинное", "person_id": 3 }

удаление:
DELETE http://host:5000/keyword/2

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{
"message": "Keyword deleted"
}

Запрос на статистку - количество скачанных сайтов:

список: GET http://host:5000/base_statistic
по ID:
GET http://host:5000/base_statistic/1

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "site": "lenta.ru", "total_count": 1, "total_count_not_round": 4, "total_count_round": 0 }

Запрос на статистку - популярности персоны:

список: GET http://host:5000/rank_statistic
по ID:
GET http://host:5000/rank_statistic/1
по Date:
GET http://host:5000/rank_statistic/2017-02-11
по ID, Date:
GET http://host:5000/rank_statistic/1/2017-02-11
по ID, Date1/Date2:
GET http://host:5000/rank_statistic/1/2017-02-10/2017-02-11

ответ:
HTTP/1.0 200 OK
Content-Length: 00
Content-Type: application/json
Date: Thu, 1 Jan 1970 00:00:00 GMT
Server: SomeWebServer/0.0.0

{ "id": 1, "name": "lenta.ru", "persons": [ { "id": 1, "name": "Путин В.В.", "rank": "10" }, { "id": 4, "name": "Иванов И.И.", "rank": "7" }, { "id": 5, "name": "Петров А.", "rank": "not found statistic for this person" } ] }

"rank": "not found statistic for this person" - статистика не была подсчитана.