Skip to content

volchata/pepo_server

Repository files navigation

#Серверная часть супер проекта pepo

Build Status

  1. Установка и настройка
  2. Формат объектов
  3. Аутентификация
  4. Учётные записи
  5. Твиты

##Установка и настройка

Для работы сервера необходима база данных 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 /

  1. Если пользователь аутентифицирован,
    1. Если в его записи в базе есть поле login, то перенаправление на интерфесную часть /feed
    2. Иначе на /signup
  2. Иначе на /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

  • редактировать профиль пользователя (не уверен, что это нужно, работает только для самого себя)
    • 200
    • 403
    • 404

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

About

Сервер для REST API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •