В ходе изучения предметной области были выделены следующие сущности:
«user_roles»
«users»
«species_population_statuses»
«species_statuses»
«bird_orders»
«bird_families»
«bird_genera»
«bird_species»
«bird_detections»
| # | Сущность | Атрибуты |
|---|---|---|
| 1 | user_roles | id, created_at, updated_at, title |
| 2 | users | id, name, email, email_verified_at, password, creator_id, user_role_id, remember_token, created_at, updated_at |
| 3 | species_statuses | id, created_at, updated_at, title, description |
| 4 | species_population_statuses | id, created_at, updated_at, title, description |
| 5 | bird_orders | id, created_at, updated_at, title, title_latin, description |
| 6 | bird_families | id, created_at, updated_at, title, title_latin, description, bird_order_id |
| 7 | bird_genera | id, created_at, updated_at, title, title_latin, description, bird_family_id |
| 8 | bird_species | id, created_at, updated_at, title, title_latin, description, distribution, migration, habitat, bird_genus_id, species_population_status_id |
| 9 | bird_detections | id, created_at, updated_at, agent_id, bird_species_id, latitude, longitude, detection_datetime, comment, confirmed |
1. Сущность «user_roles»
Хранит информацию о ролях пользователей
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | id | BIGINT (PK) | Первичный ключ |
| 2 | created_at | TIMESTAMP | Время создания записи |
| 3 | updated_at | TIMESTAMP | Время последнего обновления записи |
| 4 | title | VARCHAR(255) | Название роли (уникальное) |
2. Сущность «users»
Таблица «users» представляет собой таблицу данных, которая используется для хранения информации о пользователях
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | id | BIGINT (PK) | Первичный ключ |
| 2 | name | VARCHAR(255) | Имя пользователя |
| 3 | VARCHAR(255) | Электронная почта (уникальная) | |
| 4 | email_verified_at | TIMESTAMP | Время подтверждения почты (может быть null) |
| 5 | password | VARCHAR(255) | Пароль пользователя |
| 6 | creator_id | BIGINT (FK) | Внешний ключ на таблицу users (создатель пользователя) |
| 7 | user_role_id | BIGINT (FK) | Внешний ключ на таблицу user_roles |
| 8 | remember_token | VARCHAR(100) | Токен для запоминания сессии |
| 9 | created_at | TIMESTAMP | Время создания записи |
| 10 | updated_at | TIMESTAMP | Время последнего обновления записи |
3. Сущность «species_statuses»
Таблица «species_statuses» представляет собой таблицу данных, которая используется для хранения информации о статусах видов птиц
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | id | BIGINT (PK) | Первичный ключ |
| 2 | created_at | TIMESTAMP | Время создания записи |
| 3 | updated_at | TIMESTAMP | Время последнего обновления записи |
| 4 | title | VARCHAR(255) | Название статуса (уникальное) |
| 5 | description | TEXT | Описание статуса (может быть null) |
4. Сущность «species_population_statuses»
Таблица «species_population_statuses» представляет собой таблицу данных, которая используется для хранения информации статусах популяции видов птиц
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | id | BIGINT (PK) | Первичный ключ |
| 2 | created_at | TIMESTAMP | Время создания записи |
| 3 | updated_at | TIMESTAMP | Время последнего обновления записи |
| 4 | title | VARCHAR(255) | Название статуса популяции вида (уникальное) |
| 5 | description | TEXT | Описание статуса популяции вида (может быть null) |
5. Сущность «bird_orders»
Таблица «bird_orders» представляет собой таблицу данных, которая используется для хранения информации об отрядах птиц
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | id | BIGINT (PK) | Первичный ключ |
| 2 | created_at | TIMESTAMP | Время создания записи |
| 3 | updated_at | TIMESTAMP | Время последнего обновления записи |
| 4 | title | VARCHAR(255) | Название отряда (уникальное) |
| 5 | title_latin | VARCHAR(255) | Латинское название отряда (уникальное) |
| 6 | description | TEXT | Описание отряда (может быть null) |
6. Сущность «bird_families»
Таблица «bird_families» представляет собой таблицу данных, которая используется для хранения информации о семействах птиц
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | id | BIGINT (PK) | Первичный ключ |
| 2 | created_at | TIMESTAMP | Время создания записи |
| 3 | updated_at | TIMESTAMP | Время последнего обновления записи |
| 4 | title | VARCHAR(255) | Название семейства (уникальное) |
| 5 | title_latin | VARCHAR(255) | Латинское название семейства (уникальное) |
| 6 | description | TEXT | Описание семейства (может быть null) |
| 7 | bird_order_id | BIGINT (FK) | Внешний ключ на таблицу bird_orders |
7. Сущность «bird_genera»
Таблица «bird_genera» представляет собой таблицу данных, которая используется для хранения информации о родах птиц
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | id | BIGINT (PK) | Первичный ключ |
| 2 | created_at | TIMESTAMP | Время создания записи |
| 3 | updated_at | TIMESTAMP | Время последнего обновления записи |
| 4 | title | VARCHAR(255) | Название рода (уникальное) |
| 5 | title_latin | VARCHAR(255) | Латинское название рода (уникальное) |
| 6 | description | TEXT | Описание рода (может быть null) |
| 7 | bird_family_id | BIGINT (FK) | Внешний ключ на таблицу bird_families |
8. Сущность «bird_species»
Таблица «bird_species» представляет собой таблицу данных, которая используется для хранения информации о видах птиц
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | id | BIGINT (PK) | Первичный ключ |
| 2 | created_at | TIMESTAMP | Время создания записи |
| 3 | updated_at | TIMESTAMP | Время последнего обновления записи |
| 4 | title | VARCHAR(255) | Название вида (уникальное) |
| 5 | title_latin | VARCHAR(255) | Латинское название вида (уникальное) |
| 6 | description | TEXT | Описание вида (может быть null) |
| 7 | distribution | TEXT | Распространение вида (может быть null) |
| 8 | migration | TEXT | Миграция вида (может быть null) |
| 9 | habitat | TEXT | Среда обитания вида (может быть null) |
| 10 | bird_genus_id | BIGINT (FK) | Внешний ключ на таблицу bird_genera |
| 11 | species_population_status_id | BIGINT (FK) | Внешний ключ на таблицу species_population_statuses (может быть null) |
9. Сущность «bird_detections»
Таблица «bird_detections» представляет собой таблицу данных, которая используется для хранения информации о зафиксированных птицах
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | id | BIGINT (PK) | Первичный ключ |
| 2 | created_at | TIMESTAMP | Время создания записи |
| 3 | updated_at | TIMESTAMP | Время последнего обновления записи |
| 4 | agent_id | BIGINT (FK) | Внешний ключ на таблицу users (агент, обнаруживший птицу) |
| 5 | bird_species_id | BIGINT (FK) | Внешний ключ на таблицу bird_species (вид птицы) |
| 6 | latitude | DECIMAL(8, 6) | Широта места обнаружения |
| 7 | longitude | DECIMAL(9, 6) | Долгота места обнаружения |
| 8 | detection_datetime | DATETIME | Дата и время обнаружения |
| 9 | comment | TEXT | Комментарий (может быть null) |
| 10 | confirmed | BOOLEAN | Подтверждение обнаружения (по умолчанию false) |
10. Таблица «bird_species_species_status»
Таблица «bird_species_species_status» представляет собой таблицу пересечений, которая отображает связь «многие ко многим» сущности «bird_species» с сущностью «species_statuses»
| № | Атрибут | Тип | Описание |
|---|---|---|---|
| 1 | created_at | TIMESTAMP | Время создания записи |
| 2 | updated_at | TIMESTAMP | Время последнего обновления записи |
| 3 | bird_species_id | BIGINT (FK, PK) | Внешний ключ на таблицу bird_species |
| 4 | species_status_id | BIGINT (FK, PK) | Внешний ключ на таблицу species_statuses |
| # | Код | Описание |
|---|---|---|
| 1 | 200 | Запрос выполнен успешно, данные получены |
| 2 | 201 | Запрос выполнен успешно, запись создана |
| 3 | 401 | Запрос не выполнен, ошибка авторизации |
| 3 | 403 | Запрос не выполнен, запрет на выполнение операции |
| 4 | 404 | Запрос не выполнен, запись не удалось найти |
| 5 | 422 | Запрос не выполнен, данные не прошли валидацию |
| № | URL | Тип запроса | Входные данные | Описание |
|---|---|---|---|---|
| 1 | /login | GET | JSON (логин, пароль) | Получение токена аутентификации. |
| 2 | /bird-detections/add | POST | JSON (данные) | Добавление нового обнаружения птицы (требуется аутентификация). |
| 3 | /bird-detections | GET | Нет | Получение всех обнаружений птиц. |
| 4 | /bird-detections/{id} | GET | bigint id | Получение информации о конкретном обнаружении птицы. |
| 5 | /bird-detections/edit/{id} | PUT | JSON (данные) | Обновление информации о конкретном обнаружении птицы (требуется аутентификация). |
| 6 | /bird-detections/delete/{id} | DELETE | bigint id | Удаление конкретного обнаружения птицы (требуется аутентификация). |
| 7 | /bird-families/add | POST | JSON (данные) | Добавление нового семейства птиц (требуется аутентификация). |
| 8 | /bird-families | GET | Нет | Получение всех семейств птиц. |
| 9 | /bird-families/{id} | GET | bigint id | Получение информации о конкретном семействе птиц. |
| 10 | /bird-families/edit/{id} | PUT | JSON (данные) | Обновление информации о конкретном семействе птиц (требуется аутентификация). |
| 11 | /bird-families/delete/{id} | DELETE | bigint id | Удаление конкретного семейства птиц (требуется аутентификация). |
| 12 | /bird-genera/add | POST | JSON (данные) | Добавление нового рода птиц (требуется аутентификация). |
| 13 | /bird-genera | GET | Нет | Получение всех родов птиц. |
| 14 | /bird-genera/{id} | GET | bigint id | Получение информации о конкретном роде птиц. |
| 15 | /bird-genera/edit/{id} | PUT | JSON (данные) | Обновление информации о конкретном роде птиц (требуется аутентификация). |
| 16 | /bird-genera/delete/{id} | DELETE | bigint id | Удаление конкретного рода птиц (требуется аутентификация). |
| 17 | /bird-orders/add | POST | JSON (данные) | Добавление нового отряда птиц (требуется аутентификация). |
| 18 | /bird-orders | GET | Нет | Получение всех отрядов птиц. |
| 19 | /bird-orders/{id} | GET | bigint id | Получение информации о конкретном отряде птиц. |
| 20 | /bird-orders/edit/{id} | PUT | JSON (данные) | Обновление информации о конкретном отряде птиц (требуется аутентификация). |
| 21 | /bird-orders/delete/{id} | DELETE | bigint id | Удаление конкретного отряда птиц (требуется аутентификация). |
| 22 | /bird-species/add | POST | JSON (данные) | Добавление нового вида птиц (требуется аутентификация). |
| 23 | /bird-species | GET | Нет | Получение всех видов птиц. |
| 24 | /bird-species/{id} | GET | bigint id | Получение информации о конкретном виде птиц. |
| 25 | /bird-species/edit/{id} | PUT | JSON (данные) | Обновление информации о конкретном виде птиц (требуется аутентификация). |
| 26 | /bird-species/delete/{id} | DELETE | bigint id | Удаление конкретного вида птиц (требуется аутентификация). |
| 27 | /species-population-statuses/add | POST | JSON (данные) | Добавление нового статуса популяции (требуется аутентификация). |
| 28 | /species-population-statuses | GET | Нет | Получение всех статусов популяции. |
| 29 | /species-population-statuses/{id} | GET | bigint id | Получение информации о конкретном статусе популяции. |
| 30 | /species-population-statuses/edit/{id} | PUT | JSON (данные) | Обновление информации о конкретном статусе популяции (требуется аутентификация). |
| 31 | /species-population-statuses/delete/{id} | DELETE | bigint id | Удаление конкретного статуса популяции (требуется аутентификация). |
| 32 | /species-statuses/add | POST | JSON (данные) | Добавление нового статуса вида (требуется аутентификация). |
| 33 | /species-statuses | GET | Нет | Получение всех статусов видов. |
| 34 | /species-statuses/{id} | GET | bigint id | Получение информации о конкретном статусе вида. |
| 35 | /species-statuses/edit/{id} | PUT | JSON (данные) | Обновление информации о конкретном статусе вида (требуется аутентификация). |
| 36 | /species-statuses/delete/{id} | DELETE | bigint id | Удаление конкретного статуса вида (требуется аутентификация). |
| 37 | /users/add | POST | JSON (данные) | Добавление нового пользователя (требуется аутентификация). |
| 38 | /users | GET | Нет | Получение всех пользователей (требуется аутентификация). |
| 39 | /users/{id} | GET | bigint id | Получение информации о конкретном пользователе (требуется аутентификация). |
| 40 | /users/edit/{id} | PUT | JSON (данные) | Обновление информации о конкретном пользователе (требуется аутентификация). |
| 41 | /users/delete/{id} | DELETE | bigint id | Удаление конкретного пользователя (требуется аутентификация). |
| 42 | /user-roles/add | POST | JSON (данные) | Добавление новой роли пользователя (требуется аутентификация). |
| 43 | /user-roles | GET | Нет | Получение всех ролей пользователей (требуется аутентификация). |
| 44 | /user-roles/{id} | GET | bigint id | Получение информации о конкретной роли пользователя (требуется аутентификация). |
| 45 | /user-roles/edit/{id} | PUT | JSON (данные) | Обновление информации о конкретной роли пользователя (требуется аутентификация). |
| 46 | /user-roles/delete/{id} | DELETE | bigint id | Удаление конкретной роли пользователя (требуется аутентификация). |
Запрос:
GET http://siberiabirds.local/api/login HTTP/1.1
Пример тела запроса:
Accept: application/json
Content-Type: application/json
{
"email": "[email protected]",
"password": "qwerty123"
}
Результат выполнения запроса:
HTTP/1.1 200 OK
Date: Wed, 15 Jan 2025 18:32:33 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "Successful login",
"token": "4|52w9ueqDYXSWHPQLkgT5qAquuW5qPIO4jkIiIRa0e505e87d",
"token_type": "Bearer"
}
Запрос:
POST http://siberiabirds.local/api/bird-species/add HTTP/1.1
Пример тела запроса:
Accept: application/json
Content-Type: application/json
Authorization: Bearer 4|52w9ueqDYXSWHPQLkgT5qAquuW5qPIO4jkIiIRa0e505e87d
{
"title": "Певчий дрозд",
"title_latin": "Turdus philomelos",
"description": "Длина его тела — 210—250 мм, крыло — 113—122 мм, размах крыльев — 340—390 мм, масса — 55—100 г.",
"distribution": "Европа, Малая Азия и Сибирь",
"migration": "перелётный",
"habitat": "Певчий дрозд заселяет различные типы лесов, и одинаково многочислен и в лиственных лесах, и в тайге.",
"bird_genus_id": 1,
"species_population_status_id": 2,
"species_status_ids": [1, 2, 3]
}
Результат выполнения запроса:
HTTP/1.1 201 Created
Date: Wed, 15 Jan 2025 18:30:58 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "Bird species created successfully.",
"data": {
"id": 12,
"created_at": "2025-01-15T18:30:58.000000Z",
"updated_at": "2025-01-15T18:30:58.000000Z",
"title": "\u041f\u0435\u0432\u0447\u0438\u0439 \u0434\u0440\u043e\u0437\u0434",
"title_latin": "Turdus philomelos",
"description": "\u0414\u043b\u0438\u043d\u0430 \u0435\u0433\u043e \u0442\u0435\u043b\u0430 \u2014 210\u2014250 \u043c\u043c, \u043a\u0440\u044b\u043b\u043e \u2014 113\u2014122 \u043c\u043c, \u0440\u0430\u0437\u043c\u0430\u0445 \u043a\u0440\u044b\u043b\u044c\u0435\u0432 \u2014 340\u2014390 \u043c\u043c, \u043c\u0430\u0441\u0441\u0430 \u2014 55\u2014100 \u0433.",
"distribution": "\u0415\u0432\u0440\u043e\u043f\u0430, \u041c\u0430\u043b\u0430\u044f \u0410\u0437\u0438\u044f \u0438 \u0421\u0438\u0431\u0438\u0440\u044c",
"migration": "\u041f\u0435\u0440\u0435\u043b\u0451\u0442\u043d\u044b\u0439",
"habitat": "\u041f\u0435\u0432\u0447\u0438\u0439 \u0434\u0440\u043e\u0437\u0434 \u0437\u0430\u0441\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043b\u0435\u0441\u043e\u0432, \u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d \u0438 \u0432 \u043b\u0438\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043b\u0435\u0441\u0430\u0445, \u0438 \u0432 \u0442\u0430\u0439\u0433\u0435.",
"bird_genus": {
"id": 1,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "\u0427\u0438\u0431\u0438\u0441\u044b",
"title_latin": "Vanellus",
"description": "\u0427\u0438\u0301\u0431\u0438\u0441\u044b, \u0438\u043b\u0438 \u043f\u0438\u0433\u0430\u043b\u0438\u0446\u044b (\u043b\u0430\u0442. Vanellus), \u2014 \u0440\u043e\u0434 \u043f\u0442\u0438\u0446 \u0438\u0437 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u0440\u0436\u0430\u043d\u043a\u043e\u0432\u044b\u0445 (Charadriidae), \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430. \u0427\u0438\u0431\u0438\u0441\u044b \u043e\u0431\u0438\u0442\u0430\u044e\u0442 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435: \u043d\u0430 \u0431\u0435\u0440\u0435\u0433\u0430\u0445 \u043e\u0437\u0451\u0440, \u0440\u0435\u043a \u0438 \u0432 \u0431\u043e\u043b\u043e\u0442\u0438\u0441\u0442\u044b\u0445 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044f\u0445. \u0427\u0430\u0441\u0442\u043e \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0438 \u043d\u0430 \u0432\u043e\u0437\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u0437\u0435\u043c\u043b\u044f\u0445. \u0427\u0438\u0431\u0438\u0441\u044b \u2014 \u043e\u0447\u0435\u043d\u044c \u0433\u0440\u043e\u043c\u043a\u0438\u0435 \u043f\u0442\u0438\u0446\u044b. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0434\u043a\u0438\u043c \u0438 \u0443\u0433\u0440\u043e\u0436\u0430\u0435\u043c\u044b\u043c \u0432\u0438\u0434\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0435\u0447\u0451\u0442\u043a\u0430, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438\u0448\u044c 5600 \u0433\u043d\u0435\u0437\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u043f\u0430\u0440.",
"bird_family": {
"id": 1,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "\u0420\u0436\u0430\u043d\u043a\u043e\u0432\u044b\u0435",
"title_latin": "Charadriidae",
"description": "\u0420\u0436\u0430\u0301\u043d\u043a\u043e\u0432\u044b\u0435 (\u043b\u0430\u0442. Charadriidae) \u2014 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u043f\u0442\u0438\u0446 \u0438\u0437 \u043e\u0442\u0440\u044f\u0434\u0430 \u0440\u0436\u0430\u043d\u043a\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0445 (Charadriiformes). \u041a \u043d\u0435\u043c\u0443 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u043d\u043e\u0433\u0438\u0435 \u0432\u0430\u0442\u0442\u043e\u0432\u044b\u0435 \u043f\u0442\u0438\u0446\u044b \u043c\u0430\u043b\u043e\u0439 \u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b, \u0436\u0438\u0432\u0443\u0449\u0438\u0435 \u043d\u0430 \u043c\u0435\u043b\u043a\u043e\u0432\u043e\u0434\u044c\u0435. \u0414\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u0440\u0436\u0430\u043d\u043a\u043e\u0432\u044b\u0445 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0435\u043d \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439, \u0443\u0442\u043e\u043b\u0449\u0451\u043d\u043d\u044b\u0439 \u043d\u0430 \u043a\u043e\u043d\u0447\u0438\u043a\u0435 \u043a\u043b\u044e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d\u0438 \u043a\u043b\u044e\u044e\u0442 \u043f\u0438\u0449\u0443 \u0441 \u0437\u0435\u043c\u043b\u0438. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0440\u0436\u0430\u043d\u043a\u043e\u0432\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043f\u043e\u0434\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0443 Vanellinae.",
"bird_order": {
"id": 1,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "\u0420\u0436\u0430\u043d\u043a\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435",
"title_latin": "Charadriiformes",
"description": "\u0420\u0436\u0430\u043d\u043a\u043e\u043e\u0431\u0440\u0430\u0301\u0437\u043d\u044b\u0435 (\u043b\u0430\u0442. Charadriiformes) \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043e\u0442\u0440\u044f\u0434\u043e\u0432 \u0432\u043e\u0434\u043d\u044b\u0445 \u0438 \u043e\u043a\u043e\u043b\u043e\u0432\u043e\u0434\u043d\u044b\u0445 \u043f\u0442\u0438\u0446, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u0441\u0451\u043c \u043c\u0438\u0440\u0435 \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u0430\u043a \u043c\u043e\u0440\u0444\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438, \u0442\u0430\u043a \u0438 \u043f\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u043c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c. \u041f\u0442\u0438\u0446\u044b \u043e\u0442 \u043c\u0435\u043b\u043a\u043e\u0433\u043e \u0434\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0438\u0445 \u043c\u0430\u0441\u0441\u0430 \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u0435\u0442 \u043e\u0442 19\u201430 \u0433 \u0443 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u043a\u0430-\u043a\u0440\u043e\u0448\u043a\u0438 (Calidris minutilla) \u0434\u043e 1,3\u20142 \u043a\u0433 \u0443 \u043c\u043e\u0440\u0441\u043a\u043e\u0439 \u0447\u0430\u0439\u043a\u0438 (Larus marinus). \u0421\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043a\u043e\u043b\u043e\u043d\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0442\u0438\u0446\u044b (\u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0442\u0438\u0440\u043a\u0443\u0448\u043a\u043e\u0432\u044b\u0435), \u0442\u0430\u043a \u0438 \u0436\u0438\u0432\u0443\u0449\u0438\u0435 \u043e\u0431\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u043b\u0438\u0442-\u043e\u0442\u0448\u0435\u043b\u044c\u043d\u0438\u043a (Tringa solitaria)). \u041f\u043e\u043b\u044f\u0440\u043d\u0430\u044f \u043a\u0440\u0430\u0447\u043a\u0430 (Sterna paradisaea) \u043c\u0438\u0433\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 28 \u0442\u044b\u0441. \u043a\u043c \u043c\u0435\u0436\u0434\u0443 \u043e\u0441\u0442\u0440\u043e\u0432\u0430\u043c\u0438 \u0421\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u041b\u0435\u0434\u043e\u0432\u0438\u0442\u043e\u0433\u043e \u043e\u043a\u0435\u0430\u043d\u0430 \u0438 \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u0435\u043c \u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0434\u044b, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0433\u043e\u0440\u043d\u044b\u0439 \u0434\u0443\u043f\u0435\u043b\u044c (Gallinago solitaria) \u0436\u0438\u0432\u0451\u0442 \u043e\u0441\u0435\u0434\u043b\u043e."
}
}
},
"species_population_status": {
"id": 2,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "\u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u0438\u0439",
"description": "\u0412\u0438\u0434 \u0431\u044b\u043b \u0432\u0441\u0442\u0440\u0435\u0447\u0435\u043d 1-5 \u0440\u0430\u0437 \u0437\u0430 \u0432\u0441\u0435 \u0433\u043e\u0434\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439."
},
"species_statuses": [
{
"id": 1,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "\u0437\u0430\u043b\u0451\u0442\u043d\u044b\u0439",
"description": null,
"pivot": {
"bird_species_id": 12,
"species_status_id": 1,
"created_at": "2025-01-15T18:30:58.000000Z",
"updated_at": "2025-01-15T18:30:58.000000Z"
}
},
{
"id": 2,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "\u0433\u043d\u0435\u0437\u0434\u044f\u0449\u0438\u0439\u0441\u044f",
"description": null,
"pivot": {
"bird_species_id": 12,
"species_status_id": 2,
"created_at": "2025-01-15T18:30:58.000000Z",
"updated_at": "2025-01-15T18:30:58.000000Z"
}
},
{
"id": 3,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "\u0440\u0435\u0434\u043a\u0438\u0439",
"description": null,
"pivot": {
"bird_species_id": 12,
"species_status_id": 3,
"created_at": "2025-01-15T18:30:58.000000Z",
"updated_at": "2025-01-15T18:30:58.000000Z"
}
}
]
}
}
Результат выполнения запроса:
HTTP/1.1 401 Unauthorized
Date: Wed, 15 Jan 2025 18:33:21 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "Unauthenticated."
}
Результат выполнения запроса:
HTTP/1.1 403 Forbidden
Date: Wed, 15 Jan 2025 18:33:54 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "This action is unauthorized."
}
Результат выполнения запроса:
HTTP/1.1 422 Unprocessable Content
Date: Wed, 15 Jan 2025 18:41:46 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "The title field is required. (and 1 more error)",
"errors": {
"title": [
"The title field is required."
],
"title_latin": [
"The title latin has already been taken."
]
}
}
Запрос:
GET http://siberiabirds.local/api/user-roles HTTP/1.1
Пример тела запроса:
Accept: application/json
Authorization: Bearer 2|jPcKnPARV7NaMlt8Bn6NfGocHvg6GCf38rQy0W6Q86321ff7
Результат выполнения запроса:
HTTP/1.1 200 OK
Date: Wed, 15 Jan 2025 18:47:33 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"data": [
{
"id": 1,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "admin"
},
{
"id": 2,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "tutor"
},
{
"id": 3,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "agent"
},
{
"id": 4,
"created_at": "2025-01-15T18:08:54.000000Z",
"updated_at": "2025-01-15T18:08:54.000000Z",
"title": "test role"
}
]
}
Запрос:
GET http://siberiabirds.local/api/user-roles/1 HTTP/1.1
Пример тела запроса:
Accept: application/json
Authorization: Bearer 2|jPcKnPARV7NaMlt8Bn6NfGocHvg6GCf38rQy0W6Q86321ff7
Результат выполнения запроса:
HTTP/1.1 200 OK
Date: Wed, 15 Jan 2025 18:49:51 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"data": {
"id": 1,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T15:55:17.000000Z",
"title": "admin"
}
}
Результат выполнения запроса:
HTTP/1.1 401 Unauthorized
Date: Wed, 15 Jan 2025 18:51:53 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "Unauthenticated."
}
Результат выполнения запроса:
HTTP/1.1 404 Not Found
Date: Wed, 15 Jan 2025 19:16:27 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "No query results for model [App\\Models\\UserRole] 101"
}
Запрос:
PUT http://siberiabirds.local/api/bird-orders/edit/1 HTTP/1.1
Пример тела запроса:
Accept: application/json
Content-Type: application/json
Authorization: Bearer 4|52w9ueqDYXSWHPQLkgT5qAquuW5qPIO4jkIiIRa0e505e87d
{
"title": "Аистообразные",
"title_latin": "Ciconiiformes",
"description": "Аистообра́зные, или голена́стые (лат. Ciconiiformes); в старом, нетипифицированном латинском написании научных названий — Gressores и Grallatores), — отряд новонёбных птиц, охватывающий по разным классификациям одно или несколько семейств."
}
Результат выполнения запроса:
HTTP/1.1 200 OK
Date: Wed, 15 Jan 2025 18:56:58 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "Bird order updated successfully.",
"data": {
"id": 1,
"created_at": "2025-01-15T15:55:17.000000Z",
"updated_at": "2025-01-15T18:56:58.000000Z",
"title": "\u0410\u0438\u0441\u0442\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435",
"title_latin": "Ciconiiformes",
"description": "\u0410\u0438\u0441\u0442\u043e\u043e\u0431\u0440\u0430\u0301\u0437\u043d\u044b\u0435, \u0438\u043b\u0438 \u0433\u043e\u043b\u0435\u043d\u0430\u0301\u0441\u0442\u044b\u0435 (\u043b\u0430\u0442. Ciconiiformes); \u0432 \u0441\u0442\u0430\u0440\u043e\u043c, \u043d\u0435\u0442\u0438\u043f\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043d\u0430\u0443\u0447\u043d\u044b\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u2014 Gressores \u0438 Grallatores), \u2014 \u043e\u0442\u0440\u044f\u0434 \u043d\u043e\u0432\u043e\u043d\u0451\u0431\u043d\u044b\u0445 \u043f\u0442\u0438\u0446, \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c \u043e\u0434\u043d\u043e \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432."
}
}
Результат выполнения запроса:
HTTP/1.1 401 Unauthorized
Date: Wed, 15 Jan 2025 18:58:20 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "Unauthenticated."
}
Результат выполнения запроса:
HTTP/1.1 403 Forbidden
Date: Wed, 15 Jan 2025 18:58:43 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "This action is unauthorized."
}
Результат выполнения запроса:
HTTP/1.1 404 Not Found
Date: Wed, 15 Jan 2025 19:07:17 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "No query results for model [App\\Models\\BirdOrder] 101"
}
Запрос:
DELETE http://siberiabirds.local/api/species-statuses/delete/1 HTTP/1.1
Тело запроса:
Accept: application/json
Authorization: Bearer 4|52w9ueqDYXSWHPQLkgT5qAquuW5qPIO4jkIiIRa0e505e87d
Результат выполнения запроса:
HTTP/1.1 200 OK
Date: Wed, 15 Jan 2025 19:01:02 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "Species status deleted successfully."
}
Результат выполнения запроса:
HTTP/1.1 401 Unauthorized
Date: Wed, 15 Jan 2025 19:01:36 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "Unauthenticated."
}
Результат выполнения запроса:
HTTP/1.1 403 Forbidden
Date: Wed, 15 Jan 2025 19:02:30 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "This action is unauthorized."
}
Результат выполнения запроса:
HTTP/1.1 404 Not Found
Date: Wed, 15 Jan 2025 19:03:49 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Vary: Authorization
X-Powered-By: PHP/8.2.12
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json
{
"message": "No query results for model [App\\Models\\SpeciesStatus] 1"
}