Web API 2 Integracija

Modul 8 - Lekcija 2

Web API kontroleri, JSON Komunikacija, i Open Data REST portali

⏱️ Trajanje: ~3 časa | 📚 Nivo: Srednji | 🎯 Praktični primjeri: 5

📖 Zašto API i "Otvoreni Podaci"

Dok obični MVC Ponaša vraća teški HTML Grafički Interfejs svojim klijentima, ASP.NET Web API 2 ima zadatak rješavanja moderne "Service Oriented Architecture" vraćajući isključivo sirove JSON (mašinski-čitljive) podatkovne nizove za potrebe razmjene informacija!

Javna uprava i Open Data

Web API idealan je za sprovedbu "Open Data" servisa. Preko API EndPoint servisa vi slobodno otvarate prozor vašeg SQL Servera (Npr Baze Javnih Nabavki Ministarstava) cijelom svijetu nebi li Programeri van vaše institucije izrađivali vlastite SPA Aplikacije i analizirali te JSON nizove!

Mobile App React/Vue (SPA) Eksterni Portal HTTP/JSON Web API 2 SQL DB

🎯 Rest API Kontroler

ApiController bazna klasa ključna je specifičnost ovog formata! API Metode koristeći RoutePrefix i Attribute Routing definišu tačan Web Link kojem će klijent priopćiti HTTP METODU (GET/POST/PUT/DELETE)

using System.Web.Http; // Zasebna linija

[RoutePrefix("api/otvoreni-podaci")] // Bazni Prefix Ruta za klase
public class OgraniceniPodatciController : ApiController
{
    private ApplicationDbContext db = new ApplicationDbContext();

    // /api/otvoreni-podaci/spisak
    [HttpGet]
    [Route("spisak")]
    public IHttpActionResult PreuzmiJavneUstanove()
    {
        // Pazite sta vracate! Vracamo anonimnu C# klasu limitiranih Parametara da sakrijemo ID / Sifre
        var selekcije = db.Ustanove.Select(u => new { 
                Sifra = u.DepCode, 
                Naziv = u.Naziv 
            }).ToList();

        return Ok(selekcije); // Vraća status 200 i konvertovan čitavi niz objekata u JSON Stranični Array!!
    }
}

📡 Komunikacija klijenta (Trokut: Controller - Baza - Javascript ReactKlijent)

Javascript sa neke druge strane domene spaja se (konzumira) vašeg otvorenog API Controllera na isti JQUERY ajax način koji smo prikazivali unutar custom asinkronog podizanja u prethodnoj lekciji!

$(document).ready(function() {
    $('#btnSkidajPodatke').click(function() {
        $.ajax({
            url: '/api/otvoreni-podaci/spisak', // Adresa Navedenog Controllera (REST endpoint)
            type: 'GET',
            dataType: 'json', // JSON formiranje ocekivamo
            success: function(pruzetiNiz) {
                
                // For petlja Javascripta (Each) koja generira Tabbularne HTML prostore sa JSON Nizom Data Objekata (pruzetiNiz)
                $.each(pruzetiNiz, function(brojacIndex, rowPodatak) {
                    var novHtmlTrElement = '<tr><td>' + rowPodatak.Sifra + '</td><td>' + rowPodatak.Naziv + '</td></tr>';
                    $('#htmlTabelaRezultata').append(novHtmlTrElement);
                });
            }
        });
    });
});

⚙️ Konfiguracioni Setupi (WebApiConfig.cs)

U App_Start/WebApiConfig.cs mi postavljamo opsta generalna pravila ponašanja svih API Controllera koji se oslanjanju na ovu instancu (Zahtjev za CamelCase imenovanja i blokada XML konverzija).

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // OBAVEZNO paljenje atributerskog routinga
        config.MapHttpAttributeRoutes();

        // Ovo ce forsirano ukinuti mogunost da API pokusa vratiti sirovi glomazni XML 
        // već forsira da JSON postane univerzalni jedini kominukacioni jeziki aplikacije!
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        
        // C# koristi UpperCase nazive Veličina (Sifra) dok Javascript JS (sifra).
        // Ovaj Formatter konvertuje Imena objekata prilagođene Klijentima koji troše podatke (javascriptovima) : camelCase!
        var jsonFmt = config.Formatters.JsonFormatter;
        jsonFmt.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    }
}

✅ Zaključak

  • ASP.NET Web API dizajniran je isključivo za laganu JSON komunikacijsku tranziciju podataka prema modernim aplikacijama i front-end okvirima.
  • ✅ Nasljeđivanje ApiController osigurava dostupavanje API Response formata (Ok(), NotFound()..) i HTTP Orijentiri (GET/POST)
  • ✅ Uvijek koristite ručno mapiranje varijabli koristeći LINQ "Select" upite kako u svojoj nesvjesti nebi izručili kompletne baze podataka sa ličnim siframa, JMBG-ovima i ostalim sigurnosti rizičnim datotekama direktno u mrežu na nečiji tuđi Javascript (Open Data Security Rule No. 1)!