Shopify Functions, per lavorare sulle logiche di backend di Shopify

Indice

Shopify e Shopify Plus continuano a crescere con l'obiettivo di soddisfare le esigenze specifiche di tutti utenti, indipendentemente dalle necessità e dimensioni del business.

Ciò significa che la personalizzazione e la possibilità di sviluppare nuove funzioni. sono fondamentali e costituiscono i principi di base per ogni progetto che coinvolge gli sviluppatori impegnati su Shopify, come ICT Sviluppo. 

Oltre le funzioni out of-the-box

I commercianti ottengono un'ottima esperienza "out-of-the-box" quando si iscrivono a Shopify, ma la loro necessità di personalizzazione aumenta nel tempo, man mano che il loro business cresce o è già una questione complessa fin dall'inizio quando si hanno necessità enterprise.

STOREFRONT API

Per i casi in cui commercianti e i loro sviluppatori vogliono avere il pieno controllo su ogni dettaglio del loro negozio, ci sono la Storefront API: con queste si possono costruire app esterne e collegarsi con le API per portare funzioni su Shopify e integrare i dati con altri software. 

HYDROGEN

Con Hydrogen e Remix, Shopify prova ad aiutare gli sviluppatori a muoversi più velocemente nella necessità di avere progetti altamente customizzati, fornendo le migliori pratiche e strumenti integrati. In breve: gli sviluppatori possono personalizzare il front-end completamente, andando a disaccoppiarlo dal backend e costruire un progetto headless. La personalizzazione totale dell'esperienza utente trova la sua completezza.

METAFIELD

Con i Metafield che hanno un ruolo sempre più centrale nell'ecosistema di Shopify, gli sviluppatori possono salvare e archiviare dati personalizzati nel database (sugli utenti, sugli ordini, sui prodotti, sulle varianti. E qui parliamo della personalizzazione de database, per arricchire i dati e andare verso segmentazioni spinte o richiamare informazioni in frontend.

SHOPIFY FUNCTIONS

Shopify Functions è l'ultimo pezzo del puzzle: gli sviluppatori possono personalizzare il back-end. Le Shopify Functions forniscono un meccanismo per gli sviluppatori per iniettare il loro codice personalizzato ed eseguirlo sui server di Shopify. L'obiettivo a lungo termine è quello di rendere ogni parte del processo del negozio sostituibile con codice personalizzato, offrendo alla piattaforma Shopify una flessibilità senza precedenti senza compromettere la sicurezza o la scalabilità.

La tecnologia chiave qui è WebAssembly (o Wasm per abbreviare). È perfetto, in quanto è progettato per essere un sistema altamente flessibile, sicuro e performante. 
Wasm un formato di istruzioni binarie per una macchina virtuale basata su stack. Wasm è progettato come destinazione di compilazione per linguaggi di programmazione, per consentire la distribuzione sul Web di applicazioni client e server. 

Cos'è WebAssembly

WebAssembly (abbreviato come wasm) è un formato di codice binario per l'esecuzione di programmi ad alte prestazioni all'interno di un browser web. È stato progettato come un target di compilazione per linguaggi di programmazione ad alto livello come C, C++ e Rust, permettendo ai developer di eseguire il loro codice a velocità quasi-native all'interno del browser.

WebAssembly offre una serie di vantaggi rispetto all'utilizzo di JavaScript per l'esecuzione di codice ad alte prestazioni:

  • Performance: Il codice WebAssembly viene eseguito a velocità molto vicine a quelle del codice nativo, grazie alla sua natura a basso livello e ottimizzata per le prestazioni.

  • Portabilità: WebAssembly è progettato per essere indipendente dalla piattaforma e funzionare su diverse architetture e sistemi operativi.

  • Sicurezza: WebAssembly è eseguito all'interno di una sandbox, il che significa che viene isolato dal resto del sistema e non può causare danni involontari.

  • Integrazione con JavaScript: WebAssembly può essere utilizzato insieme a JavaScript per sfruttare le funzionalità e le librerie esistenti nel browser, permettendo un'integrazione più fluida con le applicazioni web.

  • Linguaggi di programmazione supportati: Poiché WebAssembly è un target di compilazione, è possibile utilizzare vari linguaggi di programmazione per scrivere codice che verrà poi eseguito come WebAssembly nel browser.

WebAssembly è supportato dalla maggior parte dei browser moderni, tra cui Google Chrome, Mozilla Firefox, Safari e Microsoft Edge, ed è utilizzato per migliorare le performance di applicazioni web complesse, giochi, simulazioni e altre tipologie di software che richiedono alte prestazioni.

WASM con Shopify, alla base di Shopify Functions

La potente sandbox di Wasm consente a Shopify di eseguire codice "non direttamente sviluppato da Shopify" con sicurezza; le prestazioni prevedibili consentono a Shopify di definire e imporre limiti di risorse rigorosi; oltre a ciò il ricco - ed in continua crescita - ecosistema di linguaggi che si possono utilizzare per Wasm, dà agli sviluppatori una scelta molto ampia su come vogliono scrivere il loro codice, senza barriere e limitazioni tecnologiche.

Ogni funzione che viene eseguita sull'infrastruttura Shopify Functions non è niente di meno e niente di più che un modulo WASI (WebAssembly System Interface, ovvero una interfaccia si sistema per Wasm). 
Non ci sono giochi di specchi, giri del fumo o altre tecnologie speciali.

I moduli Wasm da soli possono fare solo operazioni aritmetiche. Sono completamente in modalità sandbox e viene loro allocato solo un pezzo isolato di memoria con cui lavorare per i loro calcoli. Il sistema host può esporre singole funzioni al modulo Wasm, garantendo un accesso granulare a funzionalità aggiuntive.

WASI è una raccolta standardizzata di tali funzioni e capacità, con l'obiettivo di rendere Wasm utile al di fuori del browser.

L'unica parte di WASI su cui si fa affidamento è la capacità di leggere da stdin e scrivere su stdout (e, ovviamente, stderr).

Per i meno tecnici (come me):

Quando un programma scrive qualcosa sullo schermo, sta usando una cosa che si chiama standard output. Lo standard output, abbreviato in stdout, è quello che usano i programmi per scrivere le informazioni all'utente. Il nome per quello che usate voi per comunicare con i programmi è standard input (stdin).

Ci sono alcuni vincoli aggiuntivi che ogni modulo deve soddisfare, tra l'altro per garantire che Shopify riesca a ridimensionare le funzioni in modo appropriato, anche durante i carichi di lavoro come il Black Friday:

  • Il modulo non deve superare i 256 KB.
  • Il modulo non deve funzionare per più di 5 ms.
  • Il modulo deve utilizzare una stringa in formato JSON tramite stdin e produrre una stringa in formato JSON su stdout.

Nota: 5 ms è un vincolo molto dipendente dalla macchina e dalla situazione. La stessa macchina avrà bisogno di quantità di tempo diverse per eseguire la stessa identica funzione, a seconda del carico a cui è sottoposta la macchina.

Con questi vincoli in mente, Shopify ha iniziato a cercare un modo per eseguire JavaScript all'interno di una Virtual Machine WebAssembly.

Ma quali sono le funzioni che si possono (oggi) gestire e modificare con Shopify Functions?

Esempi di API di Shopify Functions

a. API Cart Transform Function

Gli sviluppatori possono permettere ai commercianti di creare offerte di pacchetti unici. Per farlo ci sono due punti chiave. In primo luogo, la Cart Transform Function consente ai venditori di configurare quali prodotti specifici possono essere uniti in un bundle. Questi articoli vengono poi visualizzati nel checkout con un prezzo per il loro acquisto come bundle, dove vengono combinati i singoli prodotti che appartengono all'offerta.

Inoltre, la funzione di trasformazione del carrello può anche espandere un prodotto del bundle nei suoi singoli componenti, rendendo più facile il completamento di attività sul backend, come il calcolo delle tasse, dei pesi di spedizione, la diminuzione dell'inventario e altro ancora, oltre a garantire che ogni singolo articolo venga evaso in modo appropriato dopo un acquisto.

Clicca qui approfondire il tema dell'API Cart Trasformation 

B. Cart and Checkout validation API

L'API di convalida del carrello e del checkout garantisce che i clienti possano completare l'acquisto e il checkout solo se i loro ordini sono conformi a una serie di regole specifiche, determinate dal commerciante. Alcuni dei casi d'uso più comuni per la convalida del carrello e del checkout includono:

  • Assicurarsi che il cliente soddisfi i requisiti di quantità minima o massima per effettuare il check-out.
  • Controllare che l'indirizzo di spedizione possa essere spedito e non sia una casella postale.
  • Assicurarsi che il carrello non contenga articoli che non possono essere acquistati insieme, come ad esempio un accendino e delle batterie al litio.

Le API del carrello e quella di validazione del checkout possono lavorare in combinata, per offrire esperienze di acquisto come la ricezione di particolari sconti o sbloccare collezioni esclusive.

Clicca qui per approfondire il tema dell'API Cart and Checkout validation

C. Order routing API

La logistica è una bestia con molte teste e ogni azienda può sviluppare il modo migliore (per ogni azienda) di evadere e spedire gli ordini
Ad esempio, un produttore potrebbe avere un magazzino che deve preparare e spedire determinati articoli, ma altri è meglio stoccarli ed inviarli da un'altra sede, più vicina all'acquirente. Ecco con l'API Order Routing, gli sviluppatori possono sviluppare applicazioni per creare la logica di instradamento degli ordini più adatta per ogni azienda.

Un altro esempio? Si possono impostare delle regole di base per evitare i frazionamenti, insieme a una regola secondaria per inviare gli articoli dalla sede più vicina all'indirizzo di spedizione. Questa logica significa che prima di completare una spedizione, Shopify determinerebbe quale sede di evasione ha tutto in magazzino e quindi sceglierebbe il magazzino più vicino al cliente.

Altre casistiche, in ordine sparso: si possono mantenere gli ordini all'interno del Paese, bilanciare i livelli di inventario per dare priorità alle sedi con più articoli in magazzino o spedire direttamente dai negozi, solo per citarne alcune.

Clicca qui per approfondire il tema dell'API Order routing.

ICT Sviluppo: Alta Sartoria per SHOPIFY PLUS

Giovanni Fracasso

Giovanni Fracasso

COO e CMO @ITC Sviluppo