Blog
All Blog Posts | Next Post | Previous Post
TMS XData está chegando
Monday, August 26, 2013
Uma nova framework chamada TMS XData está prestes a ser lançada pela TMS. É difícil definir uma framework com poucas palavras, especialmente se essa framework é modular e muitas partes dela podem ser usadas separadamente. Porém, usando uma definição bem abrangente, poderia dizer que TMS XData é uma framework que permite fornecer e consumir dados da sua aplicação através de serviços Rest. Mas talvez ao invés de tentar definir, o melhor é dar um exemploO XData pode ser bastante integrado ao TMS Aurelius, nossa framework ORM. Já postei aqui alguns artigos sobre o Aurelius com alguns exemplos simples. Sendo assim, caso você ainda não conheça o Aurelius, pode começar pelos primeiros passos, ou ainda, relacionado a este artigo, como criar associações simples.
Agora iremos criar um servidor XData bem simples que fornece objetos Aurelius:
program SimpleXDataServer;
{$APPTYPE CONSOLE}
uses
Aurelius.Drivers.Interfaces,
Aurelius.Engine.ObjectManager,
XData.Http.Server,
XData.Http.AureliusHandler,
Utils,
Customer;
procedure CreateCustomer(const CustomerName, CountryName: string);
var
Manager: TObjectManager;
Customer: TCustomer;
Country: TCountry;
begin
Manager := TObjectManager.Create(SQLiteConnection);
Country := TCountry.Create;
Country.Name := CountryName;
Customer := TCustomer.Create;
Customer.Name := CustomerName;
Customer.Country := Country;
Manager.Save(Customer);
Manager.Free;
end;
var
Conn: IDBConnection;
Server: THttpServer;
begin
ReportMemoryLeaksOnShutdown := true;
Conn := SQLiteConnection;
BuildDatabase(Conn);
CreateCustomer('Paul', 'United States');
CreateCustomer('Jonas', 'Germany');
CreateCustomer('Hiroto', 'Japan');
CreateCustomer('Jian', 'China');
CreateCustomer('Sergei', 'Russia');
Server := THttpServer.Create;
Server.Port := 2001;
Server.RegisterHandler(
TAureliusHttpHandler.Create(
'http://aurelius:2001/tms/xdata', SQLiteConnection));
Server.Start;
WriteLn('Running Simple XData Server');
ReadLn;
Server.Free;
DestroyDatabase(Conn);
end.
O programa acima é uma aplicação "normal" usando TMS Aurelius, que conecta ao banco de dados, cria as tabelas necessárias e insere alguns dados. A parte diferente é a que cria uma instância de um THttpServer e registra um request handler no endereço "/tms/xdata". O que acontece aqui é que os objetos Aurelius estão agora sendo fornecidos através de uma API Rest bem definida.
O XData usa como default o protocolo OData, que permite uma grande compatibilidade com outros clientes e plataformas. Também permite que o XData faça muitas coisas automaticamente: os objetos TCustomer, por exemplo, estão disponíveis no endereço "http://aurelius:2001/tms/xdata/TCustomer" (Os nomes são configuráveis).
Outro ponto interessante é como os dados são facilmente acessíveis de qualquer lugar. Para ilustrar, apresento aqui o código completo de uma aplicação console .NET em C# que conecta ao servidor acima e obtém os objetos TCustomer, usando Linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Services.Client;
namespace DotNetClient
{
class Program
{
static void Main(string[] args)
{
DataServiceContext context = new DataServiceContext(new Uri(@"http://aurelius:2001/tms/xdata"));
IQueryable<TCustomer> customers = context.CreateQuery<TCustomer>("TCustomer");
foreach (TCustomer customer in customers)
Console.WriteLine("Customer {0} from {1}", customer.FName, customer.FCountry.FName);
Console.ReadLine();
}
}
public class TCustomer
{
public int FId { get; set; }
public string FName { get; set; }
public TCountry FCountry { get; set; }
}
public class TCountry
{
public int FId { get; set; }
public string FName { get; set; }
}
}

Mais informações em breve!
Wagner Landgraf
This blog post has not received any comments yet.
All Blog Posts | Next Post | Previous Post