Создание минимально жизнеспособного REST API доски объявлений в учебных целях.
- Получение списков всех тегов, постов и пользователей
- Поиск в списках
- Регистрация пользователя
- Зарегистрированный пользователь может:
- Добавить новые посты
- Прокомментировать существующие посты
- Удалить и отредактировать свои посты и комментарии
POST
/api/v1/auth/register
Зарегистрироваться
Name | Type | Data type | Description |
---|---|---|---|
name | required | string | Имя |
nickname | required | string | Человеко-понятный идентификатор |
required | string | Email адрес | |
password | required | string | Пароль |
password_confirmed | required | string | Подтверждение пароля |
{
"access_token",
"token_type": "Bearer"
}
POST
/api/v1/auth/login
Войти
Name | Type | Data type | Description |
---|---|---|---|
required | string | Email адрес | |
password | required | string | Пароль |
{
"access_token",
"token_type":"Bearer"
}
POST
/api/v1/auth/logout
Выйти
Key | Value |
---|---|
Authorization | Bearer {token} |
GET
/api/v1/profile
Получить профиль аутентифицированного пользователя
Key | Value |
---|---|
Authorization | Bearer {token} |
{
"data": {
"user_id",
"name",
"nickname",
"email",
"created_at",
"updated_at",
"posts_count",
"comments_count"
}
}
GET
/api/v1/profile/posts
Получить профиль и посты аутентифицированного пользователя
Key | Value |
---|---|
Authorization | Bearer {token} |
Name | Type | Data type | Description |
---|---|---|---|
per_page | optional | int | Количество постов на странице |
page | optional | int | Номер страницы |
{
"data": [
{
"post_id",
"title",
"price",
"description",
"created_at",
"updated_at",
"user_id",
"user_nickname",
"tags": [
{
"tag_id",
"name",
"slug",
},
...
],
"comments_count"
}
],
"links": {...},
"meta": {...},
"user": {
"user_id",
"name",
"nickname",
"email",
"created_at",
"updated_at"
}
}
GET
/api/v1/profile/comments
Получить профиль и комментарии аутентифицированного пользователя
Key | Value |
---|---|
Authorization | Bearer {token} |
Name | Type | Data type | Description |
---|---|---|---|
per_page | optional | int | Количество комментариев на странице |
page | optional | int | Номер страницы |
{
"data": [
{
"comment_id",
"body",
"created_at":,
"updated_at",
"post_id",
"user_id",
"user_nickname"
},
...
],
"links": {...},
"meta": {...},
"user": {
"user_id",
"name",
"nickname",
"email",
"created_at",
"updated_at"
}
}
GET
/api/v1/users
Получить всех пользователей
Name | Type | Data type | Description |
---|---|---|---|
q | optional | string | Поисковый запрос |
per_page | optional | int | Количество пользователей на странице |
page | optional | int | Номер страницы |
{
"data": [
{
"user_id",
"name",
"nickname",
"email",
"created_at",
"updated_at",
"posts_count",
"comments_count"
},
...
],
"links": {...},
"meta": {...}
}
GET
/api/v1/users/{nickname}
Получить пользователя
{
"data": {
"user_id",
"name",
"nickname",
"email",
"created_at",
"updated_at",
"posts_count",
"comments_count"
}
}
GET
/api/v1/users/{nickname}/posts
Получить пользователя и его посты
Name | Type | Data type | Description |
---|---|---|---|
per_page | optional | int | Количество постов на странице |
page | optional | int | Номер страницы |
{
"data": [
{
"post_id",
"title",
"price",
"description",
"created_at",
"updated_at",
"user_id",
"user_nickname",
"tags": [
{
"tag_id",
"name",
"slug"
},
...
],
"comments_count"
},
...
],
"links": {...},
"meta": {...},
"user": {
"user_id",
"name",
"nickname",
"email",
"created_at",
"updated_at"
}
}
GET
/api/v1/users/{nickname}/comments
Получить пользователя и его комментарии
Name | Type | Data type | Description |
---|---|---|---|
per_page | optional | int | Количество комментариев на странице |
page | optional | int | Номер страницы |
{
"data": [
{
"comment_id",
"body",
"created_at":,
"updated_at",
"post_id",
"user_id",
"user_nickname"
},
...
],
"links": {...},
"meta": {...},
"user": {
"user_id",
"name",
"nickname",
"email",
"created_at",
"updated_at"
}
}
GET
/api/v1/tags
Получить все теги
Name | Type | Data type | Description |
---|---|---|---|
q | optional | string | Поисковый запрос |
{
"data": [
{
"tag_id",
"name",
"slug",
"post_count"
},
...
]
}
GET
/api/v1/tags/{slug}
Получить тег и его посты
Name | Type | Data type | Description |
---|---|---|---|
per_page | optional | int | Количество постов на странице |
page | optional | int | Номер страницы |
{
"data": [
{
"post_id",
"title",
"price",
"description",
"created_at",
"updated_at",
"user_id",
"user_nickname"
},
],
"links": {...},
"meta": {...},
"tag": {
"tag_id",
"name",
"slug"
}
}
GET
/api/v1/posts
Получить все посты
Name | Type | Data type | Description |
---|---|---|---|
q | optional | string | Поисковый запрос |
per_page | optional | int | Количество постов на странице |
page | optional | int | Номер страницы |
{
"data": [
{
"post_id,
"title",
"price",
"description",
"created_at",
"updated_at",
"user_id",
"user_nickname",
"tags": [
{
"tag_id",
"name",
"slug"
},
...
],
"comments_count"
},
...
],
"links": {...},
"meta": {...}
}
GET
/api/v1/posts/{id}
Получить пост и его комментарии
Name | Type | Data type | Description |
---|---|---|---|
per_page | optional | int | Количество комментариев на странице |
page | optional | int | Номер страницы |
{
"data": [
{
"comment_id",
"body",
"created_at",
"updated_at",
"post_id",
"user_id",
"user_nickname"
},
...
],
"links": {...},
"meta": {...},
"post": {
"post_id",
"title",
"price",
"description",
"created_at",
"updated_at",
"user_id",
"user_nickname",
"tags": [
{
"tag_id",
"name",
"slug"
},
...
]
}
}
POST
/api/v1/posts
Добавить новый пост
Key | Value |
---|---|
Authorization | Bearer {token} |
Name | Type | Data type | Description |
---|---|---|---|
title | optional | string | Заголовок |
price | optional | float | Цена |
description | optional | string | Описание |
tags[id] | optional | array[int] | Массив идентификаторов тегов |
{
"data": {
"post_id",
"title",
"price",
"description",
"created_at",
"updated_at",
"user_id",
"user_nickname",
"tags": [
{
"tag_id",
"name",
"slug"
},
...
]
},
}
PUT
/api/v1/posts/{id}
Изменить пост
Key | Value |
---|---|
Authorization | Bearer {token} |
Name | Type | Data type | Description |
---|---|---|---|
title | optional | string | Заголовок |
price | optional | float | Цена |
description | optional | string | Описание |
tags[id] | optional | array[int] | Массив идентификаторов тегов |
{
"data": {
"post_id",
"title",
"price",
"description",
"created_at",
"updated_at",
"user_id",
"user_nickname",
"tags": [
{
"tag_id",
"name",
"slug"
},
...
]
},
}
DELETE
/api/v1/posts/{id}
Удалить пост
Key | Value |
---|---|
Authorization | Bearer {token} |
POST
/api/v1/posts/{id}/comments
Добавить новый комментарий к посту
Key | Value |
---|---|
Authorization | Bearer {token} |
Name | Type | Data type | Description |
---|---|---|---|
body | required | string | Текст комментария |
{
"data": {
"comment_id",
"body",
"created_at",
"updated_at",
"post_id",
"user_id",
"user_nickname",
},
}
PUT
/api/v1/comments/{id}
Изменить комментарий
Key | Value |
---|---|
Authorization | Bearer {token} |
Name | Type | Data type | Description |
---|---|---|---|
body | required | string | Текст комментария |
{
"data": {
"comment_id",
"body",
"created_at",
"updated_at",
"post_id",
"user_id",
"user_nickname",
}
}
DELETE
/api/v1/comments/{id}
Удалить комментарий
Key | Value |
---|---|
Authorization | Bearer {token} |
- Клонируйте этот репозиторий и перейдите в папку проекта:
git clone https://github.com/AllaAverina/bulletin-board-API
cd bulletin-board-API
- Установите зависимости:
composer install
- Запустите MySQL, измените параметры для подключения к базе данных в файле .env.example и выполните:
copy .env.example .env
- Выполните команду для запуска миграций:
php artisan migrate
Или если хотите заполнить базу данных фиктивными данными:
php artisan migrate --seed
- Запустите веб-сервер:
php artisan serve
- Откройте в браузере, например, http://localhost:8000/api/v1/posts
Создайте новую базу данных для тестирования, измените параметры для подключения к ней в файле .env.testing и выполните:
php artisan test
- Клонируйте этот репозиторий и перейдите в папку проекта:
git clone https://github.com/AllaAverina/bulletin-board-API
cd bulletin-board-API
- Установите зависимости:
docker run --rm \
-u "$(id -u):$(id -g)" \
-v "$(pwd):/var/www/html" \
-w /var/www/html \
laravelsail/php82-composer:latest \
composer install --ignore-platform-reqs
- Создайте файл .env:
cp .env.docker.examlpe .env
- Создайте псевдоним (shell alias) и запустите sail:
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'
sail up -d
- Выполните команду для запуска миграций:
sail artisan migrate
Или если хотите заполнить базу данных фиктивными данными:
sail artisan migrate --seed
- Откройте в браузере, например, http://localhost/api/v1/posts
- Для остановки контейнеров используйте:
sail stop
- Настройте файл .env.testing:
cp .env.docker.testing .env.testing
- Запустите тесты:
sail artisan test