REST API = Representational State Transfer Application Programming Interface
(Röviden: webes felület, amin keresztül programok adatot kérhetnek és küldhetnek HTTP-vel.)
Olyan "ajtó", amin keresztül programok beszélgetnek egymással.
Olyan szabályrendszer, ami azt mondja, hogyan építsünk webes API-kat egyszerűen és következetesen.
CRUD alkalmazás - adatbázis alapműveletek
Jó URL-ek:
Összefoglalva:
REST API = egyszerű, szabványos mód programok közti kommunikációra HTTP-n keresztül.
Fókusz: jó URL-ek, megfelelő HTTP módszerek, biztonság és egyértelmű hibakezelés.
JSON (JavaScript Object Notation) egy könnyű, szöveges adatcsere-formátum, amely emberi olvasásra és gépi feldolgozásra egyaránt alkalmas.
Adatok strukturált ábrázolására és továbbítására kliens és szerver között (pl. webes API-k), konfigurációs fájlokban és adatmentésnél.
Példa: JavaScript object:
const user = {
id: 1,
name: "János",
email: "janos@example.com",
phone: "+36-30-123-4567"
};
JSON-ben
{
"id": 1,
"name": "János",
"email": "janos@example.com",
"phone": "+36-30-123-4567"
}
Flask egy könnyű Python webkeretrendszer, amit egyszerű weboldalak és API-k gyors megírására használnak.
Weboldalak, űrlapok, REST API-k és kis szolgáltatások készítésére.
Kis „magja” van: csak a legfontosabb dolgokat adja (útvonalak, kérés/válasz, sablonok). Amit még akarunk (adatbázis, űrlapkezelés, autentikáció), azt kiegészítőkkel adhatjuk hozzá.
Werkzeug nevű HTTP könyvtárra (alap hálózati műveletek), és Jinja2 sablonmotorra (HTML sablonokhoz).
Egy kis Python fájlban létrehozunk egy Flask példányt, és dekorátorokkal (pl. @app.route('/')) hozzárendelunk függvényeket URL-ekhez. Ezek a függvények kezelik a bejövő kéréseket és visszaadják a válaszokat.
| Fogalom | Leírás |
|---|---|
| app | A Flask‑alkalmazás objektum (Flask(__name__)). |
| route | Dekorátor (@app.route) amely URL‑t köt egy view‑függvényhez. |
| view‑function | A HTTP‑kérésre válaszoló függvény; visszaad str, Response, vagy sablonrender. |
| template | Jinja2‑alapú HTML‑sablon, amely változókat és vezérlőstruktúrákat támogat. |
| request / response | flask.request a bejövő adatokat (form, JSON, query) tartalmazza; a view‑function által visszaadott érték lesz a response. |
# app.py
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
# 1️. egyszerű szöveges válasz
@app.route('/')
def index():
return 'Hello, World!'
# 2️. dinamikus útvonal paraméterrel
@app.route('/greet/<name>')
def greet(name):
return f'Hello, {name}!'
# 3️. JSON API
@app.route('/api/add', methods=['POST'])
def add():
data = request.get_json() # {"a": 3, "b": 5}
result = data['a'] + data['b']
return jsonify({'result': result})
# 4️. HTML sablon renderelése
@app.route('/page')
def page():
user = {'name': 'Alice', 'age': 30}
return render_template('page.html', user=user)
if __name__ == '__main__':
# debug‑mode automatikus újratöltéssel
app.run(debug=True)
templates/page.html<!doctype html>
<html>
<head><title>Flask oldal</title></head>
<body>
<h1>Hello, {{ user.name }}!</h1>
<p>Kor: {{ user.age }}</p>
</body>
</html>
Erősen ajánlott virtuális környezetet használni.
$ pip install flask # telepítés
$ python app.py # elindul a szerver a http://127.0.0.1:5000/ címen
| Funkció | Flask‑plug‑in |
|---|---|
| Adatbázis (SQLAlchemy) | Flask‑SQLAlchemy |
| űrlapkezelés & validáció | Flask‑WTF |
| Auth / login | Flask‑Login |
| REST‑API | Flask‑RESTful vagy Flask‑API |
| Migrációk | Flask‑Migrate |
| CORS | Flask‑CORS |
Itt egy másik egyszerű, működő Flask példa: egy űrlapot megjelenít GET-nél és feldolgoz POST-nál (Jinja2 sablonnal). Fájlok: app.py és templates/form.html.
app.py
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
@app.route('/', methods=['GET'])
def show_form():
return render_template('form.html')
@app.route('/submit', methods=['POST'])
def submit_form():
name = request.form.get('name', '').strip()
birthdate = request.form.get('birthdate', '').strip()
gender = request.form.get('gender', '').strip()
phone = request.form.get('phone', '').strip()
errors = []
if not name:
errors.append('Név kötelező.')
if not birthdate:
errors.append('Születési dátum kötelező.')
if gender not in ('male', 'female', 'other'):
errors.append('Neme érvénytelen.')
if not phone:
errors.append('Telefonszám kötelező.')
if errors:
return render_template('form.html', errors=errors,
form_data={'name': name, 'birthdate': birthdate, 'gender': gender, 'phone': phone}), 400
data = {'name': name, 'birthdate': birthdate, 'gender': gender, 'phone': phone}
return jsonify(status='success', data=data), 200
if __name__ == '__main__':
app.run(debug=True)
templates/form.html
<!doctype html>
<html lang="hu">
<head>
<meta charset="utf-8">
<title>Űrlap</title>
</head>
<body>
<h1>Adatok</h1>
{% if errors %}
<ul style="color: red;">
{% for e in errors %}
<li>{{ e }}</li>
{% endfor %}
</ul>
{% endif %}
<form action="{{ url_for('submit_form') }}" method="post">
<label>Név:<br>
<input type="text" name="name" value="{{ form_data.name if form_data else '' }}" required>
</label><br><br>
<label>Születési dátum:<br>
<input type="date" name="birthdate" value="{{ form_data.birthdate if form_data else '' }}" required>
</label><br><br>
<label>Neme:<br>
<select name="gender" required>
<option value="">-- válassz --</option>
<option value="male" {% if form_data and form_data.gender=='male' %}selected{% endif %}>Férfi</option>
<option value="female"{% if form_data and form_data.gender=='female'%}selected{% endif %}>Nő</option>
<option value="other" {% if form_data and form_data.gender=='other' %}selected{% endif %}>Egyéb</option>
</select>
</label><br><br>
<label>Telefonszám:<br>
<input type="tel" name="phone" value="{{ form_data.phone if form_data else '' }}" required>
</label><br><br>
<button type="submit">Küldés</button>
</form>
</body>
</html>
Használat:
telepítés: pip install flask
mappaszerkezet: app.py és templates/form.html
futtatás: python app.py
böngésző: http://127.0.0.1:5000/