Menu

Tradução

Português English Español Français

Como Fazer Login em uma API REST usando POST

Neste post, você aprenderá a autenticar usuários em APIs REST utilizando THTTPClient, enviando dados via POST e interpretando a resposta em JSON.
Homem com celular na mão e painel escrito API de fundo.

Introdução

Nos últimos anos, praticamente todas as aplicações passaram a consumir APIs REST para realizar autenticação, consultar informações, enviar dados ou integrar sistemas. Se você pretende desenvolver aplicações modernas em Delphi, dominar esse tipo de integração deixou de ser um diferencial e passou a ser um requisito.

No artigo anterior aprendemos a realizar uma requisição HTTP GET utilizando o componente THTTPClient, consumindo uma API pública e interpretando o retorno em formato JSON. Agora chegou o momento de avançarmos um passo importante: aprender como realizar um login em uma API utilizando o método HTTP POST.

Diferente do método GET, utilizado principalmente para consultar informações, o método POST é utilizado quando precisamos enviar dados para o servidor. Um exemplo muito comum é o processo de autenticação de usuários, onde enviamos o nome de usuário e a senha para que a API valide as credenciais e retorne um token de acesso.

Neste artigo utilizaremos a excelente DummyJSON, uma API totalmente gratuita criada justamente para estudos e testes de aplicações REST. Ela permite realizar login, consultar usuários, produtos, carrinhos de compras e diversas outras operações sem necessidade de criar uma conta ou informar cartão de crédito.

Ao final deste tutorial você será capaz de:

  • Entender quando utilizar o método HTTP POST.
  • Criar uma requisição POST utilizando o THTTPClient.
  • Enviar dados em formato JSON.
  • Interpretar a resposta da API.
  • Extrair informações retornadas pelo servidor.
  • Preparar sua aplicação para utilizar autenticação Bearer Token no próximo artigo.

O que é uma API REST?

Uma API REST é uma interface que permite que diferentes aplicações se comuniquem através do protocolo HTTP.

Em vez de acessar diretamente um banco de dados, sua aplicação envia requisições para um servidor, que processa essas informações e devolve uma resposta, normalmente em formato JSON.

Hoje praticamente todos os grandes sistemas utilizam APIs REST.

Alguns exemplos:
  • GitHub
  • Hotmart
  • Mercado Livre
  • ViaCEP
  • OpenAI
  • Banco Central
  • Receita Federal
Por isso aprender a consumir APIs em Delphi é uma habilidade extremamente importante para qualquer desenvolvedor.

O que é o método POST?

O protocolo HTTP possui diversos métodos, sendo os mais conhecidos:

Método Finalidade
GET Consultar informações
POST Enviar dados
PUT Atualizar registros
DELETE Excluir registros

Sempre que realizamos um login em um sistema normalmente utilizamos uma requisição POST, pois precisamos enviar informações sensíveis ao servidor, como usuário e senha.

No exemplo deste artigo enviaremos o seguinte JSON:


JSON

{
    "username":"emilys",
    "password":"emilyspass"
}

O servidor validará essas informações e retornará um objeto JSON contendo os dados do usuário autenticado. Conhecendo a DummyJSON Para este exemplo utilizaremos a API gratuita DummyJSON. Ela simula uma API real, permitindo realizar autenticação, consultas e diversas operações sem necessidade de cadastro. O endpoint utilizado será:
POST https://dummyjson.com/user/login

O corpo da requisição será:
JSON

{
    "username":"emilys",
    "password":"emilyspass",
    "expiresInMins":30
}

Após o login a API retornará diversas informações sobre o usuário, incluindo o Access Token, que utilizaremos no próximo artigo para acessar rotas protegidas.

Criando o Projeto

Abra o Delphi 11 ou Delphi 12 e crie uma nova aplicação VCL Forms Application.

No formulário adicione os seguintes componentes:


Componente Nome
TLabel lblUsuario
TEdit edtUsuario
TLabel lblSenha
TEdit edtSenha
TButton btnLogin
TMemo mmRetorno
TMemo mmJSON

Configure o PasswordChar do campo de senha para: *

Assim os caracteres digitados ficarão ocultos.

Adicionando as Units


Antes de começar a desenvolver o código, precisamos adicionar algumas Units responsáveis pela comunicação HTTP e manipulação de JSON.

Na cláusula uses, adicione:

Delphi

uses  
  System.Net.HttpClient,
  System.Net.URLClient,
  System.JSON,
  System.Classes
Cada uma possui uma finalidade específica.
Delphi

System.Net.HttpClient
Responsável por realizar requisições HTTP e HTTPS.
Delphi

System.Net.URLClient
Fornece suporte às respostas HTTP e manipulação de cabeçalhos.
Delphi

System.JSON
Permite converter textos JSON em objetos Delphi e acessar seus campos de maneira simples.
Delphi

System.Classes

Será utilizada para criar Streams que enviaremos para a API.


Como funciona uma autenticação via POST?

O processo é bastante simples.

  1. O usuário informa login e senha.
  2. O Delphi cria um objeto JSON contendo essas informações.
  3. O JSON é enviado para a API utilizando HTTP POST.
  4. O servidor valida os dados.
  5. A API retorna um novo JSON contendo as informações do usuário.

Nossa aplicação interpreta essa resposta e exibe os dados na tela.

Em aplicações corporativas, normalmente esse retorno também contém um Access Token, que será utilizado para autenticar as próximas requisições sem que o usuário precise informar a senha novamente.


Agora o evento do botão:

Delphi

procedure TForm1.btnLoginClick(Sender: TObject);
var
  Http: THTTPClient;
  Response: IHTTPResponse;
  JSONBody: TJSONObject;
  JSONRetorno: TJSONObject;
  Stream: TStringStream;
begin
  Http := THTTPClient.Create;
  JSONBody := TJSONObject.Create;
  try
    JSONBody.AddPair('username', edtUsuario.Text);
    JSONBody.AddPair('password', edtSenha.Text);
    JSONBody.AddPair('expiresInMins', TJSONNumber.Create(30));
    Stream := TStringStream.Create(JSONBody.ToJSON, TEncoding.UTF8);
    try
      Stream.Position := 0;
      Http.ContentType := 'application/json';
      Response := Http.Post(
        'https://dummyjson.com/user/login',
        Stream
      );
      mmJSON.Lines.Text := Response.ContentAsString;
      if Response.StatusCode = 200 then
      begin
        JSONRetorno := TJSONObject.ParseJSONValue(Response.ContentAsString) as TJSONObject;
        try
          mmRetorno.Clear;
          mmRetorno.Lines.Add('Login realizado com sucesso!');
          mmRetorno.Lines.Add('');
          mmRetorno.Lines.Add('Nome: ' +
            JSONRetorno.GetValue<string>('firstName'));
          mmRetorno.Lines.Add('Sobrenome: ' +
            JSONRetorno.GetValue<string>('lastName'));
          mmRetorno.Lines.Add('E-mail: ' +
            JSONRetorno.GetValue<string>('email'));
          mmRetorno.Lines.Add('');
          mmRetorno.Lines.Add('Access Token:');
          mmRetorno.Lines.Add(
            JSONRetorno.GetValue<string>('accessToken')
          );
        finally
          JSONRetorno.Free;
        end;
      end
      else
        ShowMessage('Erro: ' + Response.StatusCode.ToString);
    finally
      Stream.Free;
    end;
  finally
    JSONBody.Free;
    Http.Free;
  end;
end;


Veja abaixo a ilustração do projeto:

Ilustração do projeto.

Código fonte do exemplo

Você pode fazer o download do exemplo do projeto através do repositório do github:

https://github.com/Gisele-de-Melo/login-api-post


Explicando o código

Criando o JSON

Criamos um objeto TJSONObject contendo o usuário, a senha e o tempo de expiração desejado para o token.

Delphi

JSONBody.AddPair('username', edtUsuario.Text);
JSONBody.AddPair('password', edtSenha.Text);

Em seguida, convertemos esse objeto para JSON e o enviamos para a API.

Enviando a requisição

Através do método Post, enviamos o JSON para o endpoint de autenticação.

Delphi

Response := Http.Post(...);

Diferentemente do método GET, o POST envia informações no corpo da requisição.

Interpretando a resposta

Após o login, a DummyJSON retorna um objeto JSON contendo os dados do usuário e um Access Token.

Extraímos esses valores utilizando:

Delphi

JSONRetorno.GetValue('accessToken');

Esse token representa o usuário autenticado e será utilizado para acessar recursos protegidos da API.


Conclusão

Neste artigo aprendemos como enviar dados para uma API utilizando o método HTTP POST e realizar a autenticação de um usuário. Também obtivemos o Access Token, que será utilizado para autenticar as próximas requisições.

APIs são poderosas pois podem ser acessadas a partir de qualquer sistema, seja ele em Delphi ou outra linguagem de programação.

Posts Relacionados

Nenhum comentário:

Postar um comentário

Como Fazer Login em uma API REST usando POST

Neste post, você aprenderá a autenticar usuários em APIs REST utilizando THTTPClient, enviando dados via POST e interpretando a resposta em...