Lær hvordan du oppretter et RESTful API ved å bruke Flask og Postgres, som tillater sømløs datautveksling mellom appen din og eksterne systemer.

Application Programming Interfaces (API) er en kritisk del av å bygge og koble sammen forskjellige systemer, slik at applikasjonene dine kan kommunisere og utveksle data med andre tjenester.

Mens backend-utvikling involverer mer enn bare å skrive API-er – dekker den også skriving av forretningslogikk på serversiden, design av effektivt system arkitekturer og andre nøkkelfunksjoner, les videre for å lære hvordan du bygger et enkelt CRUD REST API med Flask (et lett Python-rammeverk) og Postgres database.

Bruke Flask for å bygge Backend APIer

Kolbe er en lettvekter Python-rammeverk som gir en rekke funksjoner for å forenkle skriving av backend-APIer for nettklienter skrevet ved hjelp av forskjellige teknologier som React og Angular.

Du finner dette prosjektets kildekode i denne GitHub-depot.

Denne guiden vil lede deg gjennom å skrive en REST API som implementerer de fire CRUD-operasjonene

: opprett, les, oppdater og slett for å administrere brukerdata som er lagret i en Postgres-database.

Sett opp en Postgres-database

For å komme i gang, gå over til ElephantSQL, en skybasert databasevertsløsning som gir en plattform for å opprette og administrere Postgres-databaser på skyen, registrere deg og logge på kontoens oversiktsside.

Klikk på Opprett ny forekomst for å opprette en ny forekomst for applikasjonen din.

Oppgi navnet på forekomsten din og velg gratisplanen, og velg til slutt regionen der forekomsten skal være vert for å fullføre oppsettsprosessen.

Når forekomsten er opprettet, naviger til innstillingssiden og kopier database URL, vil du bruke den til å etablere en forbindelse med databasen.

Sett opp en flaskeserver

På terminalen din, opprett en prosjektmappe, og endre gjeldende katalog til den nye mappen.

Før du installerer Flask, bekreft at du kjører Python versjon 3.6+ på maskinen din. Hvis ikke, må du installere den nyeste Python versjon.

python --versjon

Etterpå, installer virtualenv, for å skape et isolert virtuelt utviklingsmiljø.

pip installer virtualenv

Deretter kjører du kommandoen nedenfor for å lage et virtuelt miljø.

virtualenv venv

Til slutt, aktiver det virtuelle miljøet.

# På Windows: 
.\venv\Scripts\aktiver
# På Unix eller MacOS:
kilde venv/bin/activate

Installer de nødvendige pakkene

Opprett en i rotkatalogen til prosjektmappen din krav.txt fil og legg til disse pakkene.

kolbe
python-dotenv
psychopg2-binær

Installer deretter pakkene.

pip install -r requirements.txt

De psychopg2-binær er et Python-bibliotek som fungerer som en mellomvare, slik at du kan etablere forbindelser med Postgres-databasen din og utføre ulike databaseoperasjoner.

Til slutt oppretter du en .env fil og lim inn databasens URL.

DATABASE_URL= databasens URL

Opprett Flask Server

Til slutt oppretter du en app.py fil i rotkatalogen, og legg til koden nedenfor.

import os 
import psychopg2
fra dotenv import load_dotenv
fra kolbe import Flask, request, jsonify

load_dotenv()

app = Kolbe (__navn__)
url = os.getenv("DATABASE_URL")
forbindelse = psychopg2.connect (url)

@app.get("/")
defhjem():
komme tilbake"Hei Verden"

Denne koden setter opp en forekomst av Flask-applikasjonen. Den oppretter deretter en tilkobling til databasen spesifisert i URL-strengen, og til slutt setter den opp en hjemrute som returnerer en streng som et svar.

Opprett REST API som aktiverer CRUD-operasjoner

Bygg nå REST API som implementerer de fire CRUD-operasjonene.

Lag en demotabell

Lag en brukertabell i databasen.

I app.py-filen legger du til koden nedenfor.

CREATE_USERS_TABLE = "LAG TABELL HVIS IKKE FINNES brukere (ID SERIEPRIMÆR NØKKEL, navn TEKST);"

med forbindelse:
med forbindelse.cursor() som markør:
cursor.execute (CREATE_USERS_TABLE)

  • Denne koden lager en ny PostgreSQL-tabell kalt brukere med to kolonner.
  • Den bruker koblingsmetoden psycopg2 for å etablere forbindelsen med databasen og oppretter et nytt markørobjekt ved å bruke tilkoblingsmarkør metode som brukes til å utføre SQL-spørringer.

1. Definer POST-metoden

Opprett innleggsruten for å legge til data.

INSERT_USER_RETURN_ID = "INSERT INTO users (navn) VERDIER (%s) RETURNING id;"
@app.route("/api/user", methods=["POST"])
defOpprett bruker():
data = request.get_json()
navn = data["Navn"]
med forbindelse:
med forbindelse.cursor() som markør:
cursor.execute (INSERT_USER_RETURN_ID, (navn,))
user_id = cursor.fetchone()[0]
komme tilbake {"id": bruker-ID, "Navn": Navn, "beskjed": f"Bruker {Navn} opprettet."}, 201
  • SQL-spørringsstrengen definerer en SQL-setning som vil bli utført ved hjelp av cursor.execute metode for å sette inn en ny rad med en brukers navn i brukernes tabell i databasen. Den returnerer den nyopprettede brukerens ID.
  • De Opprett bruker funksjonen tar inn et navn som en parameter for å lagre i databasen mens cursor.fetchone metoden kalles for å hente den nyopprettede brukerens ID. Til slutt returneres en ordbok som inneholder den nyopprettede brukerens ID og navn, sammen med en melding som indikerer at brukeren ble opprettet.

2. Definer GET-metoden

Definer to henteruter: én, for å hente alle dataene i databasen, og to, for å hente spesifikke data fra databasen basert på ID.

SELECT_ALL_USERS = "VELG * FRA brukere;"

@app.route("/api/user", methods=["GET"])
deffå_alle_brukere():
med forbindelse:
med forbindelse.cursor() som markør:
cursor.execute (SELECT_ALL_USERS)
brukere = cursor.fetchall()
hvis brukere:
resultat = []
til bruker i brukere:
result.append({"id": bruker[0], "Navn": bruker[1]})
komme tilbake jsonify (resultat)
ellers:
komme tilbake jsonify({"feil": f"Brukere ikke funnet."}), 404

@app.route("/api/bruker/", methods="GET"])
defget_user(bruker-ID):
med forbindelse:
med forbindelse.cursor() som markør:
cursor.execute("VELG * FRA brukere WHERE id = %s", (bruker-ID,))
bruker = cursor.fetchone()
hvis bruker:
komme tilbake jsonify({"id": bruker[0], "Navn": bruker[1]})
ellers:
komme tilbake jsonify({"feil": f"Bruker med ID {bruker-ID} ikke funnet."}), 404

  • Denne første API-ruten håndterer HTTP GET-forespørsler for å hente alle brukere fra databasen. Den henter alle brukere fra databasen og returnerer resultatene i et JSON-format i svaret.
  • Denne andre API-ruten håndterer HTTP GET-forespørsler for å hente data for en spesifikk bruker fra databasen. Den tar inn bruker-ID som en parameter, henter brukerens data fra databasen, og returnerer resultatene i et JSON-format i svaret.

3. Definer PUT-metoden

Opprett puteruten for å oppdatere de lagrede dataene i databasen.

@app.route("/api/bruker/", methods=["PUT"])
defupdate_user(bruker-ID):
data = request.get_json()
navn = data["Navn"]
med forbindelse:
med forbindelse.cursor() som markør:
cursor.execute (UPDATE_USER_BY_ID, (navn, bruker_id))
hvis cursor.rowcount == 0:
komme tilbake jsonify({"feil": f"Bruker med ID {bruker-ID} ikke funnet."}), 404
komme tilbake jsonify({"id": bruker-ID, "Navn": Navn, "beskjed": f"Bruker med ID {bruker-ID} oppdatert."})
  • De update_user funksjonen tar bruker-ID-parameteren som input og bruker den til å oppdatere navnet på den angitte brukeren i databasen.
  • Hvis oppdateringsoperasjonen er vellykket, returnerer den et JSON-objekt med oppdatert bruker-ID, navn og en suksessmelding i svaret.

4. Definer SLETT-metoden

Implementer sletteruten for å slette de lagrede dataene til en bestemt bruker i databasen.

@app.route("/api/bruker/", methods=["SLETT"])
defdelete_user(bruker-ID):
med forbindelse:
med forbindelse.cursor() som markør:
cursor.execute (DELETE_USER_BY_ID, (bruker-id,))
hvis cursor.rowcount == 0:
komme tilbake jsonify({"feil": f"Bruker med ID {bruker-ID} ikke funnet."}), 404
komme tilbake jsonify({"beskjed": f"Bruker med ID {bruker-ID} slettet."})
  • Denne API-ruten håndterer slettefunksjonaliteten til en spesifikk bruker fra databasen basert på deres ID. Hvis brukeren ikke blir funnet, returnerer den en 404-statuskode med en feilmelding. Men hvis sletteoperasjonen er vellykket, returnerer den et JSON-objekt med en suksessmelding i svaret.

Skrive REST APIer med Flask

Denne veiledningen viser hvordan du bruker Flask og Postgres for å bygge en enkel CRUD REST API ved siden av hvordan å etablere en databaseforbindelse og utføre forskjellige SQL-spørringer for å lese og skrive data til en database. Du kan nå lage en enkel REST API som kan håndtere de fire CRUD-operasjonene som kreves i en hvilken som helst nettapplikasjon.

Enten du bygger en enkel blogg eller en kompleks nettapplikasjon, tilbyr Flask og Postgres kraftige funksjoner og muligheter som kreves for å lage et robust backend-system. Alternativt kan du bruke andre teknologier som FastAPI og MongoDB for å bygge RESTful APIer.