- Introduir els conceptes sobre serveis web
- Diferències entre API SOAP i API REST
- Conèixer les característiques dels serveis web API Restful
- Conèixer el llenguatge de marques
json
- Utilitzar python per realitzar peticions a un servei web API restful
- Utilitzar python para tractar la informació obtinguda del servei web en formato json
- És un mètode de comunicació entre màquines/programes mitjançant la xarxa (normalment Internet)
- Les pàgines web les utilitzen les persones.
- Els serveis web el utilitzen els programes.
- Web Programable: mitjançant diferents APIS (web API) podem configurar gran quantitat d'aplicacions basades en recursos de la web.
- Podem consumir (només lectura) recursos d'un servei web
- Podem modificar (lectura/escriptura) els recursos de un servei web
- Bàsicament podem trobar dos tipus de APIs:
- API REST (Representational State Transfer): on s'intercanviarà informació principalment en format JSON.
- API SOAP (Simple Object Access Protocol): on s'intercanviarà informació principalment en format XML
Tal com hem vist en capítols anteriors JSON (JavaScript Object Notation) és un llenguatge de marques que ens permet representar informació.
{
"colors": [
{
"color": "black",
"code": {
"rgba": [255,255,255,1],
"hex": "#000"}
},
{
"color": "white",
"code": {
"rgba": [0,0,0,1],
"hex": "#FFF"}
}
]
}
Els fitxers JSON tenen dos estructures básiques que es mapegen amb objectes de Python:
- Diccionaris
- Llistes
-
Podem utilitzar Python3 per crear programes que utilitzin API REST per consumir/modificar els recursos d'un servei web. Per fer-ho haurem de fer servir duess llibreries:
requests
: Ens permet realitzar peticions HTTP i gestionar la resposta del servidor. Podeu consultar més informació en aquest linkjson
: Ens permet treballar amb informació en formato json, que serà la que recuperarem o enviarem al servei web.
Una API es fonamentalment un programa que espera les peticions darrera una URL on nosaltres anirem a consultar la informació que proveeix la API. Aquesta URL es un punt d'entrada, i cadascuna de les opcions de consulta/modificació les anomenarem Endpoints.
Així per exemple l'entrada a l'API de consulta del temps es : https://api.openweathermap.org/data/3.0/onecall . Els endpoints que té aquesta API son per exemple:
- https://api.openweathermap.org/data/3.0/onecall?lat=30.489772&lon=-99.771335
- https://api.openweathermap.org/data/3.0/onecall?lat={lat}&lon={lon}&units={units}
- Normalment per connectar a una API Rest haurem de seguir els següents passos:
- Identificar-nos a la web que proveeix la API. Ens donarà un usuari i password
- A partir de l'usuari/password generar un token. Un token serveix per afegir-ho a la crida de l'API i així el proveidor de l'API pot saber qui està fent la consulta i aplicar càrrecs en cas de que sigui de pagament. El token no és res més que un hash que es fa sobre les dades de l'usuari normalment. El token es personal no s'ha de donar mai a conèixer a ningú.
- Consultar a la documentació de l'API com s'han de fer les consultes.
- Amb la llibreria
requests
, preparar com s'ha de fer la consulta i executar la petició - Recuperar les dades que retorna la API en format JSON
- Tractar el JSON.
-
Consultes amb
curl
des de línia de comandes, o directament amb el navegador:-
API sense key: https://swapi.co (Veure Documentació)
- curl https://swapi.dev/api/
- curl https://swapi.dev/api/people/1/ | json_pp
-
API amb key: https://openweathermap.org/. Ver Documentació de l'API: https://openweathermap.org/api. Accedir i crear una API key nova.
- export open_weather_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- curl https://api.openweathermap.org/data/2.5/weather?q=Sevilla&units=metric&APPID=open_weather_key&mode=json'
-
-
¿Com podem realitzar consultes http amb python3? Utilizant la llibrería
requests
.-
Instal·lació de
requests
:python3 -m venv env source env/bin/activate
pip install requests
-
Consulta a swapi:
import requests r=requests.get("https://swapi.dev/api/people/1/") r.status_code r.json() datos=r.json() print(datos["name"]) >>> Luke Skywalker
- Consulta a openwheathermap:
import requests import os api_key=os.getenv("open_wheather_key") parametros={"q":"Sevilla","mode":"json","units":"metric","APPID":api_key} r=requests.get("http://api.openweathermap.org/data/2.5/weather",params=parametros) r.status_code >>>200 r.url >>>'http://api.openweathermap.org/data/2.5/weather?q=Sevilla&units=metric& APPID=xxx&mode=json' r.json() datos=r.json() print(datos["main"]["temp"])
-
- Exemple 1: Temperatura: https://openweathermap.org/api
- Exemple 2: Fútbol: https://es.besoccer.com/api/documentacion
- Exemple 3: Cine: https://developers.themoviedb.org/3/getting-started/introduction