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.