api rest
O que é api rest stateless
- O conceito de "stateless" em uma API REST significa que cada chamada da API deve ser independente e não deve depender de chamadas anteriores. Em outras palavras, o servidor não mantém nenhum estado de cliente entre as requisições. Cada requisição do cliente deve conter todas as informações necessárias para o servidor entender e processar essa requisição.
Significado de Stateless
- Independência de Requisições: Cada requisição é autossuficiente e deve incluir todas as informações necessárias para o processamento.
- Escalabilidade: Facilita a escalabilidade horizontal (adicionando mais servidores) porque qualquer servidor pode atender qualquer requisição sem a necessidade de compartilhamento de estado.
- Simplicidade: Reduz a complexidade do servidor, pois não precisa gerenciar o estado das sessões de clientes.
Como Implementar uma API Stateless
- Autenticação:
- Utilize tokens, como JSON Web Tokens (JWT), que são enviados em cada requisição, geralmente através do cabeçalho Authorization: Bearer <token>.
- Mensagens Completas:
- As requisições devem conter todas as informações necessárias, como parâmetros, cabeçalhos, e corpo da mensagem (payload).
- Idempotência:
- As operações devem ser idempotentes quando possível, especialmente para métodos HTTP como GET, PUT, DELETE.
- Obs:
- Idempotência é um conceito fundamental em sistemas distribuídos e APIs REST. Refere-se à propriedade de certas operações que podem ser executadas múltiplas vezes sem alterar o resultado além da primeira aplicação. Em outras palavras, uma operação idempotente produzirá o mesmo efeito, independentemente de quantas vezes for executada.
- Características da Idempotência:
- Repetição Segura: Executar a mesma operação várias vezes não altera o estado do sistema após a primeira execução.
- Consistência: Garante que a operação produz um resultado consistente e previsível.
- Facilita Recuperação de Falhas: Em casos de falha na comunicação, a operação pode ser repetida sem preocupação de efeitos colaterais adversos.
- Características da Idempotência:
- Idempotência é um conceito fundamental em sistemas distribuídos e APIs REST. Refere-se à propriedade de certas operações que podem ser executadas múltiplas vezes sem alterar o resultado além da primeira aplicação. Em outras palavras, uma operação idempotente produzirá o mesmo efeito, independentemente de quantas vezes for executada.
Exemplo Prático Usando Free Pascal
-
Exemplo simples de como se implementar uma API REST stateless usando FPWeb.
program StatelessAPI; {$mode objfpc}{$H+} uses fphttpapp, fpweb, HTTPDefs; type TMyRESTModule = class(TFPWebModule) private procedure HandleGetRequest(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); public end; procedure TMyRESTModule.HandleGetRequest(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); var authToken: string; begin // Check for authorization token in the request header authToken := ARequest.GetHeader('Authorization'); if authToken = 'Bearer mysecrettoken' then begin AResponse.ContentType := 'application/json'; AResponse.Contents.Text := '{"message": "Hello, World!"}'; end else begin AResponse.Code := 401; // Unauthorized AResponse.Contents.Text := '{"error": "Unauthorized"}'; end; Handled := True; end; var Application: TFPHTTPApplication; Module: TMyRESTModule; begin Application := TFPHTTPApplication.Create(nil); try Module := TMyRESTModule.Create(nil); Module.OnRequest := @Module.HandleGetRequest; Application.Initialize; Application.Run; finally Application.Free; end; end.