Введение
К вам обратился директор фирмы по продаже экологически чистых видов транспорта, с просьбой вступить в команду, которая разрабатывает для него интернет-магазин. Интернет-магазин должен быть посредником между его компанией и клиентами – существующими или потенциальными.
От вас требуется написать RESTful API для интернет-магазина, всем остальным будет заниматься другие разработчики из вашей команды.
Функционал интернет-магазина будет разделен на две роли:
● администратор
● гость
Функциональные возможности гостя:
● авторизация
● просмотр записей товаров и комментариев
● комментирование записей товаров
● поиск записей по тегу
Функциональные возможности администратора включают в себя функциональные возможности гостя, а также:
● создание, редактирование и удаление товаров на сайте
● удаление комментариев к записям товаров
Данное задание состоит из одного модуля и рассчитано на 3 часа. Распределите свое время таким образом, чтобы успеть выполнить все поставленные задачи.
описание проекта и задач
API авторизации должен быть доступен POST-запросом на адрес {API}/auth, а также принимать следующие обязательные параметры:
● login
логин администратора
● password
пароль администратора
При успешной авторизации должен возвращаться ответ в следующем виде:
● status code: 200
● status text: Successful authorization
● body:
○ status
true
○ token
bearer-токен для использования API администратора
При безуспешной авторизации или ошибке в запросе должен возвращаться ответ в следующем виде:
● status code: 401
● status text: Invalid authorization data
● body:
○ status
false
○ message
Invalid authorization data
API создания товара должен быть доступен только администратору POST-запросом на адрес {API}/product, а также принимать следующие обязательные параметры:
● title
название товара, не пустой, уникальный
● firm
производитель товара, не пустой
● text
Полный текст описание товара, не пустой
● tags
тэги товара через запятую, не обязательное поле
● image
изображение товара, не пустой, разрешенные форматы: jpg, png. Максимальный размер: 3 мегабайта
При успешном добавлении товара в интернет-магазин должен возвращаться ответ в следующем виде:
● status code: 201
● status text: Successful creation
● body:
○ status
true
○ article_id
уникальный идентификатор товара
После добавления товара изображение должно загружаться на сервер в папку {API}/transport_images.
При безуспешном добавлении товара должен возвращаться ответ в следующем виде:
● status code: 400
● status text: Creating error
● body:
○ status
false
○ message
ассоциативный массив из параметров, которые содержат ошибку. В значении должно быть описание ошибки
Пример ответа при безуспешном добавлении товара:
{
“status”: false,
“message”: {
“title”: “already exists”,
“image”: “invalid file format”
}
}
API редактирования товара должен быть доступен только администратору POST-запросом на адрес {API}/product/< PRODUCT_ID>, а также принимать следующие параметры:
● title
название товара, уникальный
● firm
производитель товара
● text
полный текст описания товара
● tags
тэги товара через запятую
● image
изображение товара, разрешенные форматы: jpg, png. Максимальный размер: 3 мегабайта
При успешном редактировании товара должен возвращаться ответ в следующем виде:
● status code: 201
● status text: Successful creation
● body:
○ status
true
○ post
■ title
название товара
■ datatime
дата и время добавления товара в формате чч:мм дд.мм.гггг (09:10 09.09.2018)
■ firm
производитель товара
■ text
полный текст описания товара
■ tags
массив из тэгов товара ([“tag1”, “tag2”])
■ image
ссылка на изображение товара
При безуспешном добавлении товара должен возвращаться ответ в следующем виде:
● status code: 400
● status text: Editing error
● body:
○ status
false
○ message
ассоциативный массив из параметров, которые содержат ошибку. В значении должно быть описание ошибки
При попытке редактирования несуществующего товара должен возвращаться ответ в следующем виде:
● status code: 404
● status text: Product not found
● body:
○ message
Product not found
API удаления товара должен быть доступен только администратору DELETE-запросом на адрес {API}/product/<PRODUCT_ID>.
При успешном удалении товара должен возвращаться ответ в следующем виде:
● status code: 201
● status text: Successful delete
● body:
○ status
true
При попытке удаления несуществующего товара должен возвращаться ответ в следующем виде:
● status code: 404
● status text: Product not found
● body:
○ message
Product not found
API просмотра товаров интернет-магазина должен быть доступен GET-запросом на адрес {API}/product. Ответ должен содержать массив объектов товаров, содержащие следующие параметры:
● title
название товара
● datatime
дата и время создания товара в формате чч:мм дд.мм.гггг (12:35 06.08.2018)
● firm
производитель товара
● text
полный текст описания товара
● tags
массив из тэгов товара ([“tag1”, “tag2”])
● image
ссылка на изображение товара
Ответ должен иметь status code “200” и status text “List products”.
API просмотра одной записи товара должен быть доступен GET-запросом на адрес {API}/ product/<PRODUCT_ID>.
Ответ должен содержать следующие параметры:
● title
название товара
● datatime
дата и время создания товара в формате чч:мм дд.мм.гггг (09:10 09.09.2018)
● firm
производитель товара
● text
полный текст описания товара
● tags
массив из тэгов товара ([“tag1”, “tag2”])
● image
ссылка на изображение товара
● comments
массив из объектов комментариев содержащие следующие параметры:
○ comment_id
уникальный идентификатор комментария
○ datatime
дата и время в формате чч:мм дд.мм.гггг (09:10 09.09.2018)
○ author
имя автора, если автором комментария является администратор, то параметр содержит текст “admin”
○ comment
текст комментария
Ответ должен иметь status code “200” и status text “View product”.
При попытке просмотра несуществующего товара должен возвращаться ответ в следующем виде:
● status code: 404
● status text: Product not found
● body:
○ message
Product not found
API добавления комментария к товару должен быть доступен POST-запросом на адрес {API}/product/<PRODUCT_ID>/comments и содержать следующие обязательные параметры:
● author
имя комментатора, обязательное только для гостя
● comment
обязательное, максимум 255 символов
При успешном добавлении комментария к товару должен возвращаться ответ в следующем виде:
● status code: 201
● status text: Successful creation
● body:
○ status
true
При безуспешном добавлении комментария к товару должен возвращаться ответ в следующем виде:
● status code: 400
● status text: Creating error
● body:
○ status
false
○ message
ассоциативный массив из параметров, которые содержат ошибку. В значении должно быть описание ошибки
При попытке добавить комментарий к несуществующему товару должен возвращаться ответ в следующем виде:
● status code: 404
● status text: Product not found
● body:
○ message
Product not found
API удаления комментария к товару должен быть доступен только администратору DELETE-запросом на адрес {API}/product/<PRODUCT_ID>/comments/<COMMENT_ID>.
При успешном удалении комментария должен возвращаться ответ в следующем виде:
● status code: 201
● status text: Successful delete
● body:
○ status
true
При попытке удаления комментария к несуществующему товару должен возвращаться ответ в следующем виде:
● status code: 404
● status text: Product not found
● body:
○ message
Product not found
При попытке удаления несуществующего комментария должен возвращаться ответ в следующем виде:
● status code: 404
● status text: Comment not found
● body:
○ message
Comment not found
API поиска товаров по тегу должен быть доступен GET-запросом на адрес {API}/product/tag/<TAG_NAME>.
В ответ должен возвращаться ответ в следующем виде:
● status code: 200
● status text: Found product
● body
массив из объектов товаров, содержащие данный тэг:
○ title
название товара
○ datatime
дата и время создания товара в формате чч:мм дд.мм.гггг (09:10 09.09.2018)
○ firm
производитель товара
○ text
полный текст описания товара
○ tags
массив из тэгов товара ([“tag1”, “tag2”])
○ image
ссылка на изображение товара
Авторизация пользователя при использовании административных функциональных возможностей будет проверяться через bearer-token авторизацию. Т.е. к каждому такому запросу в headers будет дописываться bearer-token:
Authorization: Bearer xxxxxxxx
При безуспешной попытке пройти авторизацию по токену на любой из запросов, который должен быть доступен только администратору, должен возвращаться ответ в следующем виде:
● status code: 401
● status text: Unauthorized
● body:
○ message
Unauthorized
Под {API} подразумевается адрес https://xxx-m1.wsr.ru/api, где xxx - ваш логин.
Логин администратора admin, пароль - orenburg2018.