Šta je API i kako se razmenjuju podaci (JSON)

Lekcija 6 od 8 · Osnove weba

API (Application Programming Interface) je dogovor o tome kako jedan program traži podatke ili usluge od drugog. Na webu je to skup adresa na serveru koje umesto HTML stranica vraćaju podatke, najčešće u formatu JSON. Preko API-ja rade mobilne aplikacije, vremenske prognoze, mape i plaćanja.

Pre nego što počneš: potrebno predznanje – HTTP protokol, frontend i backend.
Kako da učiš: svaki primer isprobaj u pregledaču ili komandnoj liniji i uradi vežbe iz lekcije. Primeri su u HTML-u, JavaScript-u i Python-u; za većinu je dovoljan pregledač, a za Python primere instaliran Python 3.

API: konobar između frontenda i backenda

U restoranu ne ulaziš u kuhinju – narudžbinu predaješ konobaru prema jelovniku. API je takav jelovnik: piše koje adrese postoje, šta im se šalje i šta vraćaju.

Primer REST API-ja za listu zadataka
ZahtevZnačenjeOdgovor
GET /api/zadacidaj sve zadatkelista zadataka (JSON)
GET /api/zadaci/17daj zadatak broj 17jedan zadatak ili 404
POST /api/zadacinapravi novi zadatak (podaci u telu)201 Created + novi zadatak
PUT /api/zadaci/17izmeni zadatak 17200 OK
DELETE /api/zadaci/17obriši zadatak 17204 No Content

Ovakav stil – adrese su „stvari“ (resursi), a HTTP metode su „radnje“ – zove se REST. Isti backend tako služi i sajtu i mobilnoj aplikaciji.

JSON: format podataka

JSON (JavaScript Object Notation) je tekstualni zapis podataka koji lako čitaju i ljudi i programi:

{
  "ime": "Ana",
  "razred": 7,
  "takmicar": true,
  "rezultati": [100, 85, 92],
  "skola": { "naziv": "OŠ Vuk Karadžić", "grad": "Pančevo" }
}
ElementZapisU Python-uU JavaScript-u
objekat{ "ključ": vrednost }rečnik (dict)objekat
niz[1, 2, 3]listaniz (Array)
tekst"Ana" (obavezno dvostruki navodnici)strstring
broj, logička vrednost, prazno7, true, nullint/float, True, Nonenumber, true, null

Pozivanje API-ja iz JavaScript-a

U pregledaču se API poziva funkcijom fetch. Primer koristi besplatan API za vremensku prognozu Open-Meteo (bez registracije):

<p>Temperatura u Pančevu: <span id="temp">…</span> °C</p>
<script>
  const url = "https://api.open-meteo.com/v1/forecast?latitude=44.87&longitude=20.64&current=temperature_2m";
  fetch(url)                                  // pošalji GET zahtev
    .then(odgovor => odgovor.json())          // pretvori JSON tekst u objekat
    .then(podaci => {
      document.getElementById("temp").textContent = podaci.current.temperature_2m;
    })
    .catch(greska => console.log("Greška:", greska));   // npr. nema interneta
</script>

Otvori F12 → Network → filter Fetch/XHR: videćeš zahtev ka API-ju i JSON odgovor u tabu Response.

Pozivanje API-ja iz Python-a

U Python-u se JSON pretvara u rečnik modulom json, a zahtevi se najčešće šalju bibliotekom requests:

import json

tekst = '{"ime": "Ana", "razred": 7, "rezultati": [100, 85, 92]}'
ucenik = json.loads(tekst)               # JSON tekst -> rečnik
print(ucenik["ime"], ucenik["razred"])
print("prosek:", sum(ucenik["rezultati"]) / len(ucenik["rezultati"]))

ucenik["razred"] = 8
print(json.dumps(ucenik, ensure_ascii=False))   # rečnik -> JSON tekst
import requests                          # instalacija: pip install requests

url = "https://api.open-meteo.com/v1/forecast"
parametri = {"latitude": 44.87, "longitude": 20.64, "current": "temperature_2m"}
odgovor = requests.get(url, params=parametri, timeout=10)
print(odgovor.status_code)               # 200 ako je sve u redu
podaci = odgovor.json()                  # JSON -> rečnik
print(podaci["current"]["temperature_2m"], "°C")

API ključevi i ograničenja

  • Mnogi API-ji traže ključ (API key) – tajni niz znakova po kome znaju ko ih poziva. Ključ se ne objavljuje u kodu na GitHub-u i ne stavlja u frontend.
  • Postoje ograničenja (npr. 1000 zahteva dnevno); posle toga server vraća 429 Too Many Requests.
  • Pregledač ne dozvoljava da stranica sa jednog domena slobodno čita podatke sa drugog, osim ako taj server to izričito dozvoli (pravilo CORS). Zato neki API-ji rade iz Python-a, a iz pregledača ne.
Česte greške i saveti
  • U JSON-u ključevi i tekst moraju biti pod dvostrukim navodnicima, a poslednji element ne sme imati zarez iza sebe.
  • Uvek proveri status odgovora (200, 404, 429…) pre čitanja podataka.
  • API ključ je kao lozinka – ne deli ga i ne stavljaj u JavaScript na stranici.

Proveri znanje

Otvori kviz

API i JSON

1. Šta vraća tipičan web API?




2. Koja metoda u REST API-ju pravi novi zapis?




3. Koja Python funkcija pretvara JSON tekst u rečnik?