REST API i PHP

Det finnes spesielle tilnærminger som standardiserer API for felles bekvemmelighet for både utviklere av API, og dets brukere.

En slik tilnærming er REST API. Grunnideen er at for CRUD-operasjoner er det nødvendig å bruke ulike metoder fra HTTP-protokollen.

For å hente data - GET-metoden, for å opprette data - POST-metoden, for å endre data - PUT-metoden, for å slette data - DELETE-metoden.

La oss som et eksempel se på et API som manipulerer brukere. La oss se på hvordan URL-ene vil se ut for ulike handlinger.

Henter alle brukere:

urlGET http://api.loc/users/

Henter en bruker ved hans id:

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

Oppretter en bruker:

urlPOST http://api.loc/user/

Endrer en bruker ved hans id:

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

Sletter en bruker ved hans id:

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

La oss se på hvordan REST API implementeres i PHP. Det er et visst problem her. Saken er at både PHP og CURL kun støtter GET- og POST-metodene:

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

Derfor, for å implementere REST API, må man bruke et lurt triks. Essensen er at i virkeligheten vil data bare bli sendt med GET- og POST-metodene, men vi vil etterligne arbeidet til andre metoder ved hjelp av en tilpasset HTTP-header. La oss kalle den, for eksempel, HTTP-X-HTTP-METHOD.

Da kan vi få innholdet i denne headeren som følger:

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

Nå kan vi skrive implementeringen 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

Implementer REST API for produkter i en nettbutikk.

Задание 2

Test funksjonaliteten til det implementerte API-et ved hjelp av CURL-biblioteket.