REST API

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.)

Mi az API?

Olyan "ajtó", amin keresztül programok beszélgetnek egymással.

Mi az a REST?

Olyan szabályrendszer, ami azt mondja, hogyan építsünk webes API-kat egyszerűen és következetesen.

Alapelvek röviden:

HTTP módszerek (mit csinálnak):

CRUD alkalmazás - adatbázis alapműveletek

Jó URL-ek:

Hibakezelés:

Biztonság egyszerűen:

Eszközök és tippek:

Rövid példa 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

JSON (JavaScript Object Notation) egy könnyű, szöveges adatcsere-formátum, amely emberi olvasásra és gépi feldolgozásra egyaránt alkalmas.

Mire való:

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.

Szintaxis alapjai:

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

Flask egy könnyű Python webkeretrendszer, amit egyszerű weboldalak és API-k gyors megírására használnak.

Mire jó?

Weboldalak, űrlapok, REST API-k és kis szolgáltatások készítésére.

Miért könnyű?

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á.

Mire épül?

Werkzeug nevű HTTP könyvtárra (alap hálózati műveletek), és Jinja2 sablonmotorra (HTML sablonokhoz).

Hogyan néz ki egy alap alkalmazás?

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.

Alapvető koncepciók

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.

Gyors „Hello, World!” példa

# 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>

Futtatás

Erősen ajánlott virtuális környezetet használni.

  1. Virtuális környezet létrehozása (Windows - PowerShell):
  2. Aktiválás
$ pip install flask # telepítés $ python app.py # elindul a szerver a http://127.0.0.1:5000/ címen

Tipikus bővítmények (plug‑inek)

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 %}></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/