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

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

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.