🌐 Kako sistemi zapravo razgovaraju?
Bilo da korisnik otvara portal u svom pretraživaču, ili backend server - komunicira se sa centralnim registrom preko API-ja, osnovni mehanizam je isti: Klijent-Server arhitektura obavijena preko HTTP protokola.
🏛️ Internet vs Intranet u Javnom Sektoru
U javnoj upravi često se pravi striktna razlika između Interneta i Intraneta, iako koriste apsolutno iste protokole i tehnologije (IP, TCP, HTTP):
- Internet: Javna mreža. Javni portali (npr.
vlada.gov.ba) su izloženi ovdje i svako iz svijeta im može pristupiti. - Intranet (Zatvorena mreža): Privatna infrastruktura (npr. SDT mreža). Serveri
sa osjetljivim bazama podataka fizički nemaju izlaz na globalni internet, čime se hakerima
onemogućava direktan napad. Službenici pristupaju sistemu koristeći lokalne IP adrese (npr.
10.0.x.x).
🌍 DNS (Domain Name System) detaljno
Računari ne prepoznaju slova, oni komuniciraju isključivo pomoću IP adresa (IPv4:
142.250.180.14 ili IPv6: 2607:f8b0::200e).
Stoga, prije nego što "pošalje" zahtjev, softver mora "prevesti" ljudima čitljivo ime domene u IP
adresu.
Traži: iddeea.gov.ba
(Imenik Interneta)
(Aplikacija)
DNS zapisi su presudni za administraciju sistema. Najvažniji su:
- A Record: Povezuje ime domene sa IPv4 adresom (Web stranica).
- CNAME Record: Povezuje jedno ime sa drugim imenom (Alias, npr. `www.porezna.ba` upućuje na `porezna.ba`).
- MX Record: Govori svijetu na koji server trebaju slati Email poruke namijenjene vašoj domeni.
📡 HTTP Protokol: Jezik Weba i APIs
HTTP (HyperText Transfer Protocol) je protokol o baziran na tekstualnim porukama. Svaki "razgovor" se sastoji tačno iz dvije komponente: Request (Zahtjev klijenta) i Response (Odgovor servera).
1. Anatomija HTTP Zahtjeva (Request)
Kada kliknete "Pošalji Zahtjev" na web formi (npr. login), vaš browser generiše i šalje čist tekst prema serveru. On izgleda ovako:
POST /api/zahtjevi/submit HTTP/1.1
Host: api.vlada.gov.ba
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI...
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
{
"jmbg": "1234567890123",
"tipZahtjeva": "IzvodIzMaticneKnjigeRodjenih"
}
Komponente zahtjeva:
- Započna linija (Metoda + Putanja + Verzija): U primjeru iznad,
POSTje metoda,/api/zahtjevi/submitje resurs, aHTTP/1.1je protokol. - Zaglavlja (Headers): Meta-podaci.
Host: Govori serveru koju domenu tražimo (jer server može udomiti stotine domena).Content-Type: Govori serveru u kom formatu šaljemo podatke (čestoapplication/json).Authorization: Sigurnosni token koji dokazuje da smo prijavljeni.
- Tijelo (Body): Stvarni podaci, prisutni uglavnom kod POST, PUT i PATCH metoda. Ovdje je to JSON objekat predat serveru.
Tabela HTTP Metoda
| Metoda | Svrha u CRUD terminologiji | Ima Tijelo (Body)? |
|---|---|---|
| GET | Čitanje/Dohvaćanje podataka (Read) | Ne |
| POST | Kreiranje novog zapisa (Create) | Da |
| PUT / PATCH | Ažuriranje postojećeg zapisa (Update) | Da |
| DELETE | Brisanje zapisa (Delete) | Ne |
2. Anatomija HTTP Odgovora (Response)
Server obrađuje podatke (npr. upiše ih u bazu) i šalje striktno formatiran odgovor nazad klijentu.
HTTP/1.1 201 Created
Date: Mon, 27 Jul 2026 12:28:53 GMT
Content-Type: application/json
Server: Microsoft-IIS/10.0
{
"status": "success",
"brojProtokola": "01-14-1234/26",
"poruka": "Zahtjev je uspješno obrađen."
}
Najvažniji dio odgovora je Statusni Kod, koji jasno ukazuje na uspjeh ili grešku operacije.
Klasifikacija Statusnih Kodova
- 2xx (Uspjeh):
200 OK(Sve u redu),201 Created(Novi resurs je uspješno sačuvan u bazu). - 4xx (Greška na strani Klijenta): Klijent je poslao nešto loše.
400 Bad Request(Poslana polja ne prolaze validaciju),401 Unauthorized(Token je istekao),403 Forbidden(Korisnik nema ovlaštenja da briše tuđi dosije),404 Not Found(Putanja ili dokument u bazi ne postoji). - 5xx (Greška na strani Servera): Klijent je poslao ispravan zahtjev, ali se
server srušio.
500 Internal Server Error(Programski kod je bacio Exception),503 Service Unavailable(Server je preopterećen ili ugašen zbog održavanja).
🔒 HTTPS (HTTP Secure) i Certifikati
Zahtjev prikazan iznad, ukoliko ga šaljemo putem standardnog HTTP-a, prolazi kroz destine rutera na internetu potpuno čitljiv (Plaintext). Hakeri na istoj Wi-Fi mreži ga mogu bez problema pročitati pomoću alata kao što je Wireshark. Zato danas apsolutno moramo koristiti HTTPS, posebno u zdravstvu i javnoj upravi.
HTTPS koristi TLS (Transport Layer Security) protokol. Prije nego što se pošalje ijedan
bit HTTP teksta, Klijent i Server dogovaraju tajni ključ. Cijela poruka se tada kriptuje tom
enkripcijom, i kroz mrežu putuje kao niz neprepoznatljivih znakova (npr. ^&*(#HJB123hj!@#).
Samo pravi server, koji ima tajni ključ dogovoren sa vašim browserom, ga može dekriptovati. Povjerenje
se obezbjeđuje tehničkim garancijama izdatim od strane Certifikacionih Tijela (CA).
💻 Praktičan primjer: C# HttpClient
Kako mi kao programeri na zadnjem kraju (Backend) ili u desktop aplikacijama pozivamo ove servise? U
.NET-u koristimo modernu i robusnu klasu HttpClient:
using System.Net.Http;
using System.Text.Json;
// HttpClientFactory je best practice u ASP.NET Core-u
public class PorezniServis
{
private readonly HttpClient _client;
public PorezniServis(HttpClient client)
{
_client = client;
_client.BaseAddress = new Uri("https://api.porezna.gov.ba");
// Dodajemo Security Header za svaki zahtjev
_client.DefaultRequestHeaders.Add("Authorization", "Bearer mY_S3cr3t_T0k3n");
}
public async Task<Obveznik> DohvatiPoreznogObveznika(string jmbg)
{
// 1. Šaljemo HTTP GET Request na endpoint /api/obveznici/123456...
HttpResponseMessage response = await _client.GetAsync($"/api/obveznici/{jmbg}");
// 2. Ako server vrati HTTP 404 ili 500, baci Exception!
response.EnsureSuccessStatusCode();
// 3. Pročitaj tijelo odgovora kao string (JSON podaci)
string jsonBody = await response.Content.ReadAsStringAsync();
// 4. Pretvori JSON string nazad u C# objekat "Obveznik"
return JsonSerializer.Deserialize<Obveznik>(jsonBody);
}
}