Source code for sagace.core.api_client
"""
--------------------------------------------------------------------------------------------------------------------
Descrição:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Este módulo define uma interface para clientes API autenticados dentro do sistema SAGACE.
A classe `APIClient` fornece uma estrutura base para requisições autenticadas, garantindo que qualquer implementação
específica siga um contrato comum.
Principais funcionalidades:
- Gerenciamento da URL base da API.
- Armazenamento e recuperação do token de autenticação.
- Definição de um método abstrato para requisições autenticadas.
Classes:
- ``APIClient``: Interface para clientes autenticados.
Exemplo de uso:
.. code-block:: python
from sagace.infrastructure.api_client import APIClient
from sagace.core import TokenStorage
class MyAPIClient(APIClient):
def request(self, method: str, endpoint: str, **kwargs):
# Implementação específica da requisição
pass
api_client = MyAPIClient("https://api.sagace.online", TokenStorage())
Autor: Diego Yosiura
Última Atualização: 27/02/2025 16:20
Criado em: 27/02/2025 16:20
Copyright: (c) Ampere Consultoria Ltda
Projeto Original: sagace-v2-package
IDE: PyCharm
"""
from abc import ABC, abstractmethod
from . import TokenStorage
[docs]
class APIClient(ABC):
"""
Interface para clientes API autenticados.
Esta classe serve como base para a implementação de clientes API que necessitam de autenticação.
Princípios aplicados:
- **Liskov Substitution (L - SOLID)**: Qualquer classe que herde de `APIClient` deve poder ser utilizada
sem alterar o comportamento esperado.
- **Dependency Inversion (D - SOLID)**: Depende da abstração de um armazenamento de tokens (`TokenStorage`).
:param base_url: URL base da API.
:type base_url: str
:param token_storage: Instância responsável pelo armazenamento do token.
:type token_storage: TokenStorage
"""
def __init__(self, base_url: str, token_storage: TokenStorage):
"""
Inicializa a classe APIClient.
:param base_url: URL base da API.
:type base_url: str
:param token_storage: Instância responsável pelo armazenamento do token.
:type token_storage: TokenStorage
"""
# Remove qualquer barra extra no final da URL base para evitar problemas de formatação.
self.base_url = base_url.rstrip("/")
self.token_storage = token_storage
[docs]
@abstractmethod
def request(self, method: str, endpoint: str, **kwargs):
"""
Realiza uma requisição autenticada à API.
Este método deve ser implementado pelas classes concretas que herdam de `APIClient`.
:param method: Método HTTP a ser utilizado (GET, POST, etc.).
:type method: str
:param endpoint: Caminho do endpoint na API.
:type endpoint: str
:param kwargs: Parâmetros adicionais para a requisição.
:return: Resposta da API.
"""
pass