Leer hoe u een RESTful API kunt maken met behulp van Flask en Postgres, zodat gegevens naadloos kunnen worden uitgewisseld tussen uw app en externe systemen.

Application Programming Interfaces (API's) zijn een essentieel onderdeel van het bouwen en verbinden van verschillende systemen, waardoor uw applicaties kunnen communiceren en gegevens kunnen uitwisselen met andere services.

Hoewel backend-ontwikkeling meer inhoudt dan alleen het schrijven van API's, omvat het ook het schrijven van bedrijfslogica aan de serverzijde en het ontwerpen van een efficiënt systeem architecturen en andere belangrijke functies, lees verder om te leren hoe u een eenvoudige CRUD REST API bouwt met Flask (een lichtgewicht Python-framework) en Postgres databank.

Flask gebruiken om backend-API's te bouwen

Fles is een lichtgewicht Python-framework dat een aantal functies biedt om het schrijven van backend-API's voor webclients die zijn geschreven met verschillende technologieën, zoals React en Angular, te vereenvoudigen.

instagram viewer

U vindt de broncode van dit project hierin GitHub-opslagplaats.

Deze gids helpt u bij het schrijven van een REST API die de vier CRUD-bewerkingen implementeert: maken, lezen, bijwerken en verwijderen om gebruikersgegevens te beheren die zijn opgeslagen in een Postgres-database.

Zet een Postgres-database op

Ga om te beginnen naar OlifantenSQL, een cloudgebaseerde oplossing voor het hosten van databases die een platform biedt voor het maken en beheren van Postgres-databases in de cloud, aanmelden en inloggen op de overzichtspagina van uw account.

Klik op de Nieuwe instantie maken knop om een ​​nieuwe instantie voor uw toepassing te maken.

Geef de naam van uw instantie op en selecteer het gratis abonnement en selecteer ten slotte de regio waar de instantie wordt gehost om het installatieproces te voltooien.

Nadat de instantie is gemaakt, navigeert u naar de instellingenpagina en kopieert u het database-URL, gebruikt u deze om een ​​verbinding met de database tot stand te brengen.

Stel een Flask-server in

Maak op uw terminal een projectmap aan en wijzig de huidige map in die nieuwe map.

Controleer voordat u Flask installeert of u Python versie 3.6+ op uw computer gebruikt. Als dit niet het geval is, moet u de nieuwste versie installeren Python versie.

python --versie

Daarna installeren virtualenv, om een ​​geïsoleerde virtuele ontwikkelomgeving te creëren.

pip virtualenv installeren

Voer vervolgens de onderstaande opdracht uit om een ​​virtuele omgeving te maken.

virtualenv venv

Activeer ten slotte de virtuele omgeving.

# Op Windows: 
.\venv\Scripts\activeren
# Op Unix of MacOS:
source venv/bin/activeren

Installeer de vereiste pakketten

Maak in de hoofdmap van uw projectmap een vereisten.txt bestand en voeg deze pakketten toe.

kolf
python-dotenv
psycopg2-binair

Installeer vervolgens de pakketten.

pip install -r vereisten.txt

De psycopg2-binair is een Python-bibliotheek die fungeert als middleware, zodat u verbindingen kunt maken met uw Postgres-database en verschillende databasebewerkingen kunt uitvoeren.

Maak ten slotte een .env bestand en plak uw database-URL.

DATABASE_URL= uw database-URL

Maak de Flask-server

Maak tot slot een app.py bestand in de hoofdmap en voeg de onderstaande code toe.

importeren os 
importeren psychopg2
van dotenv importeren load_dotenv
van kolf importeren Kolf, verzoek, jsonify

load_dotenv()

app = Fles (__naam__)
url = os.getenv("DATABASE_URL")
verbinding = psycopg2.connect (url)

@app.get("/")
defthuis():
opbrengst"Hallo Wereld"

Deze code stelt een exemplaar van de Flask-toepassing in. Vervolgens maakt het een verbinding met de database die is opgegeven in de URL-tekenreeks en stelt ten slotte een thuisroute in die een tekenreeks als antwoord retourneert.

Maak de REST API die CRUD-bewerkingen mogelijk maakt

Bouw nu de REST API die de vier CRUD-bewerkingen implementeert.

Maak een demotabel

Maak een gebruikerstabel in de database.

Voeg in het app.py-bestand de onderstaande code toe.

CREATE_USERS_TABLE = "MAAK TABEL INDIEN NIET BESTAAT gebruikers (ID SERIËLE PRIMAIRE SLEUTEL, naam TEKST);"

met verbinding:
met verbinding.cursor() als cursor:
cursor.execute (CREATE_USERS_TABLE)

  • Deze code maakt een nieuwe PostgreSQL-tabel met de naam gebruikers met twee kolommen.
  • Het gebruikt de psycopg2-verbindingsmethode om de verbinding met de database tot stand te brengen en maakt een nieuw cursorobject met behulp van de verbinding.cursor methode die wordt gebruikt om uit te voeren SQL-query's.

1. Definieer de POST-methode

Maak de postroute om gegevens toe te voegen.

INSERT_USER_RETURN_ID = "INSERT INTO gebruikers (naam) WAARDEN (%s) RETURNING id;"
@app.route("/api/user", methods=["POST"])
defmaak_gebruiker():
gegevens = verzoek.get_json()
naam = gegevens["naam"]
met verbinding:
met verbinding.cursor() als cursor:
cursor.execute (INSERT_USER_RETURN_ID, (naam,))
user_id = cursor.fetchone()[0]
opbrengst {"ID kaart": gebruikersnaam, "naam": naam, "bericht": f"Gebruiker {naam} gemaakt."}, 201
  • De SQL-queryreeks definieert een SQL-instructie die wordt uitgevoerd met behulp van de cursor.uitvoeren methode om een ​​nieuwe rij met de naam van een gebruiker in te voegen in het gebruikers tabel in de database. Het retourneert de nieuw aangemaakte gebruikers-ID.
  • De maak_gebruiker functie krijgt een naam als parameter om in de database op te slaan terwijl de cursor.fetchone methode wordt aangeroepen om de nieuw aangemaakte gebruikers-ID op te halen. Ten slotte wordt een woordenboek geretourneerd met de ID en naam van de nieuw aangemaakte gebruiker, samen met een bericht dat aangeeft dat de gebruiker met succes is aangemaakt.

2. Definieer de GET-methode

Definieer twee get-routes: één om alle gegevens in de database op te halen en twee om specifieke gegevens uit de database op te halen op basis van de ID.

SELECT_ALL_USERS = "SELECTEER * UIT gebruikers;"

@app.route("/api/user", methods=["GET"])
defget_all_users():
met verbinding:
met verbinding.cursor() als cursor:
cursor.execute (SELECT_ALL_USERS)
gebruikers = cursor.fetchall()
als gebruikers:
resultaat = []
voor gebruiker in gebruikers:
resultaat.toevoegen({"ID kaart": gebruiker[0], "naam": gebruiker[1]})
opbrengst jsonify (resultaat)
anders:
opbrengst jsonify({"fout": f"Gebruikers niet gevonden."}), 404

@app.route("/api/gebruiker/", methoden=["KRIJGEN"])
defkrijg_gebruiker(gebruikersnaam):
met verbinding:
met verbinding.cursor() als cursor:
cursor.uitvoeren("SELECTEER * UIT gebruikers WHERE id = %s", (gebruikersnaam,))
gebruiker = cursor.fetchone()
als gebruiker:
opbrengst jsonify({"ID kaart": gebruiker[0], "naam": gebruiker[1]})
anders:
opbrengst jsonify({"fout": f"Gebruiker met ID {gebruikersnaam} niet gevonden."}), 404

  • Deze eerste API-route verwerkt HTTP GET-verzoeken om alle gebruikers uit de database op te halen. Het haalt alle gebruikers uit de database en retourneert de resultaten in JSON-indeling in het antwoord.
  • Deze tweede API-route handelt HTTP GET-verzoeken af ​​voor het ophalen van gegevens voor een specifieke gebruiker uit de database. Het neemt de gebruikersnaam als parameter, haalt de gegevens van de gebruiker op uit de database en retourneert de resultaten in een JSON-indeling in het antwoord.

3. Definieer de PUT-methode

Maak de putroute om de opgeslagen gegevens in de database bij te werken.

@app.route("/api/gebruiker/", methoden=["PUT"])
defupdate_gebruiker(gebruikersnaam):
gegevens = verzoek.get_json()
naam = gegevens["naam"]
met verbinding:
met verbinding.cursor() als cursor:
cursor.execute (UPDATE_USER_BY_ID, (naam, user_id))
als cursor.rijtelling == 0:
opbrengst jsonify({"fout": f"Gebruiker met ID {gebruikersnaam} niet gevonden."}), 404
opbrengst jsonify({"ID kaart": gebruikersnaam, "naam": naam, "bericht": f"Gebruiker met ID {gebruikersnaam} bijgewerkt."})
  • De update_gebruiker functie neemt de gebruikers-ID-parameter als invoer en gebruikt deze om de naam van de opgegeven gebruiker in de database bij te werken.
  • Als de update is gelukt, retourneert deze een JSON-object met de bijgewerkte gebruikers-ID, naam en een succesbericht in het antwoord.

4. Definieer de DELETE-methode

Implementeer de verwijderroute om de opgeslagen gegevens van een specifieke gebruiker in de database te verwijderen.

@app.route("/api/gebruiker/", methods=["VERWIJDEREN"])
defVerwijder gebruiker(gebruikersnaam):
met verbinding:
met verbinding.cursor() als cursor:
cursor.execute (DELETE_USER_BY_ID, (user_id,))
als cursor.rijtelling == 0:
opbrengst jsonify({"fout": f"Gebruiker met ID {gebruikersnaam} niet gevonden."}), 404
opbrengst jsonify({"bericht": f"Gebruiker met ID {gebruikersnaam} verwijderd."})
  • Deze API-route verwerkt de verwijderfunctionaliteit van een specifieke gebruiker uit de database op basis van hun ID. Als de gebruiker niet wordt gevonden, retourneert deze een 404-statuscode met een foutmelding. Als de verwijderbewerking echter is gelukt, retourneert deze een JSON-object met een succesbericht in het antwoord.

REST API's schrijven met Flask

Deze gids laat zien hoe je Flask en Postgres kunt gebruiken om daarnaast een eenvoudige CRUD REST API te bouwen, hoe om een ​​databaseverbinding tot stand te brengen en verschillende SQL-query's uit te voeren om gegevens te lezen en te schrijven naar een databank. U kunt nu een eenvoudige REST API maken die de vier CRUD-bewerkingen aankan die in elke webtoepassing vereist zijn.

Of u nu een eenvoudige blog of een complexe webtoepassing bouwt, Flask en Postgres bieden krachtige functies en mogelijkheden die nodig zijn om een ​​robuust backend-systeem te creëren. Als alternatief kunt u andere technologieën zoals FastAPI en MongoDB gebruiken om RESTful API's te bouwen.