REST API PHP:ssä

On olemassa erityisiä lähestymistapoja, jotka standardoivat API:n yleiseksi hyödyksi sekä API:n kehittäjille että sen käyttäjille.

Yksi tällainen lähestymistapa on REST API. Sen perustana on ajatus, että CRUD-toimintoja varten on tarpeen käyttää erilaisia HTTP-protokollan metodeja.

Datan hakemiseen - GET-metodi, datan luomiseen - POST-metodi, datan muokkaamiseen - PUT-metodi, datan poistamiseen - DELETE-metodi.

Esimerkkinä tarkastellaan jotakin API:ta, joka manipuloi käyttäjiä. Katsotaan, miltekä URL-osoitteet eri toiminnoille näyttävät.

Haetaan kaikki käyttäjät:

urlGET http://api.loc/users/

Haetaan yksi käyttäjä hänen id:nsä perusteella:

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

Luodaan käyttäjä:

urlPOST http://api.loc/user/

Muokataan käyttäjää hänen id:nsä perusteella:

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

Poistetaan käyttäjä hänen id:nsä perusteella:

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

Katsotaan, miten REST API toteutetaan PHP:ssä. Tässä on jonkin verran ongelmaa. Asia on siinä, että sekä PHP että CURL tukevat vain GET- ja POST-metodeja:

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

Sen vuoksi REST API:n toteuttamiseksi täytyy käyttää oveluutta. Sen ydin on siinä, että todellisuudessa data välitetään vain GET- ja POST-metodeilla, mutta me simuloimme muiden metodien toimintaa käyttämällä mukautettua HTTP-otsaketta. Kutsukaamme sitä esimerkiksi HTTP-X-HTTP-METHOD:ksi.

Silloin voimme saada tämän otsakkeen sisällön seuraavasti:

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

Nyt voimme kirjoittaa API:n toteutuksen:

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

Toteuta verkkokaupan tuotteiden REST API.

Задание 2

Testaa toteutetun API:n toimintaa CURL-kirjaston avulla.