Stundas uzdevums: Saprast REST principus un izveidot pareizi strukturētu API spēļu rezultātu pārvaldībai.
70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
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.
Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 12.3 REST API izstrāde; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html", temats="12.3 REST API izstrāde")
if __name__ == "__main__":
app.run(debug=True)
<h1>{{ temats }}</h1>
<p>Ja redzi šo tekstu pārlūkā, iesildīšanās piemērs darbojas.</p>
app.py, bet HTML daļu ievieto templates/index.html.Pievieno šīs stundas paņēmienu kā nelielu, strādājošu projekta daļu.
apstrada_gajienu(), rezultats vai routes.py.Pārbaudi, vai algoritms darbojas paredzami ar dažādiem datiem.
Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.
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