Recentemente fiz uma apresentação sobre o uso de cloud e REST APIs da Delphi na conferência italiana Delphi Day, no final de junho. Entre as várias demos, fiz alguns experimentos usando APIs REST APILayer. Caso você não saiba, APILayer é uma empresa que faz parte do Idera, assim como a Embarcadero.
Índice
Por que APIs REST
Antes de explorarmos APIs e demonstrações específicas, gostaria de discutir a relevância do uso de APIs no contexto de um aplicativo cliente como os criados com Delphi. No passado, a maneira mais comum de adicionar um recurso a um programa era escrever o código adequado ou usar uma biblioteca existente para adicionar o recurso e distribuir o código compilado do recurso junto com o aplicativo.
Os serviços online e as APIs REST de hoje geralmente oferecem recursos semelhantes ativados pela passagem de parâmetros adequados com uma chamada HTTP para um servidor e recebendo de volta o resultado. Os exemplos incluem transformações de imagem, criação de um PDF, transformação de texto em fala ou leitura do texto incorporado em uma imagem.
Por que você usaria uma abordagem sobre a outra? Há casos em que apenas uma das alternativas é realista (renderização gráfica de desempenho rápido requer uma biblioteca gráfica instalada enquanto um recurso de IA geralmente está disponível online), mas em outros cenários ambas as abordagens podem ser possíveis.
Usar uma biblioteca local tem a vantagem de:
- Execução geralmente mais rápida
- Não há necessidade de uma conexão com a Internet
- Possivelmente a capacidade de ajustar e personalizar o recurso e vinculá-lo melhor ao código e à interface do usuário
- No nível de segurança, você não precisa se preocupar com a criptografia da comunicação para evitar que alguém acesse os dados do aplicativo em trânsito
O uso de APIs REST tem a vantagem de:
- Mantendo o aplicativo menor, pois você não precisa distribuir código de biblioteca extra
- Sempre use a versão mais recente da biblioteca, pois ela pode ser atualizada separadamente do aplicativo cliente
- No nível de segurança, você não precisa se preocupar em atualizar a biblioteca caso algum problema seja descoberto, tendo que implantar uma nova versão do aplicativo
Por fim, geralmente há uma diferença entre os custos de uma biblioteca e uma API REST:
- A menos que a biblioteca seja gratuita e de código aberto, geralmente teria um custo fixo inicial por desenvolvedor
- A maioria das APIs REST tem um modelo de pagamento por uso, geralmente com um nível gratuito que você pode usar para desenvolvimento e teste
- Portanto, a API REST pode ser mais barata para uso limitado, mas se tornar mais cara para uso extensivo
Apresentando APILayer
APILayer é um negócio da Idera focado em oferecer APIs hospedadas e na criação de um API Marketplace, hospedando também APIs de terceiros. Você pode ler mais sobre os muitos serviços disponíveis em https://apilayer.com/
Existem muitas APIs poderosas como parte do APILayer, e enquanto algumas fazem mais sentido em um aplicativo da web (como IpStack), muitas outras fazem todo o sentido também em um aplicativo cliente, como os serviços de processamento de arquivos oferecidos pelo FileStack ( https://www .filestack.com/ ) ou a elegante API de verificação de e-mail de terceiros ( https://apilayer.com/marketplace/email_verification-api ).
Na minha demonstração abaixo, vou focar em uma API simples, possivelmente não a mais poderosa: WeatherStack, que como o nome indica pode fornecer dados atuais, históricos e de previsão sobre o clima:
Usando o Depurador REST do RAD Studio
Depois de identificar a API REST que você planeja usar, a maneira mais fácil de começar a desenvolver um aplicativo cliente é usar o REST Debugger, disponível como parte da instalação do RAD Studio (e acessível no menu Ferramentas) e também como um download gratuito separado para qualquer pessoa ( https://www.embarcadero.com/free-tools/rest-debugger ).
O depurador oferece a capacidade de configurar uma API REST, salvar essa configuração para uso futuro (ou compartilhá-la com outro desenvolvedor) e importar a configuração em um aplicativo Delphi ou C++Builder.
Em um caso simples, como o do WeatherStack, depois de iniciar o REST Debugger, primeiro você precisa configurar o endpoint primário:
Em seguida, você precisa definir a configuração de parâmetros adequada, incluindo o endpoint específico (atual), o parâmetro de consulta e as informações de autenticação access_key:
Os parâmetros dependem do endpoint e estão listados na documentação da API. Neste ponto, você pode usar o botão SendRequest para experimentar a API e verificar a resposta na parte inferior da interface do usuário do REST Debugger:
A estrutura de dados resultante é relativamente complexa, mas podemos filtrar algumas das tabelas aninhadas (como a localização visível acima) em uma estrutura de tabela. Dado que provavelmente estamos procurando os dados atuais, podemos usar esse elemento raiz JSON para obter os dados em uma estrutura de tabela:
Construindo uma demonstração real em Delphi
Quando estiver satisfeito com a configuração e os dados A (possivelmente incluindo os dados da tabela), você pode usar o botão Copiar Componente do Depurador REST para agilizar o desenvolvimento de um aplicativo. Este botão, na verdade, captura a configuração dos componentes REST Client Library e permite colá-la em um formulário ou módulo de dados no RAD Studio IDE.
Neste caso, acabei de criar um aplicativo FireMonkey simples com Delphi, adicionei um módulo de dados e colei a configuração dos componentes nele. Isso resulta no seguinte módulo de dados:
A configuração real dos componentes é a seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
object DataModule14: TDataModule14 object RESTClient1: TRESTClient BaseURL = 'http://api.weatherstack.com' end object RESTRequest1: TRESTRequest Client = RESTClient1 Params = < item Name = 'access_key' Value = 'xxxxxxxxxxxxxxxxx' end item Name = 'query' Value = 'Piacenza, Italy' end> Resource = 'current' Response = RESTResponse1 end object RESTResponse1: TRESTResponse RootElement = 'current' end object RESTResponseDataSetAdapter1: TRESTResponseDataSetAdapter Dataset = FDMemTable1 Response = RESTResponse1 TypesMode = JSONOnly end object FDMemTable1: TFDMemTable FetchOptions.AssignedValues = [evMode] FetchOptions.Mode = fmAll end end |
Como você pode ver, o componente RESTClient tem a configuração geral do site, o RESTRequest refere-se ao endpoint e seus parâmetros, o componente RESTResponse opcional guarda os resultados e pode passá-los através do componente RESTResponseDataSetAdapter para uma tabela in-memory, a FDMemTable componente.
Neste ponto, o que você precisa no formulário principal é um botão para fazer a chamada e uma caixa de edição com o local e um componente de exibição (usei uma caixa de edição somente leitura). No manipulador de eventos OnClick do botão, você pode escrever algum código como o seguinte:
1 2 3 4 5 6 |
procedure TForm13.BtnRefreshClick(Sender: TObject); begin DataModule14.RESTRequest1.Params[1].Value := EditLocation.Text; DataModule14.RESTRequest1.Execute(); EditCurrent.Text := DataModule14.FDMemTable1.FieldByName('temperature').AsString; end; |
Como alternativa, você pode vincular a entrada e a saída via Visual LiveBindings, conectando a edição de entrada aos parâmetros de solicitação e o campo específico da tabela in-memory ao controle de saída. execute a solicitação HTTP em tempo de design, usando um comando específico do componente RESTRequest. Isso preenche os metadados dos componentes, incluindo a tabela na memória. Depois de fazer isso, você pode conectar a entrada e a saída no designer do LiveBindings e residir o código executado ao pressionar o botão para:
1 |
DataModule14.RESTRequest1.Execute(); |
Esta é a configuração do designer do LiveBindings:
E por fim, esta é a aplicação em tempo de execução, neste dia quente de verão:
Conclusão
Como você viu, implementar um cliente para uma API REST em Delphi é relativamente simples (já demonstrei o mesmo no passado cobrindo uma API diferente aqui ). Agora, no caso de um aplicativo meteorológico, não há muitas alternativas em relação ao acesso a dados ao vivo de um serviço da Web, enquanto em outros cenários, usar uma API seria uma alternativa em relação à incorporação do mesmo recurso em uma parte da biblioteca do aplicativo.
Planejamos mostrar mais algumas APIs do APILayer no blog da Embarcadero, então fique atento e sinta-se à vontade para compartilhar suas ideias conosco.
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition