O TMS XData é um framework para Delphi que permite criar servidores HTTP/HTTPS e disponibilizar dados por meio de APIs REST utilizando o formato JSON. Com ele, podemos desenvolver aplicações multicamadas, criar endpoints personalizados e centralizar regras de negócio de forma simples e organizada. Saiba mais no site oficial do TMS XData.
Criando a aplicação
Neste exemplo, vamos mostrar uma maneira simples de iniciar com o XData e criar nossa primeira API REST com Delphi.
Para isso, utilizaremos apenas quatro componentes:
- TXDataServer
- TSparkleHttpSysDispatcher
- Dois componentes TButton, utilizados para iniciar e parar o servidor

Com essa estrutura, já temos uma API pronta para ser executada. Basta iniciar a aplicação e clicar no botão Start.
Acessando a API
Para descobrir o endereço da API, selecione o componente XDataServer1 e verifique sua propriedade BaseUrl.
Neste exemplo, utilizaremos o seguinte endereço:
http://localhost:8000/tms/xdata
Copie esse endereço, abra o navegador e acesse a URL. O resultado será uma resposta JSON, indicando que nossa API já está em execução:

Criando uma Service
O próximo passo é criar uma Service, onde ficarão disponíveis os endpoints e as regras de negócio da nossa API. O XData possui um Wizard que facilita esse processo. No Delphi, acesse:
File > New > Other...
Na tela seguinte, selecione:
TMS XData > TMS XData Service
Informe o nome da Service. Para este exemplo, utilizaremos o nome Clientes.

Ao finalizar o Wizard, dois novos arquivos serão adicionados ao projeto:
ClientesService.pas
ClientesServiceImplementation.pas
Criando o endpoint
A unit ClientesService possui a interface utilizada pela nossa Service. Nela, vamos criar o método GetNome, que receberá o código de um cliente e retornará seu nome.
unit ClientesService;
interface
uses
XData.Service.Common;
type
[ServiceContract]
IClientesService = interface(IInvokable)
['{66A6C40C-C18C-4261-8D25-32EACD91102C}']
[HttpGet]
function GetNome(Id: Integer): string;
end;
implementation
initialization
RegisterServiceType(TypeInfo(IClientesService));
end.O atributo [ServiceContract] identifica a interface como um contrato de serviço. Já o atributo [HttpGet] determina que o método será disponibilizado por meio de uma requisição HTTP do tipo GET.
Implementando a Service
A unit ClientesServiceImplementation é responsável pela implementação da interface. É nessa classe que podemos receber os parâmetros, aplicar nossas regras de negócio, acessar o banco de dados e gerar a resposta da API.
unit ClientesServiceImplementation;
interface
uses
System.SysUtils,
XData.Server.Module,
XData.Service.Common,
ClientesService;
type
[ServiceImplementation]
TClientesService = class(TInterfacedObject, IClientesService)
private
[HttpGet]
function GetNome(Id: Integer): string;
end;
implementation
function TClientesService.GetNome(Id: Integer): string;
begin
Result := 'Cliente teste com Id: ' + Id.ToString;
end;
initialization
RegisterServiceType(TClientesService);
end.Neste exemplo, o método GetNome retorna apenas uma string com o código recebido. Em uma aplicação real, poderíamos utilizar o parâmetro para consultar um cliente no banco de dados e retornar suas informações.
Testando o endpoint
Para testar, execute a aplicação e clique no botão Start. Depois, acesse no navegador o endpoint ClientesService/GetNome, informando o parâmetro Id:
http://localhost:8000/tms/xdata/ClientesService/GetNome?Id=10A API retornará o seguinte JSON:

Com poucos componentes e duas units, já criamos uma API REST funcional com Delphi e TMS XData. A partir dessa estrutura, podemos adicionar novos endpoints, integrar bancos de dados e implementar as regras de negócio necessárias para nossas aplicações.

