En aquest tema, aprendrem què són les APIs RESTful, per què són importants i com podem crear-les utilitzant Flask. Les APIs RESTful són una manera estàndard de permetre la comunicació entre diferents aplicacions a través d'Internet. Aquestes APIs utilitzen els mètodes HTTP per realitzar operacions CRUD (Crear, Llegir, Actualitzar, Eliminar) sobre els recursos.
Què és una API RESTful?
Una API (Application Programming Interface) és un conjunt de regles que permeten que una aplicació es comuniqui amb una altra. REST (Representational State Transfer) és un estil arquitectònic per a la creació d'APIs que utilitza els mètodes HTTP estàndard.
Característiques de les APIs RESTful:
- Client-Servidor: La separació de les preocupacions entre el client i el servidor.
- Sense Estat: Cada petició del client al servidor ha de contenir tota la informació necessària per entendre i processar la petició.
- Caché: Les respostes han de ser marcades com a cachéable o no-cachéable per millorar el rendiment.
- Interfície Uniforme: Una interfície uniforme simplifica i desacobla l'arquitectura, permetent que cada part evolucioni de manera independent.
- Sistema en Capes: L'arquitectura pot estar composta per capes jeràrquiques que limiten el comportament de cada component.
Mètodes HTTP Utilitzats en REST
Mètode HTTP | Descripció | Operació CRUD |
---|---|---|
GET | Recupera informació d'un recurs | Llegir |
POST | Crea un nou recurs | Crear |
PUT | Actualitza un recurs existent | Actualitzar |
DELETE | Elimina un recurs | Eliminar |
Creant una API RESTful amb Flask
Instal·lació de Flask i Flask-RESTful
Primer, assegura't de tenir Flask instal·lat. També utilitzarem l'extensió Flask-RESTful
per simplificar la creació de les nostres APIs.
Configuració Bàsica
Comencem creant una aplicació Flask bàsica i configurant Flask-RESTful
.
from flask import Flask from flask_restful import Api, Resource app = Flask(__name__) api = Api(app) class HelloWorld(Resource): def get(self): return {'hello': 'world'} api.add_resource(HelloWorld, '/') if __name__ == '__main__': app.run(debug=True)
Explicació del Codi
- Importacions: Importem
Flask
,Api
iResource
deflask_restful
. - Creació de l'Aplicació: Creem una instància de Flask i una instància d'Api.
- Definició del Recurs: Creem una classe
HelloWorld
que hereta deResource
. Aquesta classe defineix un mètodeget
que retorna un diccionari amb un missatge. - Afegir el Recurs a l'API: Utilitzem
api.add_resource
per afegir el recurs a l'API i associar-lo amb la ruta/
. - Executar l'Aplicació: Executem l'aplicació en mode de depuració.
Prova de l'API
Executa l'aplicació i visita http://127.0.0.1:5000/
en el teu navegador. Hauries de veure la resposta JSON següent:
Exercici Pràctic
Objectiu
Crea una API RESTful que gestioni una llista de tasques. Cada tasca tindrà un id
, un títol
i un estat
(completada o no completada).
Passos
- Defineix el Model de Dades: Utilitza una llista per emmagatzemar les tasques.
- Crea els Recursos: Defineix els recursos per a les operacions CRUD.
- Configura les Rutes: Afegeix els recursos a l'API i defineix les rutes corresponents.
Solució
from flask import Flask, request from flask_restful import Api, Resource, reqparse app = Flask(__name__) api = Api(app) tasks = [] class Task(Resource): def get(self, task_id): for task in tasks: if task['id'] == task_id: return task, 200 return "Task not found", 404 def post(self, task_id): parser = reqparse.RequestParser() parser.add_argument("title") parser.add_argument("completed") args = parser.parse_args() for task in tasks: if task['id'] == task_id: return "Task with id {} already exists".format(task_id), 400 task = { "id": task_id, "title": args["title"], "completed": args["completed"] } tasks.append(task) return task, 201 def put(self, task_id): parser = reqparse.RequestParser() parser.add_argument("title") parser.add_argument("completed") args = parser.parse_args() for task in tasks: if task['id'] == task_id: task["title"] = args["title"] task["completed"] = args["completed"] return task, 200 task = { "id": task_id, "title": args["title"], "completed": args["completed"] } tasks.append(task) return task, 201 def delete(self, task_id): global tasks tasks = [task for task in tasks if task["id"] != task_id] return "Task deleted", 200 api.add_resource(Task, "/task/<int:task_id>") if __name__ == '__main__': app.run(debug=True)
Explicació del Codi
- Model de Dades: Utilitzem una llista
tasks
per emmagatzemar les tasques. - Definició del Recurs
Task
: La classeTask
defineix els mètodesget
,post
,put
idelete
per gestionar les tasques. - Parser de Peticions: Utilitzem
reqparse.RequestParser
per analitzar els arguments de les peticions. - Configuració de les Rutes: Afegim el recurs
Task
a l'API i definim la ruta/task/<int:task_id>
.
Prova de l'API
Utilitza eines com Postman
o curl
per provar les operacions CRUD de l'API.
Conclusió
En aquest tema, hem après què són les APIs RESTful, els mètodes HTTP que utilitzen i com crear una API RESTful bàsica amb Flask. Hem creat una API per gestionar una llista de tasques, implementant operacions CRUD completes. En els següents temes, aprofundirem en la creació de punts finals RESTful més complexos i la gestió de dades JSON.
Curs de Desenvolupament Web amb Flask
Mòdul 1: Introducció a Flask
- Què és Flask?
- Configuració del Teu Entorn de Desenvolupament
- Creant la Teva Primera Aplicació Flask
- Entenent l'Estructura d'una Aplicació Flask
Mòdul 2: Conceptes Bàsics de Flask
- Enrutament i Mapeig d'URL
- Gestió de Mètodes HTTP
- Renderització de Plantilles amb Jinja2
- Treballant amb Fitxers Estàtics
Mòdul 3: Formularis i Entrada d'Usuari
Mòdul 4: Integració de Bases de Dades
- Introducció a Flask-SQLAlchemy
- Definició de Models
- Realització d'Operacions CRUD
- Migracions de Bases de Dades amb Flask-Migrate
Mòdul 5: Autenticació d'Usuaris
- Registre d'Usuaris
- Inici i Tancament de Sessió d'Usuaris
- Hashing de Contrasenyes
- Gestió de Sessions d'Usuaris
Mòdul 6: Conceptes Avançats de Flask
- Blueprints per a Aplicacions Grans
- Gestió d'Errors
- Pàgines d'Error Personalitzades
- Registre i Depuració
Mòdul 7: APIs RESTful amb Flask
- Introducció a les APIs RESTful
- Creació de Punts Finals RESTful
- Gestió de Dades JSON
- Autenticació per a APIs
Mòdul 8: Desplegament i Producció
- Configuració de Flask per a Producció
- Desplegament a Heroku
- Desplegament a AWS
- Monitorització i Optimització del Rendiment
Mòdul 9: Proves i Millors Pràctiques
- Proves Unitàries amb Flask
- Proves d'Integració
- Cobertura de Proves
- Millors Pràctiques per al Desenvolupament amb Flask