/BlogAPI

Primary LanguagePHPGNU General Public License v3.0GPL-3.0

Blog REST API

Спецификация API

Пользователи:

GET
  • /users/{id}
    Возвращает информацию о конкретном пользователе
    Доступно только для всех пользователей
    Ответ: Сущность пользователя (без пароля, без ДР, отображает имя статуса, а не номер, город) Админ видит ещё и ДР, роль
  • /users
    Возвращает список пользователей в системе
    Доступно для всех пользователей
    Ответ: список пользователей (без паролей, без ДР, отображает имя статуса, а не номер, город) Админ видит ещё и др., роль
POST
  • /users
    Создание пользователя.
    Модель:
{
	Name: string  
	Surname: string  
	Username: string  
	Password: string  
	Birthday: Date?
}  

Ответ: 200 OK
Доступно неавторизованному пользователю, админу.
Добавить проверку, что не существует пользователя с таким же Username.
После создания юзера происходит логин автоматоически (если создавал не админ)

  • /users/{id}/avatar
    Загрузка аватара для пользователя
    Модель:
{
    File: File
}

Файл сохраняется на сервере, генерируется ссылка и устанавливается в качестве аватара пользователя.
Если аватар существовал до загрузки нового аватара, то предыдущий файл удаляется.
Доступно только для администратора или самого пользователя
Ответ: Сущность пользователя (без пароля)

  • /login Авторизация пользователя
    Модель:
{
	Username: string
	Password: string
}

Ответ: Bearer token авторизации

  • /logout Логаут пользователя
    Ответ: 200 OK
PATCH
  • /users/{id}
    Обновление информации о пользователе.
    Модель:
	Name: string
	Surname: string
	Username: string
	Password: string
	Birthday: Date? 
	Avatar: string - ссылка на аватарку (на сервере)

Если поле пустое, то сохраняется предыдущее значение
Доступно администратору и самому пользователю для себя
Ответ: Сущность пользователя (без пароля, отображает имя статуса, а не номер)

  • /users/{id}/city
    Устанавливает пользователю город
    Модель:
{
    CityID: ID
}	

Ответ: 200 OK

  • /users/{id}/status
    Обновление статуса пользователя
    Модель:
{
	status: enum (Online, Offline, Do not disturb, In panic, Want to die)
}

Доступно администратору и самому пользователю для себя
Ответ: 200 OK

  • /users/{id}/role

Установка роли пользователю
Модель:

{
	RoleID: ID
}

Доступно администратору.
Ответ: 200 OK

DELETE
  • /users/{id}
    Удаление пользователя. Доступно только админу
    Ответ: 200 OK

Города:

GET
  • /cities/{id}
    Возвращает информацию о конкретном городе
    Ответ: сущность города
  • /cities Возвращает список городов. Доступно всем пользователям
    Ответ: список городов
  • /cities/{id}/peoples
    Возвращает список пользователей для конкретного города
    Ответ: Список пользователей (Нет пароля, нет ДР, отображается статус)
POST
  • /cities
    Создание города. Доступно только администратору
    Модель:
{
	Name: String (Required)  
}

Ответ: 200 OK

PATCH
  • /cities/{id}
    Редактирование города. Доступно только администратору
    Модель:
{
	Name: String (Required)  
}

Ответ: 200 OK

DELETE
  • /cities/{id}
    Удаление города. Доступно только админу.
    Ответ: 200 OK

Фото:

GET
  • /photos
    Ответ: список фотографий текущего пользователя
    Доступно самому пользователю
  • /user/photos/{userId}
    Ответ: список фотографий конкретного пользователя
    Доступно любому пользователю
POST
  • /photos
    Загрузка фотографий
    Модель:
{
	File: File  
}

Файл сохраняется на сервере, генерируется ссылка.
Доступно только для авторизованного пользователя
Ответ: Сущность фотографии (ID, Creator, Link)

DELETE
  • /photos/{id}
    Удаление фото. Доступно админу или самому пользователю (своё фото).
    Ответ: 200 OK

Роль:

GET
  • /roles/{id}
    Возвращает информацию о конкретной роли
    Ответ: сущность роли
  • /roles
    Возвращает список ролей
    Ответ: список ролей
POST
  • /roles
    Создание роли. Доступно только админу.
    Модель:
{
	Name: String (Required)  
}

Ответ: 200 OK

PATCH
  • /roles/{id}
    Редактирование роли. Доступно только админу.
    Доступно редактирование только кастомных ролей (т.е. системные сущности недоступны для редактирования)
    Модель:
{
	Name: String (Required)  
}

Системные роли:

  • admin
  • moderator
  • user

Ответ: 200 OK

DELETE
  • /roles/{id}
    Удаление роли. Доступно только админу.
    Доступно удаление только кастомных ролей (т.е. системные сущности недоступны для удаления)
    Ответ: 200 OK

Пост:

GET
  • /users/{userId}/posts
    Получение списка постов по автору
    Ответ: список постов
  • /posts
    Получение списка постов
    Ответ: список постов
  • /posts/{postId}
    Получение конкретного поста
    Ответ: сущность поста
POST
  • /posts
    Создание поста
    Модель:
{
	UserId: ID  
	Text:String (Required) 
}

Ответ: 200 OK

PATCH
  • /posts/{id}
    Редактирование поста. Доступно автору, админу или модератору
    Модель:
{
	Text:String (Required)  
}

Ответ: 200 OK

DELETE
  • /posts/{id}
    Удаление поста. Доступно автору, админу или модератору
    Ответ: 200 OK

Сообщение:

GET
  • /messages/{messageId}
    Получение конкретного сообщения. Доступно отправившему пользователю, пользователю, которому предназначалось сообщение.
    Ответ: сущность сообщения
  • /users/{userId}/messages/?offset={offset=0}&limit={limit=5}
    Получение списка сообщений пользователя.
    Параметры:

userId: ID пользователя
offset: Сколько сообщений пропустить
limit: Количество сообщений на странице (если 0 - отдавать максимум сообщений. Максимум = 100)

Ответ: список сообщений

  • /messages
    Получение списка сообщений, отправленных тебе или тобой
    Ответ: список сообщений
POST:
  • /users/{userId}/messages/
    Отправка сообщения пользователю
    Параметры:
    userId - ID пользователя
    Модель:
{
    message: string
}

Ответ: ID сообщения

DELETE:
  • /messages/{messageId}
    Удаление отправленного сообщения
    Доступно для отправителя, получателя и администратора
    Ответ: 200 ОК