REST API i PHP

Der findes specielle tilgange, der standardiserer API for fælles bekvemmelighed for både API-udviklere og dets brugere.

En af sådanne tilgange er REST API. Dens grundlag er ideen om, at for CRUD-operationer er det nødvendigt at bruge forskellige metoder fra HTTP-protokollen.

For at hente data - metoden GET, for at oprette data - metoden POST, for at ændre data - metoden PUT, for at slette data - metoden DELETE.

Lad os som et eksempel betragte et API, der håndterer brugere. Lad os se på, hvordan URL'en vil se ud for forskellige handlinger.

Henter alle brugere:

urlGET http://api.loc/users/

Henter en enkelt bruger ved deres id:

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

Opretter en bruger:

urlPOST http://api.loc/user/

Ændrer en bruger ved deres id:

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

Sletter en bruger ved deres id:

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

Lad os se på, hvordan REST API implementeres i PHP. Der er et vist problem. Faktum er, at både PHP og CURL kun understøtter GET- og POST-metoderne:

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

Derfor bliver vi nødt til at ty til et trick for at implementere REST API. Essensen er, at data i virkeligheden kun vil blive sendt via GET- og POST-metoderne, men vi vil efterligne arbejdet med andre metoder ved hjælp af en brugerdefineret HTTP-header. Lad os kalde den for eksempel HTTP-X-HTTP-METHOD.

Så vil vi være i stand til at få indholdet af denne header på følgende måde:

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

Nu kan vi skrive implementeringen af 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

Implementer REST API for varer i en webshop.

Задание 2

Test virkningen af det implementerede API ved hjælp af CURL-biblioteket.