Skip to content

brzhezinskiy/api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published