Neste repositório você encontra o enunciado do exercício técnico para a vaga de trainee do programa Instruct The Women organizado pela Instruct em parceria com a Se Candidate, Mulher!.
Para saber mais sobre a empresa, leia o FAQ
- Possuir uma conta no GitHub
- Navegador Chrome ou Firefox
- Familiaridade com VS Code
- Conhecer HTTP e APIs Rest
- Saber sobre métodos HTTP como GET, POST e DELETE
- Conhecer sobre JSON e estruturas como listas e dicionários (Arrays e Objects)
Para esse exercício vamos utilizar um ambiente totalmente no browser e que não requer nenhuma instalação em seu computador.
É possível fazer o exercício localmente no seu computador. Nesse caso, a configuração de ferramentas para desenvolvimento é de sua responsabilidade e não temos como ajudar todas as participantes.
Primeiro, crie um fork deste repositório com sua conta no GitHub.
Em termos simples, um fork é cópia de um repositório. Leia a documentação do GitHub para saber mais.
A partir de agora, todas as ações devem ser feitas no seu fork!
Ele estará disponível dessa forma: https://github.com/SEU_LOGIN/instruct-the-women-2021
Abra o seu fork em uma aba do seu browser.
Você estará na sua cópia do repositório original.
Então, na sua cópia do repositório aberta, clique no botão abaixo:
Você será redirecionada para o gitpod.io e será necessário criar uma conta gratuita usando sua conta do GitHub.
Uma janela será aberta solicitando que você autorize o gitpod.io a acessar sua conta do GitHub.
Após a confirmação da solicitação de autorização, uma instância do VS Code será criada para você.
Aguarde alguns instantes, cerca de 2 a 3 minutos até o término do carregamento do ambiente.
Não temos como ajudar caso a caso as participantes na configuração de um ambiente de desenvolvimento. Se você não se sentir segura, use o ambiente pronto no browser que preparamos. |
---|
Caso já tenha experiência, também é possível clonar este repositório git no seu computador e desenvolver em ambiente local. Os requisitos são:
- Python 3.8
- pipenv
- Bibliotecas de desenvolvimento para PostgreSQL (libpq-dev)
Você vai precisar também do k6 para testar seu projeto. Para instalar o k6 basta baixar o binário para o seu sistema operacional (Windows, Linux ou Mac).
E para fazer o deploy quando terminar, é necessário instalar o Heroku CLI.
Se você está num computador com Windows, é recomendado seguir o tutorial da Microsoft para configurar um ambiente de desenvolvimento com WSL.
A equipe de desenvolvimento Bleeding Edge Enthusiasts (BEE) se orgulha de usar as tecnologias mais recentes e modernas. Essa regra também se aplica aos projetos desenvolvidos em Python pela equipe BEE.
Quando uma funcionalidade não existe nativamente no interpretador Python, a equipe faz uso dos chamados pacotes. De maneira simples, um pacote é um conjunto de códigos prontos para serem usados por qualquer pessoa e que facilitam o desenvolvimento.
Para garantir que todos seus projetos em Python estão usando as últimas versões disponíves dos pacotes, a equipe pensou em criar uma ferramenta batizada de MagPy. A ferramenta recebe um nome de projeto, uma lista de pacotes e devolve a última versão de cada pacote.
Um dos integrantes da BEE apontou que a API pública do PyPI poderia ser usada para esse fim.
Você deve desenvolver a MagPy, uma API REST que gerencia uma coleção de projetos, sendo:
- Cada projeto tem um nome e uma lista de pacotes.
- Cada pacote tem um nome e uma versão.
O cadastro de um projeto recebe o nome e a lista de pacotes. Cada pacote da lista precisa obrigatoriamente especificar um nome, mas a versão é opcional.
Sua API deve validar o projeto cadastrado: todos os pacotes informados devem estar cadastrados no PyPI. Portanto você deve verificar o nome e a versão do pacote.
Quando o pacote vem apenas com o nome, sua API deve assumir que é preciso usar a última versão publicada no PyPI.
Abaixo, alguns exemplos de chamadas que serão feitas nessa API:
POST /api/projects
{
"name": "titan",
"packages": [
{"name": "Django"},
{"name": "graphene", "version": "2.0"}
]
}
O código HTTP de retorno deve ser 201 e o corpo esperado na resposta é:
{
"name": "titan",
"packages": [
{"name": "Django", "version": "3.2.5"}, // Usou a versão mais recente
{"name": "graphene", "version": "2.0"} // Manteve a versão especificada
]
}
Se um dos pacotes informados não existir, ou uma das versões especificadas for inválida, um erro deve ser retornado.
Para uma chamada semelhante ao exemplo abaixo:
POST /api/projects
{
"name": "titan",
"packages": [
{"name": "pypypypypypypypypypypy"},
{"name": "graphene", "version": "1900"}
]
}
O código HTTP de retorno deve ser 400 e o corpo esperado na resposta é:
{
"error": "One or more packages doesn't exist"
}
Também deve ser possível visitar projetos previamente cadastrados, usando o nome na URL:
GET /api/projects/titan
{
"name": "titan",
"packages": [
{"name": "Django", "version": "3.2.5"},
{"name": "graphene", "version": "2.0"}
]
}
E deletar projetos pelo nome:
DELETE /api/projects/titan
Sua solução deve usar a API pública do PyPI. Não use outro caminho pra buscar as informações necessárias |
---|
Este repositório tem parte da solução implementada e você deve continuar para que o projeto atenda a especificação descrita acima. Também está adiantado algumas configurações para publicação do projeto no Heroku. Este projeto usa principalmente Django e Django REST framework.
O projeto tem as assinaturas de algumas funções e métodos para orientar uma solução, mas você pode alterar o código à vontade, desde que a solução final passe nos testes. Mais detalhes sobre isso na seção "Avaliação" do README.
As funções e métodos para implementar estão em 2 arquivos:
api/pypi.py
api/serializers.py
Em api/pypi.py
você escreverá algumas funções para fazer a integração com a
API do PyPI. Essas funções serão úteis para validar os dados recebidos pela API
desenvolvida.
Em api/serializers.py
falta implementar a persistência dos dados e usar
as funções criadas em api/pypi.py
para a validação os dados.
Nesse exercício incluímos testes usando a ferramenta k6. Com ela é possível testar o comportamento da API e validar se tudo está funcionando de acordo com a especificação.
Os testes básicos estão disponíveis neste repositório no arquivo
tests-open.js
. Use-os durante o desenvolvimento para avaliar se a sua API está correta.
Para rodar os testes, especifique a variável de ambiente "API_BASE" com o endereço base da API testada e no editor do gitpod.io, abra um novo terminal para executar o comando abaixo.
Exemplo de aplicação rodando no localhost na porta 8000:
k6 run -e API_BASE='http://localhost:8000/' tests-open.js
- Crie uma conta gratuita no Heroku
- Na página Account Settings role até "API Key" e clique em "reveal"
- No editor do gitpod.io, abra um novo Terminal.
- Autentique-se com
heroku login -i
digite o e-mail da sua conta. No lugar da senha, digite o valor que você conseguiu no passo 2. - No terminal digite
heroku create
para criar sua aplicação - No terminal digite
git push heroku
para fazer o deploy - No dashboard do Heroku entre no app que foi criado pelo passo anterior
- Na aba "Access" clique em "Add collaborator" e preencha com o e-mail
[email protected]
Pronto! Seu projeto foi publicado e a Instruct tem acesso para avaliá-lo!
Quando finalizar a implementação, adicione o usuário com e-mail
[email protected]
como colaborador do app publicado até o fim do prazo
estipulado. Isso nos garante acesso ao endereço em que sua API está publicada,
para seguir com os testes automatizados.
Você deve adicionar o usuário com e-mail [email protected] no app publicado no Heroku! Não é necessário adicionar acesso ao código fonte num repositório do GitHub. |
---|
Se você conseguiu chegar até aqui, parabéns!
Caso você tenha feito o deploy no Heroku com sucesso, poderemos avaliar seu código!
Nós executaremos dois conjuntos de testes na sua API:
- Testes básicos (iguais aos que estão no repositório usando
k6
) - Testes avançados (fechados)
Sua API deve passar ao menos nos testes básicos para avaliarmos.
Boa sorte!
As inscrições são feitas através das vagas publicadas no site: https://instruct.com.br/trabalhe-com-a-gente/
Nessa página estão listadas as vagas abertas e todos os detalhes de nosso processo seletivo.
Sempre publicamos quando novas vagas são abertas.
Você pode ler nosso Handbook. Ele é a referência completa sobre como a Instruct funciona.
Destaque especial para as atribuições do papel de Analista de Desenvolvimento Trainee