Este projeto implementa uma API RESTful para simulação de um sistema de emissão de cartões, autenticação de transações e tokenização de cartões de crédito/débito. O projeto foi desenvolvido utilizando FastAPI e Python, focando em boas práticas de desenvolvimento e segurança.
- Emissão de cartões de crédito e débito
- Tokenização de cartões
- Autenticação de transações
- Exclusão de cartões
- Edição de dados do cartão
- Autenticação JWT para endpoints
- Documentação automática (Swagger/OpenAPI)
- Validação de dados de entrada
- Sistema de logs para auditoria
- Python 3.10 ou superior
- FastAPI
- Uvicorn
- Pydantic
- UUID
- python-jose[cryptography]
- passlib[bcrypt]
- python-multipart
- Clone o repositório:
git clone https://github.com/JeanCarlos88/HST_card_api.git
cd HST_card_api- Instale as dependências do projeto:
pip install -r requirements.txt- Instale as dependências dos testes (opcional):
cd tests/robot
pip install -r requirements.txt
cd ../..- Inicie o servidor:
uvicorn app.main:app --reload- Acesse a documentação:
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
- Certifique-se que a API está rodando:
# Em um terminal separado
uvicorn app.main:app- Em outro terminal, navegue até a pasta de testes:
cd tests/robot- Execute os testes:
a) Para executar todos os testes com log detalhado:
robot -d results -L TRACE .b) Para executar testes específicos por tags:
# Testes de emissão de cartão
robot -d results -L TRACE -i EmissaoCartao .
# Testes de tokenização
robot -d results -L TRACE -i Tokenizacao .
# Testes de autenticação
robot -d results -L TRACE -i Autenticacao .
# Testes de health check
robot -d results -L TRACE -i Health .
# Testes de exclusão de cartão
robot -d results -L TRACE -i ExclusaoCartao .c) Para executar um arquivo específico:
# Exemplo: executar apenas os testes de autenticação
robot -d results -L TRACE autenticacao_bdd.robotOpções do comando robot:
-d results: Coloca relatórios na pasta 'results'-L TRACE: Nível de log detalhado-i TAG: Executa apenas testes com a tag especificada-v VARIAVEL:VALOR: Define uma variável-t "Nome do Teste": Executa um teste específico pelo nome
Os resultados dos testes serão gerados em:
log.html: Log detalhado da execuçãoreport.html: Relatório resumido dos testesoutput.xml: Dados brutos para integração contínua
HST_card_api/
│
├── app/
│ ├── __init__.py
│ ├── main.py # Aplicação FastAPI e endpoints
│ ├── models.py # Modelos Pydantic
│ ├── services.py # Lógica de negócios
│ └── auth.py # Autenticação JWT
│
├── tests/
│ └── robot/ # Testes automatizados com Robot Framework
│ ├── resources/
│ │ └── CardApiPageObject.resource # Page Object da API
│ ├── autenticacao_bdd.robot # Teste de autenticação
│ ├── emissao_cartao_bdd.robot # Teste de emissão
│ ├── health_bdd.robot # Teste de health check
│ ├── tokenizacao_bdd.robot # Teste de tokenização
│ ├── exclusao_cartao_bdd.robot # Teste de exclusão
│ └── requirements.txt # Dependências dos testes
│
├── docs/
│ └── documentacao.md # Documentação detalhada em português
│
└── requirements.txt # Dependências do projeto
curl -X POST "http://127.0.0.1:8000/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=admin&password=adminpass"Guarde o token recebido para usar nas próximas requisições.
curl -X POST "http://127.0.0.1:8000/cards/issue" \
-H "Authorization: Bearer {seu_token_jwt}" \
-H "Content-Type: application/json" \
-d '{
"holder_name": "João Silva",
"card_type": "credit",
"expiry_date": "2025-12-31"
}'curl -X POST "http://127.0.0.1:8000/cards/{numero_do_cartao}/tokenize" \
-H "Authorization: Bearer {seu_token_jwt}"curl -X POST "http://127.0.0.1:8000/transactions/authenticate" \
-H "Authorization: Bearer {seu_token_jwt}" \
-H "Content-Type: application/json" \
-d '{
"token": "seu_token_cartao",
"amount": 100.00,
"merchant": "Loja Exemplo"
}'curl -X DELETE "http://127.0.0.1:8000/cards/{numero_do_cartao}" \
-H "Authorization: Bearer {seu_token_jwt}"curl -X PATCH "http://127.0.0.1:8000/cards/{numero_do_cartao}" \
-H "Authorization: Bearer {seu_token_jwt}" \
-H "Content-Type: application/json" \
-d '{
"holder_name": "Novo Nome",
"expiry_date": "2026-12-31"
}'O projeto foi desenvolvido e testado em:
- Windows 10/11
- Python 3.14
- VS Code com extensões Python
Para contribuir com o projeto:
- Fork o repositório
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Crie um Pull Request
Este projeto é uma demonstração e não deve ser usado em produção sem implementar medidas adicionais de segurança, como:
- Persistência segura de dados
- Criptografia de dados sensíveis
- Autenticação e autorização
- Rate limiting
- Validações mais rigorosas
Para mais detalhes sobre a implementação e uso da API, consulte a documentação completa.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.