UserListAPI
Автор: freecod@mail.ru
Реализация API доступа к информации о пользователях
Установка
---
Клонировать репозиторий в папку web-сервера, создать в ДБ MySQL базу 'users',
импортировать данные из дампа users.sql
Прописать пользователя, имеющего доступ к данной БД и его пароль в файле db.php проекта
private $user = "";
private $pass = "";
Тестовое задание (ТЗ к заданию)
---
Реализовать приложение — API для доступа к пользовательским данным через веб. Данные
пользователей хранятся в БД. У каждого пользователя есть nick, login и email.
Функциональность
приложения: 1. Обязательно
— получение списка пользователей по критерию (nick, login, email), GETзапрос
— получение пользователя по id, GETзапрос
— обновление пользователя (изменение ника, email), POSTзапрос
— выбор типа возвращаемых данных (json или xml, по выбору клиентского приложения)
2. Опционально
— доступ к API только авторизованному клиентскому приложению
— кастомные страницы 404й и 500й ошибок
— механизм переключения окружения (development, production)
Дополнительное задание:
Представьте, что суточная нагрузка на приложение составит 5 000 000 хитов.
Опишите предполагаемое окружение и необходимые сервисы, которые
могут понадобиться, чтобы выдержать подобную нагрузку.
Решение задания должно быть в виде репозитория на github, с инструкцией по запуску
и установке. Язык программирования для выполнения задания - PHP.
---
В рамках данного API реализована обязательная часть ТЗ
+ авторизация (на время отладки прописана в index.php)
+ при ошибках редирект и сообщение от api
Дополнительные задачи реализованы в репозитории UserList1
---
Данные запроса могут быть или в _GET, или в _POST (определяется текущий тип запроса)
---
Структура API
---
'format' - задает формат вывода (html, json, xml)
'authorization' - данные для авторизации, массив ('login'=>'', 'pass'=>''),
тестовые данные - test \ test
куки устанавливаются на 1 час
'action' - текущее действие:
'gettable' - получает текущую структуру таблицы и доступных к выборке полей
'get' - получает данные пользователей в соответствии с переданными в параметрах полями
'getbyid' - получает данные пользователя по id
'add' - добавляет пользователя с данными из data (массив вида 'поле'=>'значение')
'update' - обновляет данные пользователя по id данными из data (массив вида 'поле'=>'значение')
'delete' - удаляет пользователя по id
---
формат и имена ПАРАМЕТРОВ задаются в классе Route
формат и имена полей ТАБЛИЦЫ задаются в классе UserModel
---
Структура файлов проекта
---
index.php - точка входа приложения
route.php - класс маршрутизации
auth.php - авторизация (простейшая)
core.php - класс, содержащий логику работы с БД
db.php - класс работы с БД (PDO)
formatter.php - классы форматирования вывода
-
Дополнительные файлы
tests.php - тесты модели
users.sql - sql-дамп таблицы users в базе users, необходимой для работы.
Логика работы
---
В index.php создается экземпляр класса-Singleton Route (route.php), который проверяет авторизацию,
обрабатывает входные параметры (GET или POST в зависимости от запроса).
Route в зависимости от параметра action проверяет необходимые параметры по таблице,
если все в наличии - создает экземпляр UserModel (core.php) и вызывает метод, соответствующий action.
Возвращаемое значение - объект класса-наследника DefaultFormatter (formatter.php), реализующий кастомный
вывод при необходимости, иначе вызываются методы форматирования из родителя.
У полученного объекта вызывается метод, соответсвующий переданному в параметре format.
Полученные данные выводятся.
Ошибки обрабатываются на уровне Route, при этом они форматируются в соответствии с форматом вывода.
Единственная ошибка в виде простого текста - ошибка "неверный формат вывода".
Тестировалось на PHP 5.3
-
Notifications
You must be signed in to change notification settings - Fork 0
brzhezinskiy/api
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published