--- title: 1. Curs SOC UF2. Model de programació web i base de dades tags: SOC, UF2 --- # 1. Curs SOC UF2. Model de programació web i base de dades <div> <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licencia de Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br />Este obra está bajo una <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional</a>. </div> ![](https://i.imgur.com/k5uLXQJ.png) ## Introducció a la API REST. De l'anglés __REpresentational State Transfer__ segons la [Viquipèdia](https://ca.wikipedia.org/wiki/REST) és: > una arquitectura de programari pensada per sistemes distribuïts basats en hipermèdia, com ara el web. i també ens diu: > Un servei web REST és un model centrat en les dades. Els anomenats recursos venen identificats per URIs i poden ser manipulats mitjançant accions especificades a les capçaleres HTTP. El protocol HTTP, sobre el que treballen les API REST, funciona enviant peticions i rebent respostes; cada petició és independent de les anteriors (sense estat). Les peticions HTTP estan composades per les següents parts: 1. __Mètode o verb:__ és una paraula que indica la acció que volem aplicar al recurs. Els mètodes més comuns són: 1. GET: indica que volem llegir el recurs (safe). 2. HEAD: quan no volem executar cap acció, només consultar les capçaleres que enviaria el servidor (safe). 3. POST: indica que volem crear un nou recurs al servidor. 4. PUT: l'utilitzarem per a modificar recursos del servidor (idempotent). 5. DELETE: utilitzat per a esborrar recursos (idempotent). 2. __URI:__ Identifica de manera unívoca el recurs al que volem accedir. 3. __Capçaleres:__ proporcionen informació complemenària en forma de clau-valor. Per exemple: 'Content-Type: application/json'. 4. __Cos o body:__ Conté la resta d'informació que volem afegir a la nostra petició, en el nostre cas documents JSON amb tota la informació del recurs necessària per a efectuar la operació dessitjada. ## El framework Flask [Flask](https://flask-es.readthedocs.io/) és un framework que ens permet crear de manera molt rápida APIs REST amb Python. ### Instalació: Flask s'instala amb el gestor de paquets de python: pip. Llavors, necessitem tenir instalat 'pip' abans de poder instalar Flask. ```bash= $ sudo apt update; sudo apt install python3-pip ``` Un cop estem segurs de que tenim instalat pip, passem a instalar Flask: ```bash= $ python3 -m pip install Flask ``` Aquesta darrera operació ens instalarà Flask i les seves dependències, entre elles ' Werkzeug' i 'Jinja', la primera com a servidor d'aplicacions wsgi i la segona per a l'ús de plantilles HTML. Tornarem a parlar d'aquests conceptes més endavant. ### La nostra primera aplicació amb Flask. ```python= from flask import Flask # python3 -m pip install flask app = Flask(__name__) @app.route("/") def hello_world(): return '{"missatge": "Hola mon"}' if __name__ == "__main__": app.run() ``` Que al desar-lo al fitxer la_meva_api.py i executarlo veurem alguna cosa semblant a: ```bash= xavi@xavi-portatil:~$ python3 la_meva_api.py * Serving Flask app 'la_meva_api' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000 (Press CTRL+C to quit) ``` Si és així tindrem un servidor web a la nostra màquina que ens permetrà accedir a la nostra API pel port TCP/5000. I ja podem realitzar consultes des del nostre client web preferit: ![](https://i.imgur.com/nsM46sW.png) I he dit client web perquè no necessàriament ha de ser un navegador, també podem fer anar comandes de la consola Linux: ```bash= xavi@xavi-portatil:~$ curl http://localhost:5000 {"missatge": "Hola mon"} ``` És molt important poder executar aquesta prova correctament, ens assegura que tenim tot el necessari instalat correctament al nostre sistema abans de continuar amb coses més complicades a partir d'ara.