Exemplo prático de Python para loja Açaí

Tutorial: Web Services em Python para a Tabela Clientes

Neste tutorial, vamos criar uma API REST simples em Python utilizando o Flask para consumir a tabela Clientes de um banco de dados SQLite. Você aprenderá como utilizar os principais verbos HTTP (GET, POST, PUT e DELETE) para realizar operações de leitura, criação, atualização e exclusão de registros.


Requisitos

  • Python 3 instalado
  • Pacote Flask (instalável via pip install flask)
  • Banco de dados SQLite já criado com a tabela clientes

Estrutura da Tabela Clientes

Considere que a tabela clientes foi criada com a seguinte estrutura:


CREATE TABLE clientes (
  id_cliente INTEGER PRIMARY KEY AUTOINCREMENT,
  nome TEXT NOT NULL,
  telefone TEXT,
  email TEXT
);

Código do Web Service

O código a seguir implementa uma API REST utilizando Flask. Ele define uma rota para cada operação (GET, POST, PUT e DELETE) na tabela clientes:


from flask import Flask, request, jsonify, abort
import sqlite3

app = Flask(__name__)
DATABASE = 'loja_acai.db'  # Nome do banco de dados SQLite

def get_db():
    """Abre uma conexão com o banco de dados e define o row_factory para retornar dicts."""
    conn = sqlite3.connect(DATABASE)
    conn.row_factory = sqlite3.Row
    return conn

# 1. GET /clientes - Retorna todos os clientes
@app.route('/clientes', methods=['GET'])
def get_clientes():
    conn = get_db()
    clientes = conn.execute("SELECT * FROM clientes").fetchall()
    conn.close()
    return jsonify([dict(row) for row in clientes])

# 2. GET /clientes/<id> - Retorna um cliente específico
@app.route('/clientes/<int:id>', methods=['GET'])
def get_cliente(id):
    conn = get_db()
    cliente = conn.execute("SELECT * FROM clientes WHERE id_cliente = ?", (id,)).fetchone()
    conn.close()
    if cliente is None:
        abort(404)
    return jsonify(dict(cliente))

# 3. POST /clientes - Cria um novo cliente
@app.route('/clientes', methods=['POST'])
def create_cliente():
    if not request.json or 'nome' not in request.json:
        abort(400)
    cliente = {
        'nome': request.json['nome'],
        'telefone': request.json.get('telefone', ''),
        'email': request.json.get('email', '')
    }
    conn = get_db()
    cur = conn.cursor()
    cur.execute("INSERT INTO clientes (nome, telefone, email) VALUES (?, ?, ?)",
                (cliente['nome'], cliente['telefone'], cliente['email']))
    conn.commit()
    cliente['id_cliente'] = cur.lastrowid
    conn.close()
    return jsonify(cliente), 201

# 4. PUT /clientes/<id> - Atualiza um cliente existente
@app.route('/clientes/<int:id>', methods=['PUT'])
def update_cliente(id):
    if not request.json:
        abort(400)
    campos = []
    valores = []
    for campo in ['nome', 'telefone', 'email']:
        if campo in request.json:
            campos.append(f"{campo} = ?")
            valores.append(request.json[campo])
    if not campos:
        abort(400)
    valores.append(id)
    conn = get_db()
    conn.execute(f"UPDATE clientes SET {', '.join(campos)} WHERE id_cliente = ?", valores)
    conn.commit()
    conn.close()
    return jsonify({'result': True})

# 5. DELETE /clientes/<id> - Remove um cliente
@app.route('/clientes/<int:id>', methods=['DELETE'])
def delete_cliente(id):
    conn = get_db()
    conn.execute("DELETE FROM clientes WHERE id_cliente = ?", (id,))
    conn.commit()
    conn.close()
    return jsonify({'result': True})

if __name__ == '__main__':
    app.run(debug=True)

Entendendo os Verbos HTTP

Neste exemplo, utilizamos os seguintes métodos HTTP:

  • GET: Utilizado para recuperar dados. Temos dois endpoints:
    • GET /clientes – retorna todos os clientes;
    • GET /clientes/<id> – retorna um cliente específico.
  • POST: Utilizado para criar um novo recurso. O endpoint POST /clientes recebe dados no formato JSON para inserir um novo cliente.
  • PUT: Utilizado para atualizar um recurso existente. O endpoint PUT /clientes/<id> recebe os campos que devem ser atualizados do cliente informado.
  • DELETE: Utilizado para remover um recurso. O endpoint DELETE /clientes/<id> exclui o cliente com o id informado.

Como Executar e Testar a API

Siga os passos abaixo para executar e testar a API:

  1. Salve o código em um arquivo, por exemplo, app.py.
  2. Certifique-se de que o banco de dados loja_acai.db existe e contém a tabela clientes.
  3. Instale o Flask se ainda não o fez: pip install flask
  4. Execute o aplicativo: python app.py
  5. Acesse os endpoints utilizando ferramentas como Postman ou o curl via linha de comando.

Conclusão

Este tutorial apresentou de forma didática como criar web services em Python para a tabela clientes utilizando Flask, explorando os verbos HTTP básicos necessários para a manipulação dos dados (GET, POST, PUT e DELETE). Essa estrutura pode ser facilmente expandida para incluir outras tabelas e funcionalidades em seu projeto.

Experimente testar e modificar os endpoints para adaptar à sua aplicação.