API REST com Delphi e TMS XData: primeiros passos

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=10

A 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.

Links úteis