Python → Python projekti → Python REST API


Napredni Python REST API (Flask RESTful)


Projekat 12 od 12

□ Ovo je pravi backend projekat — sledeći korak ka profesionalnom programiranju.

U ovom projektu pravimo napredni REST API koristeći Flask i Flask-RESTful.

Za razliku od prethodne lekcije, ovde uvodimo:

  • rad sa bazom podataka (SQLite)
  • organizaciju koda
  • rad sa ID-jevima
  • realističan API dizajn
Ovo je prvi korak ka pravim backend sistemima koji se koriste u industriji.

Potrebni alati

  • Python 3
  • Flask
  • Flask-RESTful
  • SQLite (ugrađena baza)
  • Postman ili browser

Instalacija


pip install flask
pip install flask-restful

Struktura projekta


projekat/
│
├── app.py
├── database.db
U većim projektima koristićeš više fajlova (models, routes...), ali ovde sve držimo jednostavno.

Napredni REST API sa bazom


from flask import Flask, request
from flask_restful import Resource, Api
import sqlite3

app = Flask(__name__)
api = Api(app)

def get_db():
    return sqlite3.connect("database.db")

# Kreiranje tabele (pokreni jednom)
def create_table():
    conn = get_db()
    cursor = conn.cursor()
    cursor.execute("""
        CREATE TABLE IF NOT EXISTS books (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            title TEXT,
            author TEXT
        )
    """)
    conn.commit()
    conn.close()

create_table()

class BookList(Resource):

    def get(self):
        conn = get_db()
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM books")
        rows = cursor.fetchall()
        conn.close()

        books = []
        for row in rows:
            books.append({
                "id": row[0],
                "title": row[1],
                "author": row[2]
            })

        return books

    def post(self):
        data = request.get_json()

        if not data.get("title"):
            return {"error": "Title je obavezan"}, 400

        conn = get_db()
        cursor = conn.cursor()
        cursor.execute("INSERT INTO books (title, author) VALUES (?, ?)",
                       (data["title"], data.get("author", "")))
        conn.commit()
        conn.close()

        return {"message": "Knjiga dodata"}, 201


class Book(Resource):

    def get(self, book_id):
        conn = get_db()
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM books WHERE id=?", (book_id,))
        row = cursor.fetchone()
        conn.close()

        if row:
            return {
                "id": row[0],
                "title": row[1],
                "author": row[2]
            }

        return {"error": "Nije pronađeno"}, 404

    def delete(self, book_id):
        conn = get_db()
        cursor = conn.cursor()
        cursor.execute("DELETE FROM books WHERE id=?", (book_id,))
        conn.commit()
        conn.close()

        return {"message": "Obrisano"}

api.add_resource(BookList, '/books')
api.add_resource(Book, '/books/<int:book_id>')

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

Kako radi ovaj API?

  • /books (GET) → vraća sve knjige
  • /books (POST) → dodaje novu knjigu
  • /books/<id> (GET) → vraća jednu knjigu
  • /books/<id> (DELETE) → briše knjigu

Ključna razlika u odnosu na osnovni API

  • podaci se čuvaju u bazi (ne u listi)
  • postoji trajnost podataka
  • koristimo SQL upite
  • radimo sa ID-jevima

Testiranje API-ja


# GET
http://127.0.0.1:5000/books

# POST
{
  "title": "Python",
  "author": "Marko"
}

Česte greške

  • ❌ baza nije kreirana
  • ❌ pogrešan JSON format
  • ❌ nedostaje title
  • ❌ pogrešan URL

Kako dalje unaprediti projekat?

  • dodati PUT (update)
  • dodati autentifikaciju (login)
  • razdvojiti kod u više fajlova
  • koristiti ORM (SQLAlchemy)
  • deploy na server
Ovo su stvari koje rade pravi backend developeri.

Mini izazovi

  • Dodaj update (PUT) metodu
  • Dodaj polje "year"
  • Dodaj pretragu po naslovu

Povezane lekcije i projekti


Često postavljana pitanja

Koja je razlika između ovog i prethodnog API-ja?

Ovde koristimo bazu podataka i radimo realniji backend sistem.

Da li je Flask dovoljno dobar za ozbiljne projekte?

Da — Flask se koristi u mnogim realnim aplikacijama.

Šta dalje učiti?

Autentifikaciju, baze, deploy i frontend povezivanje.