RESTful API Application. Тестовое задание.

Когда я в первый раз серьезно занимался поиском работы — слал везде свое резюме. Некоторые рекрутеры отвечали, некоторые нет. Некоторые даже давали тестовое задание. Вот об одном из таких заданий я и расскажу.

Требовалось создать простое RESTful API с возможностью обработки только GET и POST запросов. Кстати, здесь хорошо написано о том, что такое RESTful API. Суть задачи: создать API для простого персонального менеджера задач.

Система должна была:

  1. Вывести список всех задач (GET метод)
  2. Вывести список всех тегов (GET метод)
  3. Получить один тег по ID и все его задачи (GET метод)
  4. Получить одну задачу по ID и все ее теги (GET метод)
  5. Возможность добавить новую задачу (POST метод)
  6. Возможность добавить новый тег (POST метод)

Обязательные поля для задачи:

  1. name
  2. description
  3. date of creation

Обязательные поля для тега

  1. name
  2. date of creation

Требования:

  • использование namespaces
  • PHP
  • MySQL
  • все возвращаемые результаты должны быть в формате JSON

Регистрации/авторизации быть не должно. Система должна быть ориентирована на одного (текущего) пользователя. Для реализации можно использовать любые доступные решения (вроде фреймворков) или написать собственное решение.

Вот такое вот было дано задание. На реализацию было отведено до 5 дней.

Поскольку раньше я ничего похожего не делал, то выполнение этого задания началось с поиска информации, что это вообще такое API. В результате изучения и чтения информации я узнал про REST и более подробно познакомился с понятием API. Кстати, очень понравилось API mail.ru.  На его примере многое стало понятно. После получения базовых теоретических знаний, последовал поиск путей решения поставленной задачи.

Первый и как мне показалось, самый простой вариант — самописный фреймворк. Во-первых, самописная система позволит познакомиться с нюансами реализации, а во-вторых, просто потому что изобретать свой велосипед всегда интереснее. К счастью я отказался от этой идеи еще на этапе проектирования системы. Затем снова пошел в интернет в поиске уже готовых решений. В результате определился, что брать за основу буду микро-фреймворк. Какой? Снова поиск. Вариантов было много, иногда даже WordPress и Laravel5 приходили в голову (хоть и не микро и не фреймворк). В итоге выбор пал на Silex.

Почему именно он? Наверное потому что он от создателей Symfony. Дальше надо было понять, как создавать нужные роуты и как вообще возвращать результат в JSON, с которым я также никогда не работал.

Русскоязычной информации было мало и не всегда в нужном объеме. На выручку (так чаще всего) пришел англоязычный сегмент интернета. Цикл статей от этого автора позволил закрыть все пробелы (статья 1, статья 2 и статья 3). Этот парень настолько все хорошо описал, что я понял — выбор был правильным.

В итоге, написанное приложение получило неплохую оценку от технического директора и в сумме с техническим собеседованием мне удалось получить это место.

Также же были комментарии по моей работе. Перечислять их не стану, скажу только, что не забывайте заливать дамп базы 🙂 и везде старайтесь следовать стандарту PSR.