---
# System prepended metadata

title: 1. Curs SOC UF2. Model de programació web i base de dades
tags: [SOC, ' UF2']

---

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