Quando la nostra applicazione deve dialogare all’interno di un ecosistema software, sorge il problema di come interfacciarsi con le altre applicazioni e come scambiare dati con esse. Una delle soluzioni può essere l’utilizzo del web service restful implementabile in tutti i maggiori linguaggi di programmazione e MessagePack (o MsgPack) come oggetto per la serializzazione.
L’utilizzo di MsgPack è utile soprattutto quando dobbiamo scambiare file (es: immagini, pdf, archivi compressi, etc.), si occupa anche della compressione/decompressione dei dati lasciando a noi solo il compito di gestire ad alto livello i dati da scambiare.
Di seguito un esempio di utilizzo di MsgPack in un sistema dove un’applicazione Mono/.Net fornisce dati ad un’applicazione Php:
classe c# che rappresenta il tipo di dato da serializzare
public class ResponseData { public long P01_Id { get; set; } public string P02_Title { get; set; } public byte[] P03_Image { get; set; } }
classe c# addetta alla serializzazione
public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // init response content type (binary data) Response.ClearContent(); Response.ContentType = "application/octet-stream"; Response.BufferOutput = true; Response.AddHeader("Content-Type", "application/octet-stream"); // Get Stream for response Stream out_stream = Response.OutputStream; // Create new instance of ResponseData var response_data = new ResponseData(); // Here code for business logic ..... response_data.P01_Id = ... response_data.P02_Title = ... response_data.P03_Image = ... // prepare serialization var serializer = MessagePackSerializer.Get<ResponseData>(); // send pack to client serializer.Pack(out_stream, response_data); Response.End(); return; } }
classe php addetta alla deserializzazione
<?php /** * Response data management */ class ResponseData { public $Id = null; public $Title = null; public $Image = null; /** * Deserialization */ function Parse($in_data) { $resp_data = msgpack_unpack($in_data); $this->Id = $resp_data[0]; $this->Title = $resp_data[1]; $this->Image = $resp_data[2]; } }
Lascia un commento
Devi essere connesso per inviare un commento.