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:

  1. Client-Servidor: La separació de les preocupacions entre el client i el servidor.
  2. Sense Estat: Cada petició del client al servidor ha de contenir tota la informació necessària per entendre i processar la petició.
  3. Caché: Les respostes han de ser marcades com a cachéable o no-cachéable per millorar el rendiment.
  4. Interfície Uniforme: Una interfície uniforme simplifica i desacobla l'arquitectura, permetent que cada part evolucioni de manera independent.
  5. 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.

pip install Flask Flask-RESTful

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

  1. Importacions: Importem Flask, Api i Resource de flask_restful.
  2. Creació de l'Aplicació: Creem una instància de Flask i una instància d'Api.
  3. Definició del Recurs: Creem una classe HelloWorld que hereta de Resource. Aquesta classe defineix un mètode get que retorna un diccionari amb un missatge.
  4. Afegir el Recurs a l'API: Utilitzem api.add_resource per afegir el recurs a l'API i associar-lo amb la ruta /.
  5. 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:

{
    "hello": "world"
}

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

  1. Defineix el Model de Dades: Utilitza una llista per emmagatzemar les tasques.
  2. Crea els Recursos: Defineix els recursos per a les operacions CRUD.
  3. 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

  1. Model de Dades: Utilitzem una llista tasks per emmagatzemar les tasques.
  2. Definició del Recurs Task: La classe Task defineix els mètodes get, post, put i delete per gestionar les tasques.
  3. Parser de Peticions: Utilitzem reqparse.RequestParser per analitzar els arguments de les peticions.
  4. 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

Mòdul 2: Conceptes Bàsics de Flask

Mòdul 3: Formularis i Entrada d'Usuari

Mòdul 4: Integració de Bases de Dades

Mòdul 5: Autenticació d'Usuaris

Mòdul 6: Conceptes Avançats de Flask

Mòdul 7: APIs RESTful amb Flask

Mòdul 8: Desplegament i Producció

Mòdul 9: Proves i Millors Pràctiques

Mòdul 10: Extensions i Ecosistema de Flask

© Copyright 2024. Tots els drets reservats