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:
GET http://api.loc/users/
Haetaan yksi käyttäjä hänen id:nsä perusteella:
GET http://api.loc/user/1/
Luodaan käyttäjä:
POST http://api.loc/user/
Muokataan käyttäjää hänen id:nsä perusteella:
PUT http://api.loc/user/1/
Poistetaan käyttäjä hänen id:nsä perusteella:
DELETE 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:
<?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:
<?php
$method = $_SERVER['HTTP-X-HTTP-METHOD'];
?>
Nyt voimme kirjoittaa API:n toteutuksen:
<?php
$method = $_SERVER['HTTP-X-HTTP-METHOD'];
switch ($method) {
case 'GET':
// ...
break;
case 'POST':
// ...
break;
case 'PUT':
// ...
break;
case 'DELETE':
// ...
break;
}
?>
Toteuta verkkokaupan tuotteiden REST API.
Testaa toteutetun API:n toimintaa CURL-kirjaston avulla.