Date energia alle vostre applicazioni Web con la classe OutgoingMessage

Tradotto automaticamente da Deepl

Nel mondo digitale di oggi, un’esperienza utente fluida e intuitiva è fondamentale per il successo di qualsiasi applicazione web. Una parte fondamentale di questa esperienza consiste nel fornire agli utenti un facile accesso a varie risorse, siano esse documenti, immagini o altri tipi di dati. Per rendere possibile tutto ciò, il server deve gestire e fornire in modo efficiente diversi formati di contenuto.

Con la nuova funzione del server REST di 4D, la gestione della distribuzione di contenuti diversi è ora più facile che mai. In precedenza, il server REST poteva restituire solo dati scalari, di entità o di selezione di entità. Ora è in grado di fornire direttamente contenuti web completi, pronti per essere gestiti da un browser.

Scaricare file o ricevere dati binari dal server REST è ora semplice, grazie alla nuova classe OutgoingMessage. Con essa è possibile personalizzare facilmente le risposte in base alle proprie esigenze.

Continuate a leggere per scoprire come la classe OutgoingMessage può migliorare la vostra applicazione!

Classe HDI_OutGoingMessage

Chiamare una funzione esposta sul server REST

Promemoria rapido: Le funzioni del modello di dati ORDA e le funzioni singleton sono richiamabili come API REST. Per rinfrescarvi la memoria, consultate questo post del blog e questo.

Finora, il server REST poteva restituire vari tipi di risultati, come scale, entità o selezioni di entità, avvolti in un oggetto usando la proprietà result.

esempio

Questa è la funzione getSomeInfo() sulla classe Datastore.

exposed Function getSomeInfo() : Text
return "This is the info"

Ed ecco il risultato ottenuto quando viene richiamata con la richiesta /rest/$catalog/getSomeInfo:

{
"result": "This is the info"
}

I comandi Web 4D non possono essere utilizzati in queste funzioni, per questo la nuova classe OutgoingMessage offre un grande vantaggio.

La nuova classe OutgoingMessage

Le funzioni del modello di dati e dei singleton di ORDA possono ora restituire un oggetto istanza di questa nuova classe. OutgoingMessage classe.

Tali oggetti vengono gestiti direttamente da qualsiasi browser come contenuto web.

In questo modo, è possibile proporre ai propri utenti finali funzionalità quali il download di file e immagini e la ricezione di qualsiasi tipo di contenuto tramite un browser.

Questa è la rappresentazione JSON di un’istanza di oggetto della classe OutgoingMessage classe.

esempio

In questo esempio, la funzione getFile() è implementata nella classe Datastore. Lo scopo è quello di restituire il file testFile.pdf come risposta alla richiesta.

Viene creata un’istanza di oggetto della classe OutgoingMessage viene creata.

Il corpo contiene il contenuto binario del file testFile.pdf e un’intestazione che indica che il tipo di contenuto è impostato.

exposed onHTTPGet Function getFile() : 4D.OutgoingMessage

var $result:=4D.OutgoingMessage.new()
var $file:=File("/RESOURCES/testFile.pdf")

$result.setBody($file.getContent()) // This is binary content
$result.setHeader("Content-Type"; "application/pdf")
return $result

La classe OutgoingMessage contiene tre proprietà da riempire in base alle proprie esigenze:

  • header: Imposta qualsiasi intestazione HTTP che il client è tenuto a gestire(ad esempio, content-type per indicare il tipo di contenuto del corpo).
  • body: impostare il contenuto che si vuole inviare come risposta alla richiesta. Può essere una stringa o un blob(ad esempio, un file, un documento o un’immagine come contenuto binario).
  • status: Imposta un codice di stato HTTP in base al risultato della richiesta. Questo fornisce al client informazioni sull’esito della richiesta (adesempio, lo stato 403 se la richiesta viene rifiutata). Il valore predefinito è 200.

N.B. Le proprietà body e status possono essere modificate con l’operatore := o con le corrispondenti proprietà setBody() / setStatus() .

facilitare la chiamata di funzioni sul server di riposo

la nuova parola chiave onHTTPGet per le funzioni

Finora, le chiamate di funzioni (di classi e singleton del modello di dati ORDA ) attraverso il server REST dovevano essere effettuate con un verbo POST. Questo per motivi di sicurezza, per evitare di eseguire codice sensibile attraverso un’azione semplice come il clic su un link.

Poiché il POST non è sempre adatto all’esperienza utente che si vuole offrire, queste funzioni possono essere richiamate anche con un verbo GET , cioè richiamabili inserendo un URL in un browser.

Utilizzare la parola chiave new onHTTPGet per questo. Se questa parola chiave è applicata a una funzione, questa funzione è anche richiamabile con un verbo GET!

esempio

exposed onHTTPGet Function getSomeInfo() : 4D.OutgoingMessage

N.B. Poiché questo tipo di chiamata è un’azione che può essere facilmente offerta, lo sviluppatore deve assicurarsi che in tali funzioni non vengano eseguite azioni sensibili.

passaggio di parametri

I parametri possono essere passati alla funzione con il parametro $params (deve essere racchiuso in un insieme).

esempio

In questo esempio, viene richiamata la funzione getThumbnail() della classe di dati Products (per ottenere una foto in miniatura di un determinato prodotto).

Riceve il nome del prodotto e la larghezza + lunghezza richieste.

IP:port/rest/Products/getThumbnail?$params='["Yellow Pack",200,200]'

Per ulteriori informazioni sull’invio di parametri quando si chiama una funzione, consultare la documentazione.

Un esempio completo

Ecco il caso d’uso di questo esempio: a un utente finale viene proposto un link per scaricare il manuale d’uso di un prodotto selezionato con diversi formati disponibili.

La richiesta dietro il link è: IP:port/rest/Products/getUserManual?$params='[1, “pdf”]’

L’id del prodotto selezionato (1) viene passato come parametro e il formato richiesto (pdf).

Viene richiamata la funzione getUserManual() della classe di dati Products. Riceve l’id del prodotto e il formato come parametro.

Viene recuperato il documento corrispondente. Il suo contenuto binario viene inserito come corpo nella risposta con il tipo di contenuto corrispondente.

exposed onHTTPGet Function getUserManual($productId : Integer; $type : Text) : 4D.OutgoingMessage

var $file : 4D.File
var $response:=4D.OutgoingMessage.new()
var $doc:="/RESOURCES/User manuals/product_"+String($productId)

Case of
: ($type="pdf")
$file:=File($doc+".pdf")
$response.setBody($file.getContent()) // This is binary content
$response.setHeader("Content-Type"; "application/pdf")

: ($type="jpeg")
$file:=File($doc+".jpeg")
$response.setBody($file.getContent()) // This is binary content
$response.setHeader("Content-Type"; "image/jpeg")
End case

return $response

Ecco lo scenario riprodotto in un browser:

blank

Prova tu stesso

Scaricate l’HDI per esplorare questa nuova funzionalità e consultate la documentazione per maggiori dettagli sull’utilizzo della classe OutgoingMessage nelle vostre applicazioni web.

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert è entrata a far parte del team 4D Product come Product Owner nel 2017. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Marie-Sophie si è laureata presso la scuola di ingegneria ESIGELEC e ha iniziato la sua carriera come ingegnere presso IBM nel 1995. Ha partecipato a vari progetti (di manutenzione o di costruzione) e ha lavorato come sviluppatrice Cobol. In seguito ha lavorato come progettista UML e sviluppatore Java. Ultimamente i suoi ruoli principali erano l'analisi e la scrittura dei requisiti funzionali, il coordinamento dei team di business e di sviluppo.