Desenvolvimento de um simples CRUD considerando a Entidade conforme Figura-1.
$ python3 --version
ou
$ python --version
2. Se Python 2.7 ou posterior não estiver instalado, instale Python com o gerenciador de pacote de distribuição.
$ sudo apt-get install python3
3. Para verificar se o Python foi instalado corretamente, abra um prompt de comando ou shell e execute o comando a seguir.
$ python3 --version
$ git clone https://github.com/luisrfpam/flaskcontact.git
$ sudo apt install git
$ git --version
Use o apt para instalar o virtualenv no Linux
$ sudo apt install python-virtualenv
Acesse o diretório do projeto
$ cd <folder project name>
Criando o ambiente virtual no Python3:
O virtualenv é realmente simples. Ele basicamente cria uma cópia de todos os diretórios necessários para que um programa Python seja executado, isto inclui:
- As bibliotecas comuns do Python (standard library);
- O gerenciador de pacotes pip;
- O próprio binário do Python (Python 2.x/3.x);
- As dependências que estiverem no diretório site-packages;
- Seu código fonte descrevendo sua aplicação.
- Assim, ao instalar uma nova dependência dentro do ambiente criado pelo virtualenv, ele será colocado no diretório site-packages relativo à esse ambiente, e não mais globalmente.
$ python3 -m venv <name of environment>
$ python3 -m venv env
Você precisar ativar o ambiente virtual e para isso execute no seu terminal
$ . <name of environment>/bin/activate
$ . env/bin/activate
ou
$ source env/bin/activate
$ pip install Flask-RESTful
Flask é instalado automaticamente com todas as dependências.
O dotenv é usado para ler o par de chave e valor do arquivo .env e adicioná-lo à variável de ambiente. Podemos usá-lo para gerenciar as configurações do aplicativo durante as fases de desenvolvimento e produção
$ pip install python-dotenv
Após configurar a API vamos colocá-la em operação!
Acesse o diretório do projeto
$ cd <folder project name>
Vamos configurar uma variável de ambiente
$ export FLASK_CONTACT=app.py
Após configurado vamos rodar o Flask para iniciar o servidor http://127.0.0.1:5000/
$ flask run
Se tudo ocorrer bem :) Irá aparecer para você a mensagem no terminal Running on http://127.0.0.1:5000/
Agora você pode consumir a API!!!
$ sudo apt install curl
GET
Listar todos os contatos: GET /contacts
$ curl -o saida.json http://127.0.0.1:5000/contacts/
Retorna: 200 OK
{
"data": [
{
"cpf": "88889577320",
"email": "luis@gmail.com",
"endereco": "Rua Vicente Menezes, n.100, Alto Rio",
"nome": "Luis Roberto Marinho",
"telefone": "92984030269"
},
{
"cpf": "98684577420",
"email": "carlos@gmail.com",
"endereco": "Rua Castro Alves, n.45, São Jose",
"nome": "Carlos Eduardo Silva",
"telefone": "19994090268"
},
{
"cpf": "46574977320",
"email": "pedro@gmail.com",
"endereco": "Rua Rio Negro, n.14, Lirio do Vale",
"nome": "Pedro Henrique Silvestre",
"telefone": "17994020368"
},
{
"cpf": "90434277310",
"email": "paulo@gmail.com",
"endereco": "Rua Eduardo Ribeiro, n.104, Centro",
"nome": "Luis Paulo Freire",
"telefone": "51984040360"
}
],
"message": "Recurso(s) Contacts recuperado.",
"resource": "Contacts",
"status": 200
}
Listar um contato passando como paramêtro o CPF (se existir): GET /contacts/88889577320
$ curl -o saida.json http://127.0.0.1:5000/contacts/88889577320
Retorna: 200 OK
{
"data": {
"cpf": "88889577320",
"email": "luis@gmail.com",
"endereco": "Rua Vicente Menezes, n.100, Alto Rio",
"nome": "Luis Roberto Marinho",
"telefone": "92984030269"
},
"message": "Recurso(s) Contacts recuperado.",
"resource": "Contact",
"status": 200
}
Listar um contato passando como paramêtro o CPF (se não existir): GET /contacts/88889577328
$ curl -o saida.json http://127.0.0.1:5000/contacts/88889577328
Retorna: 200 OK
{
"message": "Recurso Sem dados.",
"resource": "Contact",
"status": 200
}
POST
Salvar um contato: POST /contacts
$ curl -X POST -H 'Content-Type: application/json' -d { "cpf": "12365670900", "nome": "Felipe Bastos", "endereco" : "Rua Central Campinas, n.01, São Paulo",
"telefone" : "19997457967", "email" : "felipe@gmail.com" } http://127.0.0.1:5000/contacts
data:
{
"cpf": "12365670900",
"nome": "Felipe Bastos",
"endereco" : "Rua Central Campinas, n.01, São Paulo",
"telefone" : "19997457967",
"email" : "felipe@gmail.com"
}
Retorna: 201 CREATED
{
"data": {
"cpf": "12365670900",
"email": "felipe@gmail.com",
"endereco": "Rua Central Campinas, n.01, São Paulo",
"nome": "Felipe Bastos",
"telefone": "19997457967"
},
"message": "Recurso Contacts criado.",
"resource": "Contacts",
"status": 201
}
PUT
Atualizar um contato existente passando como parâmetro o CPF: PUT /contacts/12365670900
$ curl -X PUT -H 'Content-Type: application/json' -d {"nome": "Felipe Bastos Castro", "endereco" : "Rua Joaquim Marcelino, n.126, São Paulo",
"telefone" : "19997457967", "email" : "felipe@gmail.com"} http://127.0.0.1:5000/contacts/12365670900
data:
{
"nome": "Felipe Bastos Castro",
"endereco" : "Rua Joaquim Marcelino, n.126, São Paulo",
"telefone" : "19997457967",
"email" : "felipe@gmail.com"
}
Retorna: 200 OK
{
"data": {
"cpf": "12365670900",
"email": "felipe@gmail.com",
"endereco": "Rua Joaquim Marcelino, n.126, São Paulo",
"nome": "Felipe Bastos Castro",
"telefone": "19997457967"
},
"message": "Recurso Contacts atualizado.",
"resource": "Contact",
"status": 200
}
Atualizar um contato não existente passando como parâmetro o CPF: PUT /contacts/12365670901
$ curl -X PUT -H 'Content-Type: application/json' -d {"nome": "Felipe Bastos Castro", "endereco" : "Rua Joaquim Marcelino, n.126, São Paulo",
"telefone" : "19997457967", "email" : "felipe@gmail.com"} http://127.0.0.1:5000/contacts/12365670901
data:
{
"nome": "Felipe Bastos Castro",
"endereco" : "Rua Joaquim Marcelino, n.126, São Paulo",
"telefone" : "19997457967",
"email" : "felipe@gmail.com"
}
Retorna: 404 NOT FOUND
{
"message": "Este(a) contato não existe.",
"resource": "Contact"
}
DELETE
Deletar um contato existente passando como paramêtro o CPF: DELETE /contacts/88889577320
$ curl -X DELETE http://127.0.0.1:5000/contacts/88889577320
Retorna: 204 No Content
Deletar um contato não existente passando como paramêtro o CPF: DELETE /contacts/88889577321
$ curl -X DELETE http://127.0.0.1:5000/contacts/88889577321
Retorna: 404 NOT FOUND
{
"message": "Este(a) contato não existe.",
"resource": "Contact"
}
Nesta seção vamos trabalhar com TDD (Testes automatizados)
$ sudo apt-get install python-pytest
O Pytest é um framework ou uma ferramenta para escrever testes no desenvolvimento de software e bibliotecas em Python.
Todos os testes estão dentro do diretório tests
Para executar os testes e ver os resultados execute o seguinte comando:
$ pytest -v
Retorno esperado dos testes:
Obrigado! Att, Luis Portela