morto
@morto
вечный ученик

Как сделать свой REST API?

Здравствуйте, надо сделать свой сервис API на PHP, у которого будет функционал доступа к данным в стиле REST. Используя базу данных.

Что бы работало вот так:

GET /api/games/ - список игрушек

GET /api/game/12345/ – информация о игрушке

POST /api/games/ + JSON – добавить новую игрушку

PUT /api/games/12345/ + JSON – обновить существующую игрушку

DELETE /api/games/12345/ – удалить игрушку

Данные возвращаются в JSON, с использованием как можно большего количества HTTP-статусов. Можно использовать готовые решения через composer.

Как сделать описанное мною выше, умею только получать JSON с помощью ajax, а вот как сделать свою, понятия не имею от слова совсем. Желательно какой-нибудь простенький пример с объяснениями или ссылочку где это всё простенько объясняется, опять же с примерами где все максимально понятно и просто или на вашем примере Т.к. в этом деле новичок.
  • Вопрос задан
  • 3011 просмотров
Решения вопроса 4
VlasenkoFedor
@VlasenkoFedor
Программист: php, js, go
index.php
<?php
# Author - Fedor Vlasenko, vlasenkofedor@gmail.com
define('METHOD', $_SERVER['REQUEST_METHOD']);
define('URI', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));

function router($url, ...$args)
{
    (empty($args[1]) || false !== strpos(METHOD, $args[0]))
    && (URI === $url || preg_match('#^' . $url . '$#iu', URI, $match))
    && die(call_user_func_array(end($args), $match ?? []));
}

router('/api/games', 'GET', function () {
    echo 'список игрушек';
});

router('/api/game/(\d+)', 'GET', function (...$args) {
    echo 'информация о игрушке: ', $args[1];
});

router('/api/games', 'POST', function () {
    echo 'добавить новую игрушку';
});

router('/api/games/(\d+)', 'PUT', function (...$args) {
    echo 'обновить существующую игрушку: ', $args[1];
});

router('/api/games/(\d+)', 'DELETE', function (...$args) {
    echo ' удалить игрушку: ', $args[1];
});

header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
echo '404';

далее в консоли запускаем встроенный php сервер
php -S localhost:8000 index.php
тестируем и наслаждаемся :-)
Ответ написан
@Kirill-Gorelov
С ума с IT
www.slimframework.com готовое решение.
Ставиться за 5 минут.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
GET /api/games/
POST /api/games/12345
PUT /api/games/12345/
DELETE /api/games/12345/

папки и файлы
var/www/html/config.php - конфиг базы и прочее
var/www/html/api/games/index.php - ваше api
<?php
$method = $_SERVER['REQUEST_METHOD'];
$request = explode("/", substr(@$_SERVER['PATH_INFO'], 1));

switch ($method) {
  case 'PUT':
    do_something_with_put($request);  
    break;
  case 'POST':
    do_something_with_post($request);  
    break;
  case 'GET':
    do_something_with_get($request);  
    break;
  default:
    handle_error($request);  
    break;
}
Ответ написан
@Ibishka
<?php
// Headers
header('Access-Control-Allow-Origin: http://localhost:3000');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: *');
header('Content-Type: application/json');
// Connect to db
$connect = mysqli_connect('localhost', 'root', 'root', 'f-mania');
// If connect error
if (!$connect) {
  echo mysqli_connect_error();
  die();
}
// Split url into array
$params = explode('/', $_GET['url']);

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
  if ($params[0] == 'account') {
   // ...
  }
} elseif ($_SERVER['REQUEST_METHOD'] == 'POST') {
  if ($params[0] == 'account') {
    if ($params[1] == 'login') {
   // ...
    } elseif ($params[1] == 'recover') {
   // ...
    } elseif ($params[1] == 'reset') {
   // ...
    } elseif ($params[1] == 'register') {
   // ...
    }
  }
} elseif ($_SERVER['REQUEST_METHOD'] == 'PUT') {
   // ...
} elseif ($_SERVER['REQUEST_METHOD'] == 'DELETE') {
   // ...
}

.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-F
RewriteRule ^(.+)$ index.php?url=$1 [L,QSA]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
2ord
@2ord
Проще всего начать с автогенерации кода по спецификации OpenAPI (swagger).
Редактор спецификации онлайн: https://editor.swagger.io/
Ответ написан
Комментировать
@tempick
Как вариант - использовать Yii2 - с помощью него легко делать REST API
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы