Este exercício se destina a você se familiarizar com a programação fundamental de back -end/servidor de maneira interativa, bem como para você se sentir confortável em um ambiente moderno de Python/Flask.
A leitura do seguinte ajudará você a ter uma noção do quadro geral quando se trata de desenvolver o código do lado do servidor APIs/escrita e como ele se encaixa no contexto de um aplicativo Web maior:
Este projeto será dividido em várias partes. Depois de terminar este projeto, você deve enviá -lo seguindo as instruções abaixo.
Este exercício é devido antes desta segunda -feira, 17 de setembro, às 23h59. Se você passou mais de 10 horas no total, incluindo seu trabalho com o React-Exercise, envie o que você tem!
Para qualquer dúvida, sinta -se à vontade para enviar um e -mail para [email protected].
Instruções de instalação para Mac e Windows.
Outro ótimo recurso para qualquer coisa no Python, incluindo a instalação é o Guia do Hitchhiker para o Python.
Verifique se você tem as versões corretas executando os seguintes comandos em seu terminal:
python3 -V
pip3 -V
pipenv --version
Primeiro, bifurque este repositório. O botão do garfo no seu canto superior direito. O que isso faz é copiar esse repositório para sua conta. Agora você deve ter um repositório com o nome <yourusername>/flask-exercise .
Deve ser assim (meu nome de usuário é TKO22): 
Em seguida, clone este repositório (clique no botão verde dizendo "clone ou download", escolha http e copie e cole o local <url> ) e vá para ele:
$ git clone <url>
$ cd flask-exercise
Em seguida, configure seu ambiente virtual e instale as dependências do Python necessárias para executar este aplicativo. Usamos Pipenv, que configura tudo automaticamente, dado um pipfile e pipfile.lock. O PipFile usa o VirtualEnv, que é um ambiente Python virtual isolado de outros projetos Python, incapaz de interferir ou ser afetado por outros programas Python na mesma máquina. Portanto, você é capaz de executar versões diferentes do mesmo pacote ou mesmo versões Python diferentes.
pipenv install --skip-lock
Você deve estar nesse ambiente virtual para iniciar este servidor. Para fazer isso:
pipenv shell
Então, para iniciar o servidor Run:
(backend-exercise-o4dc6oDL)$ python app.py
Nota: Este continuará sendo um processo em execução no seu terminal, portanto, você precisará abrir uma nova guia ou janela para executar outros comandos.
Para parar o servidor, pressione Control-C .
Para sair do seu ambiente virtual, que é chamado de backend-exercise-[something here] , execute:
(backend-exercise-o4dc6oDL)$ deactivate
Você também pode adicionar pipenv run antes de qualquer comando, em vez de precisar executar pipenv shell . por exemplo, pipenv run python app.py
Antes de fazer alterações no código, crie uma nova ramificação. Normalmente, as ramificações são nomeadas com base no recurso ou no bugsix que está sendo abordado, mas para este projeto, nomeie sua filial com seu próprio nome para que seu revisor possa seguir facilmente:
git checkout -b <YOUR_NAME>
Os nomes das filiais devem ser minúsculos e não podem conter espaços. Em vez de espaços, use hífens. Por exemplo:
git checkout -b varun-munjeti
Iniciar o servidor o tornará um processo continuamente em execução no localhost:5000 . Para fazer solicitações ao seu servidor, use o Postman.
Primeiro, faça uma solicitação para GET o / terminal. Como o servidor está em execução no localhost:5000 , o URL do ponto de extremidade completo é localhost:5000/ .

Tente chamar o ponto final /mirror . Primeiro, observe o código do terminal para ver como você pode especificar parâmetros de URL. Em seguida, faça uma solicitação no Postman para localhost:5000/mirror/<name> :

Esses exercícios o levarão a criar uma API RESTful usando o Flask! Não queremos que você passe por todo o incômodo de configurar uma instância de banco de dados, por isso criamos dados dummy e uma interface de banco de dados simulada para interagir com ele. Por uma questão de facilidade, toda a lógica do aplicativo menos a lógica do MockDB será implementada no app.py Para projetos maiores, os terminais da API geralmente serão separados em diferentes arquivos chamados views .
Antes de começar, dê uma boa olhada na função create_response e como ela funciona. Certifique -se de seguir as diretrizes de como usar essa função; caso contrário, sua API não seguirá as convenções adequadas!
Dê uma olhada no banco de dados simulado. Os dados fictícios iniciais são definidos em mockdb/dummy_data.py . É isso que "existirá" no "banco de dados" quando você iniciar o servidor.
As funções definidas em mockdb/mockdb_interface.py são como você pode consultar o MockDB. Em app.py , onde você estará escrevendo sua API, isso foi importado com o nome db . Portanto, quando você escreve o código para seus pontos de extremidade, você pode chamar as funções de interface do banco de dados como db.get('users') .
Quando você modifica seu código, o servidor será atualizado automaticamente, a menos que seu código não seja compilado; nesse caso, o servidor pare de funcionar e você precisará reiniciá -lo manualmente depois de corrigir seu código.
Defina o endpoint:
GET /users
Isso deve retornar uma resposta JSON adequadamente formatada que contém uma lista de todos os user no MockDB. Se você ligar para esse terminal imediatamente após o início do servidor, obtenha essa resposta no Postman:
{
"code": 200,
"message": "",
"result": {
"users": [
{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
},
{
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
},
{
"age": 23,
"id": 3,
"name": "Varun",
"team": "NNB"
},
{
"age": 24,
"id": 4,
"name": "Alex",
"team": "C2TC"
}
]
},
"success": true
}
Defina o endpoint:
GET /users/<id>
Isso deve recuperar um único usuário que tenha o id fornecido da solicitação.
Se não houver um usuário com o id fornecido, retorne um 404 com uma message descritiva.
Estenda o primeiro caminho /users , adicionando a capacidade de consultar os usuários com base na equipe em que estão. Você não deve usar um parâmetro de URL como fez na Parte 2. Em vez disso, use uma sequência de consulta.
Se team for fornecida como um parâmetro de sequência de consulta, retorne apenas os usuários que estão nessa equipe. Se não houver usuários na team fornecida, retorne uma lista vazia.
Para este exercício, você pode ignorar quaisquer parâmetros de sequência de consulta que não sejam team .
No Postman, você pode fornecer parâmetros de sequência de consulta que gravam a sequência de consulta no URL da sua solicitação ou pressionando o botão Params a seguir para Send . Fazer isso preencherá automaticamente o URL da solicitação.
O seguinte deve acontecer
GET /users?team=LWB
{
"code": 200,
"message": "",
"result": {
"users": [{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
}, {
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
}]
},
"success": true
}

Defina o endpoint:
POST /users
Este terminal deve criar um novo usuário. Cada solicitação também deve enviar um name , age e parâmetro team no body da solicitação. A propriedade id será criada automaticamente no MockDB.
Uma solicitação bem -sucedida deve retornar um código de status de 201 e retornar o usuário recém -criado.
Se algum dos três parâmetros necessários não for fornecido, não crie um novo usuário no banco de dados e retorne um 422 com uma message útil. Em geral, suas mensagens devem fornecer ao usuário/desenvolvedor feedback útil sobre o que eles fizeram de errado e como eles podem corrigi -lo.
É assim que você pode enviar parâmetros body do Postman. Certifique -se de não confundir isso com os parâmetros de consulta! 
Defina o endpoint:
PUT /users/<id>
Aqui precisamos fornecer id de um usuário, pois precisamos especificar qual usuário atualizar. O body para esta solicitação deve conter os mesmos atributos que a solicitação POST da Parte 4.
No entanto, a diferença com essa solicitação PUT é que apenas os valores com as chaves fornecidas ( name , age , team ) sejam atualizadas e quaisquer parâmetros não fornecidos não alterarão o atributo correspondente no usuário que está sendo atualizado.
Você não precisa explicar os parâmetros body , desde que não sejam name , age ou team .
Se o usuário com o id fornecido não puder ser encontrado, retorne uma 404 e uma message útil.
Defina o endpoint:
DELETE /users/<id>
Isso excluirá o usuário com o id associado. Retorne uma message útil, embora nada precise ser especificado no result da resposta.
Se o usuário com o id fornecido não puder ser encontrado, retorne uma 404 e uma message útil.
Vamos escrever testes de unidade! Os testes de unidade são muito importantes para o desenvolvimento de software. Ele permite verificar automaticamente se nossa funcionalidade funciona ou não, pois testar manualmente tudo é muito lento e propenso a erros. O desenvolvimento orientado a testes é um processo de desenvolvimento de software no qual definimos uma especificação, escrevemos testes para essa especificação, implementamos a funcionalidade e usamos os testes para validar se funciona. Fizemos um pouco disso para você, pois os testes para a Parte 1-3 são escritos. Para testá -los:
pipenv install --dev
pipenv run pytest
Se suas alterações funcionaram, você verá uma linha verde dizendo 5 passed . Se não o fizerem, siga os traços de pilha e corrija sua implementação. Quando eles funcionam, vamos escrever testes para as partes 3-6 .
Usamos o Pytest, uma estrutura de teste python útil que encontra e executa automaticamente os métodos Python que começam com test , como test_get_index . No nosso caso, temos um arquivo de teste chamado test_app.py , que contém todos os testes para as partes 1-3.
Cada método também aceita um objeto client , que é automaticamente injetado pelo Pytest. client é um acessório de teste, algo que você pode usar em vários testes, oferecendo uma linha de base fixa para seus testes. Ao inicializar, o Pytest procura conftest.py e coleta todos os acessórios. No nosso caso, temos um acessório client , que fornece um cliente de teste de frasco, que podemos usar para testar facilmente nossa API. Veja como você pode usar o cliente de teste do Flask para fazer outros tipos de solicitações e como você pode usar a carga útil da solicitação.
Quando terminar de todas as etapas, empurre suas alterações no repositório do Github!
Vamos correr preto, um formatador Python, antes de enviar. Isso remove todos os argumentos sobre como queremos estilizar seu código Python e oferece aos revisores um estilo padronizado para revisar. Você deve instalá -lo com pipenv install --dev
pipenv run black .
Antes de enviar um PR, você terá que empurrar sua filial para uma filial remota (a que está no Github, não local).
Verifique se você está em sua filial:
git branch
Se você deseja garantir que todas as suas confirmações estejam dentro:
git log
Pressione Q para sair da tela git log .
Empurre suas confirmações para o seu ramo remoto:
git push
Na primeira vez em que você faz isso, você pode receber um erro, pois sua filial remota ainda não existe. Normalmente, ele diz o comando correto a ser usado:
git push --set-upstream origin <YOUR_BRANCH_NAME>
Nota: isso só precisa ser feito na primeira vez em que você pressiona uma nova filial. Você pode usar apenas git push depois.
Depois que isso estiver pronto, envie um e -mail para [email protected] com o link para o seu repositório bifurcado e seu nome de filial. Precisamos dessas duas coisas para ver sua submissão.