REST API in PHP

Esistono approcci speciali che standardizzano le API per la comodità generale sia degli sviluppatori delle API, sia dei loro utenti.

Uno di questi approcci è REST API. La sua idea fondamentale è che per le operazioni CRUD è necessario utilizzare vari metodi del protocollo HTTP.

Per ottenere dati - il metodo GET, per creare dati - il metodo POST, per modificare dati - il metodo PUT, per eliminare dati - il metodo DELETE.

Ad esempio, consideriamo una certa API che manipola gli utenti. Diamo un'occhiata a come appariranno gli URL per varie azioni.

Ottenere tutti gli utenti:

urlGET http://api.loc/users/

Ottenere un utente tramite il suo id:

urlGET http://api.loc/user/1/

Creare un utente:

urlPOST http://api.loc/user/

Modificare un utente tramite il suo id:

urlPUT http://api.loc/user/1/

Eliminare un utente tramite il suo id:

urlDELETE http://api.loc/user/1/

Diamo un'occhiata a come REST API viene implementato in PHP. C'è un piccolo problema qui. Il fatto è che sia PHP che CURL supportano solo i metodi GET e POST:

api.loc/index.php<?php
  $method = $_SERVER['REQUEST_METHOD'];
  var_dump($method); // solo GET e POST
?>

Pertanto, per implementare REST API, dovremo ricorrere a un trucco. L'essenza di questo trucco è che in realtà i dati verranno trasmessi solo tramite i metodi GET e POST, ma noi simuleremo il funzionamento di altri metodi tramite un'intestazione HTTP personalizzata. Chiamiamola, ad esempio, HTTP-X-HTTP-METHOD.

Quindi potremo ottenere il contenuto di questa intestazione nel modo seguente:

api.loc/index.php<?php
  $method = $_SERVER['HTTP-X-HTTP-METHOD'];
?>

Ora possiamo scrivere l'implementazione dell'API:

api.loc/index.php<?php
  $method = $_SERVER['HTTP-X-HTTP-METHOD'];
  
  switch ($method)  {
    case 'GET':
      // ...
    break;
    case 'POST':
      // ...
    break;
    case 'PUT':
      // ...
    break;
    case 'DELETE':
      // ...
    break;
  }
?>
Задание 1

Implementare una REST API per i prodotti di un negozio online.

Задание 2

Verificare il funzionamento dell'API implementata utilizzando la libreria CURL.