0%

🌐 REST API

REST API ir viens no galvenajiem veidiem, kā klienta lietotne un serveris apmainās ar datiem. Tas izmanto HTTP pieprasījumus, JSON formātu un skaidrus resursu ceļus, piemēram, /users vai /products/1.

api

Kas ir REST API?

REST (Representational State Transfer) ir arhitektūras stils, kas nosaka, kā serveris sniedz datus un kā klients nosūta pieprasījumus. Visbiežāk izmantotās HTTP metodes ir šādas:

Metode Darbība Piemērs
GETIegūt datusGET /users
POSTIzveidot jaunu ierakstuPOST /users
PUTAtjaunināt visu ierakstuPUT /users/1
PATCHDaļēji atjauninātPATCH /users/1
DELETEDzēst ierakstuDELETE /users/1

✅ Kā tas darbojas?

  • Klients nosūta pieprasījumu uz URL
  • Serveris nosaka, kādu resursu vai darbību pieprasa
  • Serveris atgriež JSON atbildi
  • Klients apstrādā atbildi un parāda to lietotājam

Kā iegūt datus no REST API

Klienta pusē esošs kods, piemēram JavaScript, var nosūtīt HTTP pieprasījumu un saņemt JSON atbildi. Tas ir ļoti izplatīts web izstrādē.

Šeit mēs pieprasām lietotāja datus no publiska API un pēc tam tos apstrādājam JavaScript kodā. Tāpat kā reālajā projektā, arī šeit ir svarīgi pārbaudīt HTTP status kodu un pareizi apstrādāt kļūdas.

Teksts
fetch("https://jsonplaceholder.typicode.com/users/1")
  .then(response => {
      if (!response.ok) throw new Error("Kļūda: " + response.status);
      return response.json();
  })
  .then(data => {
      console.log(data.name);
      console.log(data.email);
      console.log(data.address.city);
  })
  .catch(error => {
      console.error(error);
  });

API pieprasījumi ar PHP

PHP var izmantot cURL vai file_get_contents(), lai saņemtu datus no cita API. Tas ir īpaši noderīgi, ja servera pusē jāiegūst ārējie dati un jāapstrādā tie pirms to parādīšanas mājaslapā.

Ar PHP mēs varam arī nosūtīt POST, PUT vai DELETE pieprasījumus, lai pievienotu, atjauninātu vai dzēstu datus citā sistēmā.

Teksts
<?php
$url = "https://jsonplaceholder.typicode.com/posts/1";
$data = file_get_contents($url);

if ($data === false) {
    die("Neizdevās iegūt datus no API.");
}

$post = json_decode($data, true);

echo "Nosaukums: " . $post["title"] . "<br>";
echo "Saturs: " . $post["body"] . "<br>";
?>

Izveidot savu REST API

REST API ir iespējams izveidot arī pašam. Piemēram, PHP failu var izmantot kā API galapunktu, kas atgriež JSON.

Šajā piemēra failā:

  • GET atgriež visus produktus
  • POST pievieno jaunu produktu
  • atbilde ir JSON, nevis HTML
  • serveris nosūta atbilstošu HTTP status kodu
Teksts
<?php
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Origin: *");

$method = $_SERVER["REQUEST_METHOD"];
$produkti = [
    ["id" => 1, "nosaukums" => "Ābols", "cena" => 0.60],
    ["id" => 2, "nosaukums" => "Bumbieris", "cena" => 1.20],
    ["id" => 3, "nosaukums" => "Ķirsis", "cena" => 2.40],
];

if ($method === "GET") {
    echo json_encode($produkti);
    exit;
}

if ($method === "POST") {
    $dati = json_decode(file_get_contents("php://input"), true);

    if (empty($dati["nosaukums"])) {
        http_response_code(400);
        echo json_encode(["kļūda" => "Nosaukums ir obligāts"]);
        exit;
    }

    $jauns = [
        "id" => rand(100, 999),
        "nosaukums" => $dati["nosaukums"],
        "cena" => $dati["cena"] ?? 0
    ];

    $produkti[] = $jauns;

    http_response_code(201);
    echo json_encode(["ziņojums" => "Produkts pievienots", "dati" => $jauns]);
    exit;
}

http_response_code(405);
echo json_encode(["kļūda" => "Metode nav atļauta"]);
?>

fetch("http://localhost/api.php")
  .then(response => response.json())
  .then(data => console.log(data));

fetch("http://localhost/api.php", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    nosaukums: "Pieskāriena pele",
    cena: 35.50
  })
})
.then(response => response.json())
.then(data => console.log(data));

Praktiski padomi

  • Vienmēr atgrieziet JSON, nevis HTML
  • Ievērojiet HTTP status kodus: 200, 201, 400, 404, 500
  • Izmantojiet drošus datu validējumus un prepared statements
  • Ja API ir aizsargāts, pieprasījumiem pievienojiet autorizācijas galviņu
  • Veiciet validāciju un kļūdu apstrādi jau sākotnēji