#Серверная часть супер проекта pepo
##Установка и настройка
Для работы сервера необходима база данных MongoDB.
Её необходимо скачать и запустить с параметрами по умолчанию.
После этого нужно склонировать репозиторий проекта:
git clone https://github.com/volchata/pepo_server.git
И в папке проекта (pepo_server) выполнить команды установки необходимых модулей и запуска сервера
npm install
npm start
##Описание REST API pepo-сервиса
{
"id": 133, // идентификатор твита
"author": 17, // идентификатор автора
"content": "tweet text ok ok ok ok. hello", // содержание
"timestamp": "2016-12-12 10:45:33", // дата создания
"like": // true - пользователь поставил like
"retweet": // true - пользователь ретвитнул твит
"extras": {
"parent": { twitObj }, // если это ретвит, то это его "родительский" твит
"source": { twitObj }, // если это коментарий, то его "исходный" твит
"likes": [{ userObj }],
"retweets": [{ userObj }],
"image": "http://cool-image.ru/1.jpg", // если в твите картинка, то ссылка на неё
"url": "http://ya.ru", // ссылка в вебе
"attachment": { // снапшот этой ссылки
title:'Title of the page by url (string)', // заголовок этой страницы
image:/file/r4/wef/ew34td.jpg // путь к картинке-скриншоту страницы
// (относительно корня веб сервера )
},
"geo": null, // гео-метка
"comments": [ { twitObj2 }, { twitObj1 } ]
}
}
{
"id": 17,
"login": "iivan",
"firstName": "Ivan",
"lastName": "Ivanov",
"avatar": "http://cool-image.ru/2.jpg",
"followers": 17,
"friends": 3
}
GET /
- Если пользователь аутентифицирован,
- Если в его записи в базе есть поле login, то перенаправление на интерфесную часть /feed
- Иначе на /signup
- Иначе на /auth
GET /auth/vk
GET /auth/fb
- Точки входа для аутентификации через соответствующую службу. Интерфейс выполняет перенаправление на эти точки в зависимости от выбора пользователя. После выполнения процедуры аутентификации, пользователь перенаправляется на стартовую страницу.
GET /api/user/
- Получение данных своего профиля аутентифицированного пользователя
(ФИО, ссылку на аватарку, и т.д. См. формат данных пользователя)
Коды ответов:
- 200 --- в поле ответа передаётся JSON содержащий объект пользователя. content-type: application/json
- 403 --- (здесь и далее):
- пользователь не аутентифицирован, { "status":"Unauthenticated"} -> /auth/(vk|fb)
- его аутентификационный маркер устарел { "status":"Unauthenticated"} -> /auth/(vk|fb)
- регистрация не завершена { "status":"PartialRegistration"} -> /signup
- дополнительные причины в зависимости от вызванного api При получении ответа с данным кодом состояния, интерфейс должен выполнить переход на соответствующий адрес или показать уведомление
POST /api/user/
-
Выполнить регистрацию в системе или редактировать профиль. Тело ответа должно содержать JSON со следующими полями ( формат данных --- multipart/form-data ):
- login (это поле должно быть только первый раз при регистрации, иначе оно игнорируется)
- firstName, lastName
- photo
-
Ответы:
- 200
- 403
- 409 --- ответ при попытке зарегистрировать пользователя с уже существующим логином. Пользователю необходимо выбрать другой логин.
GET /api/users/:login
- профиль пользователя (JSON с данными пользователя по login)
- 200 --- в теле ответа JSON с объектом пользователя
- 403
- 404 --- если такой пользователь не обнаружен
POST /api/users/:login
редактировать профиль пользователя (не уверен, что это нужно, работает только для самого себя)200403404
GET /api/user/follower GET /api/users/:login/follower
- список фоловеров указанного пользователя, по умолчанию, первые 50. Параметры:
- limit - количество для передачи,
- offset - количество уже полученных
- Ответы
- 200 --- в теле ответа JSON с массивом объектов пользователя
- 403 --- (тут могут быть правила, например, только подписчик может увидеть список фоловеров)
- 404
GET /api/user/friends GET /api/users/:login/friends
- список на кого подписан указанный пользователь, по умолчанию, первые 50. Параметры:
- limit - количество для передачи,
- offset - количество уже полученных
- Ответы
- 200 --- в теле ответа JSON с массивом объектов пользователя
- 403 --- (тут могут быть правила, например, только подписчик может увидеть список фоловеров)
- 404
POST /api/user/:login/friends
- подписаться/отписаться на/от ленты пользователя
- 200 --- (новое состояние, т.е. подписан или нет {friend: true})
- 403
- 404
GET /api/user/feed GET /api/users/:login/feed
-
таймлайн --- получить наиболее новые твиты пользователя(первый вариант, своя лента), параметры:
- limit - количество (максимум 50, по умолчанию 10),
- offset - timestamp самого нового полученного твита (передаются твиты новее указанного)
- timeout - при наличии данного параметра, запрос считается long-poll запросом и удерживается пока не истечёт timeout(в милисекундах) или не наберётся limit твитов новее чем offset.
-
Если пользователь не является подписчиком автора, то можно получить только 50 самых свежих твитов.
-
При этом можно получить твиты свои или тех, кого аутентифицированный пользователь воловерит.
- 200
- 403 + при попытке получить чужой фид (того, кого не фоловерим) { "status":"NotFollowed", msg:"Для получения ленты пользователя необходимо стать его подписчиком"}
- 404
GET /api/user/feed/history GET /api/users/:login/feed/history
- точка входа для получения более старых твитов(первый вариант, своя лента), параметры:
- limit - максимальное количество твитов (максимум 50, по умолчанию 10),
- offset - timestamp самого старого полученного твита (передаются твиты старее данного)
- без параметров ../feed и ../feed/history получат одинаковый набор твитов
- Если пользователь не является подписчиком автора, то можно получить только 50 самых свежих твитов.
- Ответы
- 200
- 403 + при попытке получить чужой фид (того, кого не фоловерим) { "status":"NotFollowed", msg:"Для получения ленты пользователя необходимо стать его подписчиком"}
- 404
POST /api/user/feed
-
твитнуть. При твите картинкой, данные должны быть multipart/form-data (картинка -- поле image)
- 200
- 403
POST /api/user/snapshot
-
создать снапшот ссылки в вебе. Это должен быть application/json с полем url: {"url":"http://ya.ru"}
- 200 - сразу возвращает объект { "status":"OK", "attachment":"/file/cb/e4d/3df53.jpg"} это путь к создаваемому скриншоту страницы. Само изображение будет создано асинхронно. Для получения создаваемого снапшота необходимо выполнить запрос GET /api/user/snapshot/:snapshot_image_url, например, GET /api/user/snapshot/file/cb/e4d/3df53.jpg. Для прикрепления снапшота к создаваемому твиту, необходимо записать полученный url-картинки в поле extras.attachment, например { ... extras: { ... attachment: /file/cb/e4d/3df53.jpg } }
- 403
GET /api/user/snapshot/:snapshot_image_url
-
получить объект-снапшот по url изображения. Сам запрос является блокирующим, т.е. ответ на запрос блокируется до тех пор пока снапшот не будет сформирован или не истечёт таймаут, т.о. можно получить информацию о результате создания снапшота.
- 200 - { // возвращается часть информации твита, а именно, раздел extras.attachment url, // url для которого сгенерирован снапшот image, // url созданного изображения title // Заголовок страницы-снапшота }
- 403
- 404
GET /api/tweet/:id
-
получить твит по его id
- 200 --- JSON обект твит
- 403
- 404
POST /api/tweet/:id
-
комментить твит. Отправляется JSON с объектом твитом.
- 200
- 403
- 404
POST /api/tweet/:id/retweet
-
ретвитнуть твит
- 200
- 403
- 404
POST /api/tweet/:id/like
-
поставить лайк
-
200
-
403
-
404
DELETE /api/tweet/:id/like
-
убрать свой лайк
-
200
-
403
-
404
DELETE /tweet/:id
-
удалить свой твит
-
200
-
403
-
404
DELETE /tweet/:id/retweet
-
удалить свой ретвит
-
200
-
403
-
404
POST /api/tweet/:id
-
комментировать твит
- 200
- 403
- 404
GET /api/tweet/:id/comments
- получить комментарии твита
-
limit - количество (максимум 50, по умолчанию 10),
-
offset - timestamp комментария (передаются комментарии новее указанного)
-
200
-
403
-
404
-