Kommunikation mellan server och webbsida
Sunday 10 May, 2020
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.
Så röstades den nya pandemilagen igenom. I princip bra, enligt min mening - men oklart vad som …
Vad lär vi oss av gårdagens händelser i USA? Jag tycker det är intressant att gränsen mellan att …
Som första medium har Den hälsosamme ekonomisten fått veta vilket Dan Eliassons nya uppdrag …
Noterar att den nya virusvarianten har fått en ganska stor spridning i Danmark . Enligt en mätning …
Vid midnatt gick England in i en hård lockdown. Det har gått lite inflation i ordet "lockdown". …