REST API u PHP-u

Postoje posebni pristupi koji standardizuju API za opštu pogodnost kako programera API-ja, tako i njegovih korisnika.

Jedan od takvih pristupa je REST API. U njegovoj osnovi leži ideja da se za CRUD operacije koriste različite metode HTTP protokola.

Za preuzimanje podataka - metoda GET, za kreiranje podataka - metoda POST, za izmenu podataka - metoda PUT, za brisanje podataka - metoda DELETE.

Za primer, hajde da razmotrimo neki API koji manipuliše korisnicima. Hajde da pogledamo kako će URL izgledati za različite akcije.

Preuzimamo sve korisnike:

urlGET http://api.loc/users/

Preuzimamo jednog korisnika po njegovom id:

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

Kreiramo korisnika:

urlPOST http://api.loc/user/

Menjamo korisnika po njegovom id:

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

Brišemo korisnika po njegovom id:

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

Hajde da pogledamo kako se REST API implementira u PHP-u. Ovde postoji određeni problem. Stvar je u tome što i PHP i CURL podržavaju samo GET i POST metode:

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

Zato ćemo za implementaciju REST API-ja morati da pribegnemo triku. Njegova suština je u tome da će se u stvarnosti podaci slati samo GET i POST metodama, ali mi ćemo oponašati rad drugih metoda pomoću prilagođenog HTTP zaglavlja. Nazvaćemo ga, na primer, HTTP-X-HTTP-METHOD.

Tada ćemo moći da preuzmemo sadržaj ovog zaglavlja na sledeći način:

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

Sada možemo da napišemo implementaciju API-ja:

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

Implementirajte REST API za proizvode internet prodavnice.

Задание 2

Proverite rad implementiranog API-ja pomoću CURL biblioteke.