Scambio dati tra sistemi, ci aiuta MessagePack

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 il primo commento

Lascia un commento