 
                
  Moderní webové aplikace nejsou jen statické stránky. Díky propojení backendu s frontendem pomocí AJAX a REST API můžeme vytvářet dynamická uživatelská rozhraní, která načítají a odesílají data bez nutnosti obnovy stránky. V tomto článku si ukážeme, jak efektivně integrovat Java REST služby s frontendem pomocí JavaScriptu.
AJAX (Asynchronous JavaScript and XML) umožňuje komunikaci s backendem na pozadí. Nejjednodušší způsob je využití funkce fetch():
fetch('http://localhost:8080/api/products')
  .then(response => response.json())
  .then(data => {
    console.log(data);
  })
  .catch(error => console.error('Chyba:', error));
  
  Alternativně lze použít XMLHttpRequest pro větší kompatibilitu, ale fetch() je dnes preferovaným řešením.
Po načtení dat ve formátu JSON můžeme pomocí JavaScriptu dynamicky generovat HTML strukturu. Například tabulku:
fetch('/api/products')
  .then(res => res.json())
  .then(products => {
    let table = '<table><tr><th>ID</th><th>Název</th><th>Cena</th></tr>';
    products.forEach(p => {
      table += `<tr><td>${p.id}</td><td>${p.name}</td><td>${p.price}</td></tr>`;
    });
    table += '</table>';
    document.getElementById('productTable').innerHTML = table;
  });
  
  Pro vizualizaci dat lze využít i knihovny jako Chart.js nebo Google Charts.
Pokud potřebujeme odeslat formulářová data na server (např. nový produkt), použijeme:
document.getElementById('productForm').addEventListener('submit', function(e) {
  e.preventDefault();
  const data = {
    name: document.getElementById('name').value,
    price: document.getElementById('price').value
  };
  fetch('/api/products', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
  })
  .then(res => res.json())
  .then(response => alert('Produkt byl přidán'))
  .catch(error => console.error('Chyba:', error));
});
  
  Nezapomeňte implementovat validaci – jak na straně klienta, tak i na serveru, aby byla data konzistentní a bezpečná.
Při chráněném API musíte odesílat autentizační token v hlavičce požadavku:
fetch('/api/products', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + localStorage.getItem('token')
  }
});
  
  Token lze uložit do localStorage nebo sessionStorage a používat ho ve všech požadavcích. Vždy používejte HTTPS a zabraňte XSS útokům.
Chybové stavy je nutné správně ošetřit, aby uživatel nebyl zaskočen:
fetch('/api/products')
  .then(response => {
    if (!response.ok) {
      throw new Error('Chyba HTTP: ' + response.status);
    }
    return response.json();
  })
  .then(data => { /* práce s daty */ })
  .catch(error => {
    console.error('Došlo k chybě:', error.message);
    alert('Nastala chyba při komunikaci se serverem.');
  });
  
  Používejte status kódy (např. 400, 401, 403, 500) k informování klienta o problémoch a logujte chyby i na backendu.
AJAX a REST sú silnou kombinací pro tvorbu moderních aplikací. Umožňují vytvářet plynulé rozhrania a okamžité reakce na vstupy používateľov. Porozumění ich vzájomnému prepojeniu vám umožní tvoriť robustné a profesionálne aplikácie.
Všechny tyto postupy si můžete prakticky vyzkoušet v kurzu Java REST služby s Hibernate a JPA, kde se naučíte, jak vytvořit propojený frontend a backend v Java EE.
Viac informacií preberáme na kurze:
