Esse repositório é para a avaliação da vaga de desenvolvedor PHP da empresa GeekPot IT.
Construir uma API RESTful com os seguintes casos:
- Como visitante eu devo conseguir criar uma conta utilizando meu email e uma senha, e ao concluir com sucesso meu cadastro devo receber um email de confirmação.
- Como cliente da API eu devo conseguir autenticar utilizando uma API Key e uma Secret Key geradas automaticamente no momento do meu cadastro.
- Como cliente da API meu token de acesso deve se renovar a cada 5 minutos, e expirar após 15 minutos de inatividade.
- Como cliente da API eu devo ter um método de lookup, onde posso requisitar a lista de todos os resources e métodos aos quais tenho permissão de acessar.
- Como cliente da API eu não posso ter acesso a nenhum registro que não seja de minha propriedade.
- Como administrador da API eu devo poder listar e visualizar detalhes de todos os usuários registrados.
- Como administrador da API eu devo poder alterar, suspender o acesso e deletar qualquer usuário registrado.
- Como administrador da API eu devo poder listar todos os usuários deletados.
Com a experiência de anos que eu tenho com Laravel, decidi usa-lo para agilizar o desenvolvimento. Vale lembrar que o Laravel é um dos frameworks mais utilizados atualmente.
Além disso, utilizei o conceito de OAuth2 para tratar a autenticação e autorização dos requests na API. Para isso, utilizei uma biblioteca para o Laravel feito pelo user lucadegasperi.
Para enviar o e-mail transacional, eu utilizei a plataforma do Sendgrid. A integração já é feita junto com o Laravel, que utiliza o Guzzle HTTP para fazer os requests para o Sendgrid.
Utilizei o Homestead como ambiente de desenvolvimento.
Você deve clonar esse repositório em uma pasta que fique confortável para você conseguir executá-lo. Recomendo o Homestead, já citado anteriormente.
Após clonar o repositório, você vai precisar do Composer. Você deve ir até a raiz do repositório e rodar o comando:
$ composer install
Esse comando irá baixar as dependências do projeto e executar os scripts de instalação. Você precisar criar um arquivo .env na raiz do projeto. Esse arquivo guarda váriaveis de ambiente. Para isso, basta rodar o seguinte comando:
$ cp .env.example .env
Você irá precisar preencher esse arquivo com algumas dessas váriaveis, por exemplo, a seção de conexão com banco de dados. Veja um exemplo abaixo de como ficaria:
APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomString
APP_URL=http://api.geekpot.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=geekpot
DB_USERNAME=homestead
DB_PASSWORD=secret
Com o arquivo criado, você irá precisar gerar uma key da app que o Laravel utiliza. Para gerar essa key, eles criaram uma plataforma de comandos, chamada Artisan. Basta você rodar:
$ php artisan key:generate
Estamos quase lá! Agora precisamos criar nossas tabelas e preenche-las com os dados iniciais. Para isso, execute os dois próximos comandos:
$ php artisan migrate
$ php artisan db:seed
Pronto! Você instalou corretamente o projeto! Caso algo dê errado, estou disponível no [email protected] ou no Skype: cesar.o.almeida
As rotas da API podem ser vistas aqui.
Um teste muito bom, pensando em conceitos modernos, como o OAuth2 e eu tenho experiência com essa teoria utilizado. Foi um teste desafiador e, principalemente, longo. Gastei muito tempo procurando uma plataforma de envio de e-mail sem verificação de domínio e com a ativação da conta.
Como o prazo é de apenas um dia, não deu para fazer testes unitários com os serviços dos usuários e não deu para utilizar um sistema de cache e utilizar um processo de filas para colocar o envio do e-mail em paralelo e diminuir o tempo de resposta da rota de cadastro.