Verdens bedste serverside-scripting

En af idéerne bag Happy Hyper er at have et stærkt men kompakt API og samtidig udnytte at frontend-teknologier bliver bedre og bedre og lade mere og mere forretningslogik blive håndteret i klienten.

Ofte er det dog ikke muligt eller ikke en god idé at lade forretningslogik blive afviklet i klienten, typisk pga. en af følgende årsager:

Forretningslogikken er hemmelig.

Dette er en meget almindelig grund, men den burde ikke være så almindelig som den er. Forretningslogik er reélt sjældent hemmelig, men fordi man som udvikler har blandet sikkerhed og andre ting sammen med forretningslogikken, bliver der pludselig et behov for at holde den hemmelig.

Performance

Med et hurtigt og velgennemtænkt API uden komplekse kald, kan man tillade sig at gennemføre flere kald fra klienten end ellers. Alligevel kan der være brugsscenarier hvor man f.eks. har brug for at udføre hundredevis af kald og så kan man ikke forsvare at lade det ske fra klienten. Latency er simpelt hen for stor. Så det er en meget legitim grund til ikke at afvikle forretningslogik i klienten.

Afvikling af javascript på serveren

Med Happy Hyper lover vi man kan bygge hele applikationer kun ved at konfigurere et API og anvende Javascript. Alligevel giver Happy Hyper mulighed for at afvikle forretningslogik på serveren, endda uden at bryde det løfte. Det er nemlig muligt at placere en javascript-fil i en mappe navngivet “server”, hvorefter funktionerne i den javascript-fil kan kaldes via API’et og afvikles serverside.

Funktionerne i javascript-filerne kan modtage indholdet fra API-kaldet og kan også selv hente mere information via API’et og her sker kaldene til API’et direkte på serveren og latency er dermed fuldstændig fjernet.

Nine Circle har udviklet Happy Hyper med .NET Core og gjort brug af den fremragende javascript-fortolker Jint som er udviklet af Sebastien Ros fra Microsoft. Vi har integreret Jint i Happy Hyper og det skuffer ikke. Dog er der nogle punkter hvor det kunne være bedre.

Vores bidrag til Jint

Ofte er det nødvendigt at sammenligne to GUIDS og i javascript er det lige til, men i Jint viste det sig ikke at være så let. Jint er jo udviklet i .NET og Guid er en .NET-klasse. Så når man sammenligner to Guid-objekter i Jint, kigger den på referencen til objektet og ikke værdien. Det vil sige, hvis det er to forskellige Guid-objekter med samme værdi, vil Jint vurdere at det ikke er samme Guid, hvilket er det modsatte af javascript og hvad udvikleren vil forvente.

Vi er vant til at lave workarounds og her var vi på nippet til at behandle guids som strenge i stedet og så var problemet løst. Men da Jint er sådan en integreret del af Happy Hyper valgte vi denne gang en anden tilgang. Vi lavede et fork af Jint, løste problemet og præsenterede løsningen for Sebastien Ros. Han tog mod ændringen og lavede en variation i sin egen fork som nu er del af Jint. En rigtig god oplevelse, både at få en god løsning på et aktuelt problem og samtidig give lidt tilbage til Open Source-miljøet.

2017-10-16T15:54:43+00:00