REST API i PHP

Det finns speciella tillvägagångssätt som standardiserar API:er för gemensam bekvämlighet för både utvecklare av API:et och dess användare.

Ett sådant tillvägagångssätt är REST API. Dess grundidé är att för CRUD-operationer bör man använda olika metoder från HTTP-protokollet.

För att hämta data - metoden GET, för att skapa data - metoden POST, för att ändra data - metoden PUT, för att ta bort data - metoden DELETE.

Låt oss som exempel betrakta ett API som manipulerar användare. Låt oss se hur URL:en kommer att se ut för olika åtgärder.

Hämtar alla användare:

urlGET http://api.loc/users/

Hämtar en användare efter deras id:

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

Skapar en användare:

urlPOST http://api.loc/user/

Ändrar en användare efter deras id:

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

Tar bort en användare efter deras id:

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

Låt oss se hur REST API implementeras i PHP. Det finns ett visst problem här. Saken är den att både PHP och CURL endast stöder metoderna GET och POST:

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

Därför måste man ta till en knep för att implementera REST API. Tricket går ut på att i verkligheten kommer data att skickas endast med metoderna GET och POST, men vi kommer att imitera funktionen av andra metoder med hjälp av en anpassad HTTP-header. Låt oss kalla den, till exempel, HTTP-X-HTTP-METHOD.

Då kan vi få innehållet i denna header på följande sätt:

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

Nu kan vi skriva implementationen av API:et:

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

Implementera ett REST API för produkter i en webbshop.

Задание 2

Testa funktionen hos det implementerade API:et med hjälp av CURL-biblioteket.