- Безпечність. Дані для авторизації передаються в headers з допомогою authorization basic .
- Роутинг. Відобразити назву методу в url. Наприклад:
- https://api/login для авторизації
- https://api/register для реєстрації
- Систематизованість. Всі запити мають мати схожу структуру, містити статус відповіді, масив помилок, масив результатів виконання. Всі змінні повинні використовувати _ замість -. Всі назви змінних мають бути англійською мовою, в нижньому регістрі, зрозумілі і без зайвих скорочень. Наприклад result замість res.
- JSON. Масив повинен повертати валідний json.
- Mobile friendly API. Відсутність будь-яких null результатів в видачі, відсутність будь-яких cookie і session змінних в роботі api
- Класи, об’єкти, додаткові бібліотеки і тд розбити на окремі файлі і папки. Важлива ієрархія каталогів.
- Реалізувати окремий конфіг файл (захищений від прямого відкриття) в якому буде підключатись база даних, будуть зберігатись якісь статичні змінні і константи.
Метод передачі даних - POST
Логін передавати в незашифрованому виді.
Пароль передавати в подвійному md5 шифруванні md5(md5($password)
Дані для авторизації передаються в headers з допомогою authorization basic .
Для входу користувач використовує логін (номер телефону або емейл), і пароль.
Так як логіном може бути або телефон або емейл, в апі передбачити пошук по логіну. Типу
SELECT * FROM users WHERE user_phone=$phone OR user_emai=$email AND password=$password
При успішній авторизації в результаті треба вивести код статусу виконання.
{
"status": "200"
}
Наприклад при успіху - 200, при помилці 404, або інший відповідний код. Помилки вивести масивом, якщо їх декілька, або простою змінною якщо помилка одна. Назва помилки повинна бути одним словом, без пробілів, і містити в собі значення помилки. Наприклад якщо невірний пароль то password_wrong, або auth_fail і тд...
{
"status": "404",
"errors": "password_wrong"
}
Якщо помилки відсутні, то не виводити масив помилок і ні в якому разі не повертати в масиві null
email: test_email@gmail.com
phone: +380680091000
password: qwer
Приймаються коментарі по структурі бази даних
Файл | Описание |
---|---|
app/User.php |
модель "Пользователи" |
app/Http/Middleware/BasicAuthenticate.php |
посредник для авторизации auth.basic |
app/Http/Kernel.php |
регистрация посредника auth.basic |
app/Http/Controllers/API/Auth/RegisterController.php |
контроллер для регистрации нового пользователя |
config/user.php |
дефолтные настройки для нового пользователя |
routes/api.php |
API POST-роуты login и register |
Файл | Описание |
---|---|
app/Libs/helpers.php |
набор хелпер-функций, в частности функция test_api для тестирования авторизации и регистрации пользователя |
app/Providers/AppServiceProvider.php |
регистрация хелпера |
routes/web.php |
веб-роуты test/login и test/register для тестирования API |
Отправляем POST-запрос на api/login
существующий логин:пароль test_email@gmail.com:4e40beaf133b47b8b0020881b20ad713
Ответ
{
"status": 200,
"message": "successfully_logged_in"
}
Отправляем POST-запрос на api/login
не существующий логин:пароль test@gmail.com:45454
Ответ
{
"status": 404,
"errors": "auth_fail"
}
Отправляем POST-запрос на api/login
без логина и пароля
Ответ
{
"status": 404,
"errors": {
"login":["login_is_empty"],
"password":["password_is_empty"]
}
}
Отправляем POST-запрос на api/register
c данными:
{
"user_phone": "+380680091088",
"user_email": "test_email5@gmail.com",
"user_password": "qwerty"
}
Ответ
{
"status": 200,
"message": "successfully_registered"
}
Повторно отправляем POST-запрос на api/register
c такими же данными, получаем ответ:
{
"status": 404,
"errors": {
"user_phone":["already_used"],
"user_email":["already_used"]
}
}
Отправляем POST-запрос на api/register
c данными:
{
"user_email": "test_email",
"user_password": "qwer"
}
Ответ
{
"status": 404,
"errors": {
"user_phone":["required_field"],
"user_email":["not_valid"],
"user_password":["too_short"]
}
}