REST API-ն PHP-ում

Գոյություն ունեն հատուկ մոտեցումներ, որոնք ստանդարտացնում են API-ն՝ հանուն ինչպես API-ի մշակողների, այնպես էլ դրա օգտագործողների ընդհանուր հարմարության:

Այդպիսի մոտեցումներից մեկը REST API-ն է: Դրա հիմքում ընկած է այն գաղափարը, որ CRUD գործողությունների համար անհրաժեշտ է օգտագործել HTTP պրոտոկոլի տարբեր մեթոդներ:

Տվյալներ ստանալու համար՝ GET մեթոդ, տվյալներ ստեղծելու համար՝ POST մեթոդ, տվյալներ փոփոխելու համար՝ PUT մեթոդ, տվյալներ ջնջելու համար՝ DELETE մեթոդ:

Օրինակի համար դիտարկենք որոշ API, որը կառավարում է օգտատերերին: Տեսնենք, թե ինչպես կտեսքավորվեն URL-ները տարբեր գործողությունների համար:

Ստանում ենք բոլոր օգտատերերին:

urlGET http://api.loc/users/

Ստանում ենք մեկ օգտատեր նրա id-ով:

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

Ստեղծում ենք օգտատեր:

urlPOST http://api.loc/user/

Փոփոխում ենք օգտատերին նրա id-ով:

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

Ջնջում ենք օգտատերին նրա id-ով:

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

Տեսնենք, թե ինչպես է REST API-ն իրականացվում PHP-ում: Այստեղ կա որոշակի խնդիր: Բանն այն է, որ և PHP-ն, և CURL-ը աջակցում են միայն GET և POST մեթոդները:

api.loc/index.php<?php
  $method = $_SERVER['REQUEST_METHOD'];
  var_dump($method); // միայն GET և POST
?>

Հետևաբար, REST API-ն իրականացնելու համար ստիպված կլինենք դիմել հնարքի: Դրա էությունը կայանում է նրանում, որ իրականում տվյալները կփոխանցվեն միայն GET և POST մեթոդներով, բայց մենք կիմիտացնենք այլ մեթոդների աշխատանքը օգտագործելով հատուկ HTTP վերնագիր: Անվանենք այն, օրինակ, HTTP-X-HTTP-METHOD:

Այդ դեպքում մենք կկարողանանք ստանալ այդ վերնագրի պարունակությունը հետևյալ կերպ.

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

Այժմ մենք կարող ենք գրել API-ի իրականացում.

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

Իրականացրեք ինտերնետ խանութի ապրանքների REST API-ն:

Задание 2

Ստուգեք իրականացված API-ի աշխատանքը CURL գրադարանի օգնությամբ: