Skip to content

This is an example of a JWT (JSON Web Token) Authentication API built with Laravel. An API allows registering users, logging in and accessing protected routes with JWT authentication.

Notifications You must be signed in to change notification settings

albertoelias123/api-jwt

Repository files navigation

API JWT com Laravel

Este é um exemplo de API de autenticação JWT (JSON Web Token) construída com Laravel. A API permite registrar usuários, fazer login e acessar rotas protegidas com autenticação JWT.

Índice

Requisitos

Certifique-se de ter os seguintes requisitos antes de iniciar:

  • Docker e Docker Compose instalados

Instalação

Siga estas etapas para configurar e executar a API:

  1. Clone este repositório:

    git clone https://github.com/seu-usuario/api-jwt.git

  2. Execute o projeto utilizando o Laravel Sail:

./vendor/bin/sail up -d

Certifique-se de ter o Docker e o Docker Compose instalados no seu sistema.

  1. Configure o arquivo .env com as informações do banco de dados e as demais configurações necessárias.

No arquivo .env.example estão algumas atributos para ativar o debug com o Laravel Sail, já esta configurado para utilizar basta descomentar a linha:

SAIL_XDEBUG_MODE=develop,debug,coverage

Esse atributo SAIL_XDEBUG_MODE permite a utilização do XDEBUG para depuração e análise de cobertura de código.

  1. Execute as migrações e seeders do banco de dados:
./vendor/bin/sail artisan migrate
./vendor/bin/sail artisan db:seed

API

Testando a API com o Postman

Você pode usar o Postman para testar a API de forma interativa. Importe a coleção api-jwt.postman_collection.json localizada na raiz do projeto e utilize os diferentes endpoints disponíveis para interagir com a API.

Autenticação

A API utiliza autenticação baseada em JWT para proteger os endpoints. Para acessar as rotas protegidas, você precisa fornecer um token JWT válido no cabeçalho da requisição.

Para obter o token JWT, faça uma requisição POST para /api/v1/login enviando as credenciais de um usuário existente no corpo da requisição. O token JWT será retornado na resposta da requisição. Inclua esse token no cabeçalho da requisição para acessar as rotas protegidas, utilizando o formato:

Authorization: Bearer <token>

Detalhes técnicos

  • Restrição de acesso é feita utilizando Policies com regras adicionais e tipos de usuário definidos.
  • Foi utilizado o padrão Conventional Commits
  • Foi utilizado o Pest para realizar os Testes
  • O ambiente de desenvolvimento está totalmente containerizado utilizando o Laravel Sail e Docker

Containerização com Laravel Sail e Docker

O ambiente de desenvolvimento está totalmente containerizado utilizando o Laravel Sail e Docker. O Laravel Sail é uma maneira simples de configurar um ambiente de desenvolvimento local com Docker para projetos Laravel. Ele fornece um ambiente consistente e isolado para executar o aplicativo Laravel, juntamente com todas as suas dependências. Com o Docker, é possível garantir a portabilidade e a reprodução do ambiente de desenvolvimento em diferentes máquinas.

A utilização do Laravel Sail facilita a configuração do ambiente de desenvolvimento, fornecendo uma estrutura pré-configurada com os serviços necessários, como banco de dados, servidor web e outros. Além disso, a containerização permite isolar o ambiente de desenvolvimento, evitando conflitos entre dependências e facilitando a colaboração em equipe.

Padrão de Commits Conventional Commit

Neste projeto, foi adotado o padrão de commits Conventional Commit para fornecer uma estrutura consistente e informativa para as mensagens de commit. Esse padrão ajuda a transmitir claramente a intenção de cada commit e facilita a geração de changelogs automatizados.

Como funciona o padrão Conventional Commit?

O padrão Conventional Commit segue uma convenção específica para as mensagens de commit, que consiste em três partes principais: tipo, escopo e descrição. Cada parte é separada por dois-pontos (:). Aqui está uma descrição detalhada de cada parte:

  1. Tipo: Indica a natureza do commit e é representado por palavras-chave específicas. Alguns exemplos comuns de tipos são:

    • feat: Novo recurso adicionado ao projeto.
    • fix: Correção de bug.
    • docs: Alterações na documentação.
    • chore: Atualizações relacionadas a tarefas de manutenção.
    • refactor: Refatoração de código existente.
    • test: Adição ou modificação de testes.
  2. Escopo (opcional): Refere-se à parte específica do projeto que está sendo afetada pelo commit. Nem todos os commits terão um escopo.

  3. Descrição: Fornece uma breve descrição do que foi realizado no commit. Deve ser claro e conciso.

Ao seguir o padrão Conventional Commit e utilizar emojis para os tipos de commit, você contribui para um histórico de commits mais consistente e compreensível, facilitando a colaboração e o acompanhamento das mudanças no projeto.

Testes com Pest Framework

Neste projeto, optei por utilizar o framework Pest para realizar os testes. Mas afinal, por que utilizei o Pest?

Padrão de Teste do Pest

Primeiramente, é importante destacar que o Pest segue um padrão de teste diferente do PHPUnit, que é o framework de teste mais comumente utilizado. Enquanto o PHPUnit utiliza uma estrutura baseada em classes e métodos para escrever testes, o Pest adota uma abordagem mais descritiva, utilizando funções auxiliares como test, it, expect, entre outras. Essa abordagem torna os testes mais legíveis e expressivos, seguindo o conceito de "teste como especificação".

Benefícios do Pest

Agora, vamos aos benefícios que me levaram a escolher o Pest como framework de teste para este projeto:

  • Sintaxe expressiva e legível: A sintaxe fluente e descritiva do Pest facilita a leitura e compreensão dos testes, tornando-os mais claros e intuitivos para mim e para outros membros da equipe.

  • Execução paralela de testes: O Pest permite a execução de testes em paralelo, o que é especialmente útil em projetos maiores, onde o tempo de execução dos testes pode ser significativo. Com a execução paralela, ganho uma melhoria no desempenho e consigo obter resultados mais rapidamente.

  • Análise de cobertura de código: O Pest integra-se facilmente com ferramentas de análise de cobertura de código, o que me permite identificar áreas do código que não estão sendo testadas adequadamente. Isso contribui para melhorar a qualidade dos testes e garantir uma cobertura abrangente.

  • Modo de observação (watch mode): O Pest possui um recurso de modo de observação que monitora automaticamente as alterações nos arquivos de teste. Isso significa que, durante o desenvolvimento, posso realizar alterações no código e os testes relevantes serão executados automaticamente, proporcionando um fluxo de trabalho mais ágil e eficiente.

  • Testes de arquitetura (ainda não utilizado neste projeto): Embora não tenha sido aplicado neste projeto em particular, o Pest oferece recursos para realizar testes de arquitetura, o que é útil para verificar se as dependências e estruturas do projeto estão configuradas corretamente. Essa funcionalidade pode ser explorada em futuros projetos, caso necessário.

Sobre a relação com o PHPUnit

É importante mencionar que o Pest é construído em cima do PHPUnit, que é um framework de teste amplamente utilizado e confiável. O Pest utiliza o PHPUnit como base, fornecendo uma camada adicional de abstração e recursos específicos para testes mais descritivos. Portanto, posso aproveitar a robustez e a confiabilidade do PHPUnit, ao mesmo tempo em que utilizo a sintaxe expressiva e os recursos adicionais do Pest.

Executando os testes

Para executar os testes utilizando o Pest neste projeto, você pode seguir as seguintes etapas:

  1. Inicie o ambiente de desenvolvimento utilizando o Laravel Sail:
./vendor/bin/sail up -d

Certifique-se de ter as dependências do projeto instaladas corretamente antes de executar os testes.

  1. Execute os testes utilizando o comando a seguir:
./vendor/bin/sail test

Isso irá executar todos os testes definidos no projeto.

Além disso, o Pest oferece recursos avançados que podem ser úteis durante a execução dos testes. Aqui estão alguns exemplos:

  • Execução paralela dos testes: Para executar os testes em paralelo e acelerar ainda mais o processo, utilize o seguinte comando:
./vendor/bin/sail test --parallel
  • Análise de tempo de execução (Profiling): Para identificar os testes mais lentos e otimizar o projeto, você pode executar a análise de tempo de execução. Utilize o seguinte comando:
./vendor/bin/sail test --profie
  • Análise de cobertura de testes: O Pest também oferece a possibilidade de realizar uma análise de cobertura de testes. Para isso, execute o seguinte comando:
./vendor/bin/sail test --coverage

Essas são algumas opções que o Pest oferece para auxiliar na execução e análise dos testes. Aproveite esses recursos para garantir a qualidade e confiabilidade do seu código.

About

This is an example of a JWT (JSON Web Token) Authentication API built with Laravel. An API allows registering users, logging in and accessing protected routes with JWT authentication.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages