Tavs šīs stundas izaicinājums: Saprast REST principus un izveidot pareizi strukturētu API spēļu rezultātu pārvaldībai.
REST (Representational State Transfer) ir API projektēšanas stils, kas nosaka:
/api/speletaji/42).| Metode | URL | Darbība |
|---|---|---|
| GET | /api/speletaji | Saraksts ar visiem |
| GET | /api/speletaji/42 | Viens pēc ID |
| POST | /api/speletaji | Izveidot jaunu |
| PUT | /api/speletaji/42 | Aizstāt visu |
| PATCH | /api/speletaji/42 | Daļēji atjaunināt |
| DELETE | /api/speletaji/42 | Dzēst |
Pareizie statusa kodi: 200 OK, 201 Created, 204 No Content, 400 Bad Request, 401 Unauthorized, 404 Not Found, 500 Server Error.
Pievieno visas 5 standartmaršrutas spēļu rezultātiem.
app.py ar globālu sarakstu REZULTATI.GET /api/rezultati — visu sarakstu.GET /api/rezultati/<id> — viens vai 404.POST /api/rezultati — izveido jaunu (201).PUT /api/rezultati/<id> — aizstāj.DELETE /api/rezultati/<id> — dzēš (204 No Content).Pievieno query parametrus.
GET /api/rezultati?limit=10 — TOP 10 pēc punktiem.GET /api/rezultati?spele=quiz — tikai "quiz" spēles rezultāti.GET /api/rezultati?kartot=datums — pēc datuma.request.args.get("limit", default=100, type=int).Pārliecinies, ka API nevar "saplēst".
vards nav tukšs un punkti >= 0; atgriež 400 ar specifisku kļūdas tekstu.try/except: ja kļūda, atgriež 500 ar paziņojumu.@app.errorhandler(404), kas atgriež JSON, ne HTML.curl, sūtot nederīgus datus.app.py, models.py, validators.py.Automātiskā API dokumentācija.
pip install flask-smoresthttp://localhost:5000/swagger-ui un izpēti dokumentāciju.request.json vs request.args.from flask import Flask, jsonify, request, abort
app = Flask(__name__)
REZULTATI = []
@app.route("/api/rezultati", methods=["GET"])
def saraksts():
limit = request.args.get("limit", 100, type=int)
sakartoti = sorted(REZULTATI, key=lambda r: r["punkti"], reverse=True)
return jsonify(sakartoti[:limit])
@app.route("/api/rezultati", methods=["POST"])
def jauns():
d = request.json or {}
if not d.get("vards"): return jsonify({"kluda": "Trūkst vārds"}), 400
if d.get("punkti", 0) < 0: return jsonify({"kluda": "Negatīvi punkti"}), 400
d["id"] = len(REZULTATI) + 1
REZULTATI.append(d)
return jsonify(d), 201
@app.errorhandler(404)
def not_found(e):
return jsonify({"kluda": "Nav atrasts"}), 404