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:
GET http://api.loc/users/
Henter en enkelt bruger ved deres id:
GET http://api.loc/user/1/
Opretter en bruger:
POST http://api.loc/user/
Ændrer en bruger ved deres id:
PUT http://api.loc/user/1/
Sletter en bruger ved deres id:
DELETE 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:
<?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:
<?php
$method = $_SERVER['HTTP-X-HTTP-METHOD'];
?>
Nu kan vi skrive implementeringen af API'et:
<?php
$method = $_SERVER['HTTP-X-HTTP-METHOD'];
switch ($method) {
case 'GET':
// ...
break;
case 'POST':
// ...
break;
case 'PUT':
// ...
break;
case 'DELETE':
// ...
break;
}
?>
Implementer REST API for varer i en webshop.
Test virkningen af det implementerede API ved hjælp af CURL-biblioteket.