Kommunikation mellan server och webbsida

Sunday 10 May, 2020

Bild: 2017-09/dsc01062.jpg

Som ni vet programmerar jag en del på fritiden, håller just nu på med en videoapp. Har inget vettigt att skriva om Corona eller ekonomin just nu så jag tänkte tipsa om en metod för att skicka information mellan webbservern (backend) och webbsidan (frontend).

Själv använder jag Ruby/Sinatra, så tipset är anpassat till detta - även om det går att använda andra metoder.

Först måste man ha en server som kan skicka ett Json-objekt till webbsidan. I Sinatra kan man exempelvis skriva följande:

# för att hämta json-hash
get "/jsonobjekt" do
  $messages.to_json
end

där $messages kan vara en hash och to_json är metoden för att översätta en hash i Ruby till ett Json-objekt.

Javascriptbiblioteket JQuery har speciella funktioner för att göra förfrågningar (get eller post). Ett exempel på hur man kan använda en sådan funktion i JQuery är följande:

$("button").click(function(){
  $.get("/jsonobjekt", function(messages, status){
    alert("Messages: " + messages + "\nStatus: " + status);
  });
});

Programraderna säger att när man klickar på en knapp på sidan ska denna göra en förfrågan till servern och hämta in Json-objektet messages till webbsidan. På det här sättet kan man enkelt transportera ett objekt från Ruby (backend) och använda det i frontend.

Objektet messages kommer nu att vara ett Javascriptobjekt och man kan till exempel visa det i en kolumn, utan att behöva ladda om själva sidan - vilket man blir tvungen att göra om man i stället vill låta Ruby/Sinatra visa objektet på traditionellt sätt, med rendering på serversidan.

Det här är en bra metod om man primärt vill föra över data. En annan metod är att skapa hela fragment av webbsidor och ersätta dessa - utan att ladda om sidan. Javascriptbiblioteket Unpoly fungerar väldigt väl med Ruby/Sinatra och gör det möjligt att byta ut tabeller eller andra delar av webbsidor.

Sånt här går förstås också att göra i mer kända Javascriptramverk, som Angular och Vue. Personligen föredrar jag dock att låta logiken i applikationerna ligga på servern och att minimerar koden i frontend. Skälet är att jag tycker det är lättare att bibehålla en logisk struktur i Ruby.

Ju mindre man behöver använda Javascript, desto bättre är principen. Ruby är lättläst, kompakt och möjligt att strukturera så att koden går att läsa när man är klar. Sedan slipper man vara beroende av alltför många ramverk som kan gå sönder och som är beroende av varandra.

Alla håller säkert inte med om detta, men för mig passar den här lösningen väldigt bra och ger en läsbar struktur i projektet.