Lær, hvordan du opretter en RESTful API ved hjælp af Flask og Postgres, der tillader problemfri dataudveksling mellem din app og eksterne systemer.

Application Programming Interfaces (API'er) er en kritisk del af opbygningen og sammenkoblingen af ​​forskellige systemer, så dine applikationer kan kommunikere og udveksle data med andre tjenester.

Mens backend-udvikling involverer mere end blot at skrive API'er - det dækker også skrivning af server-side forretningslogik, design af effektivt system arkitekturer og andre nøglefunktioner, læs videre for at lære, hvordan du bygger en simpel CRUD REST API med Flask (en letvægts Python-ramme) og Postgres database.

Brug af Flask til at bygge backend-API'er

Kolbe er en letvægter Python-ramme der giver en række funktioner til at forenkle skrivning af backend-API'er til webklienter skrevet ved hjælp af forskellige teknologier såsom React og Angular.

Du kan finde dette projekts kildekode i denne GitHub-depot.

Denne guide vil guide dig gennem at skrive en

instagram viewer
REST API, der implementerer de fire CRUD-operationer: opret, læs, opdater og slet for at administrere brugerdata gemt i en Postgres-database.

Opsæt en Postgres-database

Gå over til for at komme i gang ElephantSQL, en cloud-baseret database-hosting-løsning, der giver en platform til at oprette og administrere Postgres-databaser i skyen, tilmelde dig og logge ind på din kontos oversigtsside.

Klik på Opret ny instans knappen for at oprette en ny instans til din applikation.

Angiv navnet på din forekomst og vælg den gratis plan, og vælg til sidst den region, hvor forekomsten skal hostes, for at afslutte opsætningsprocessen.

Når forekomsten er oprettet, skal du navigere til indstillingssiden og kopiere database URL, vil du bruge den til at oprette forbindelse til databasen.

Konfigurer en Flask Server

På din terminal skal du oprette en projektmappe og ændre den aktuelle mappe til den nye mappe.

Før du installerer Flask, skal du bekræfte, at du kører Python version 3.6+ på din maskine. Hvis ikke, skal du installere den nyeste Python version.

python --version

Installer derefter virtualenv, for at skabe et isoleret virtuelt udviklingsmiljø.

pip installer virtualenv

Kør derefter kommandoen nedenfor for at oprette et virtuelt miljø.

virtualenv venv

Til sidst skal du aktivere det virtuelle miljø.

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

Installer de nødvendige pakker

I rodmappen i din projektmappe skal du oprette en krav.txt fil og tilføje disse pakker.

kolbe
python-dotenv
psychopg2-binær

Installer derefter pakkerne.

pip install -r requirements.txt

Det psychopg2-binær er et Python-bibliotek, der fungerer som en middleware, så du kan etablere forbindelser med din Postgres-database og udføre forskellige databaseoperationer.

Til sidst skal du oprette en .env fil og indsæt din database-URL.

DATABASE_URL= din database-URL

Opret Flask Server

Til sidst skal du oprette en app.py fil i rodmappen, og tilføj koden nedenfor.

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

load_dotenv()

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

@app.get("/")
defhjem():
Vend tilbage"Hej Verden"

Denne kode opsætter en forekomst af Flask-applikationen. Den opretter derefter en forbindelse til databasen angivet i URL-strengen og opretter til sidst en hjemrute, der returnerer en streng som et svar.

Opret REST API, der aktiverer CRUD-operationer

Byg nu REST API, der implementerer de fire CRUD-operationer.

Opret en demo tabel

Opret en brugertabel i databasen.

Tilføj koden nedenfor i app.py-filen.

CREATE_USERS_TABLE = "OPRET TABEL, HVIS IKKE FINDER brugere (id SERIEPRIMÆR NØGLE, navn TEKST);"

med forbindelse:
med forbindelse.cursor() som cursoren:
cursor.execute (CREATE_USERS_TABLE)

  • Denne kode opretter en ny PostgreSQL-tabel kaldet brugere med to søjler.
  • Den bruger psycopg2-forbindelsesmetoden til at etablere forbindelsen til databasen og opretter et nyt markørobjekt ved hjælp af forbindelse.markør metode, som bruges til at udføre SQL-forespørgsler.

1. Definer POST-metoden

Opret postruten for at tilføje data.

INSERT_USER_RETURN_ID = "INSERT INTO users (navn) VALUES (%s) RETURNING id;"
@app.route("/api/bruger", methods=["POST"])
defoprette_bruger():
data = request.get_json()
navn = data["navn"]
med forbindelse:
med forbindelse.cursor() som cursoren:
cursor.execute (INSERT_USER_RETURN_ID, (navn,))
bruger_id = cursor.fetchone()[0]
Vend tilbage {"id": bruger ID, "navn": navn, "besked": f"Bruger {navn} skabt."}, 201
  • SQL-forespørgselsstrengen definerer en SQL-sætning, der vil blive udført ved hjælp af cursor.execute metode til at indsætte en ny række med en brugers navn i brugernes tabel i databasen. Det returnerer den nyoprettede brugers ID.
  • Det oprette_bruger funktion tager et navn ind som en parameter til at gemme i databasen, mens cursor.fetchone metode kaldes for at hente den nyoprettede brugers ID. Til sidst returneres en ordbog, der indeholder den nyoprettede brugers ID og navn, sammen med en meddelelse, der angiver, at brugeren blev oprettet.

2. Definer GET-metoden

Definer to get-ruter: en, for at hente alle data i databasen, og to, for at hente specifikke data fra databasen baseret på ID'et.

SELECT_ALL_USERS = "VÆLG * FRA brugere;"

@app.route("/api/bruger", methods=["GET"])
deffå_alle_brugere():
med forbindelse:
med forbindelse.cursor() som cursoren:
cursor.execute (SELECT_ALL_USERS)
brugere = cursor.fetchall()
hvis brugere:
resultat = []
til bruger i brugere:
result.append({"id": bruger[0], "navn": bruger[1]})
Vend tilbage jsonify (resultat)
andet:
Vend tilbage jsonify({"fejl": f"Brugere ikke fundet."}), 404

@app.route("/api/bruger/", methods="GET"])
defget_user(bruger ID):
med forbindelse:
med forbindelse.cursor() som cursoren:
cursor.execute("VÆLG * FRA brugere WHERE id = %s", (bruger ID,))
bruger = cursor.fetchone()
hvis bruger:
Vend tilbage jsonify({"id": bruger[0], "navn": bruger[1]})
andet:
Vend tilbage jsonify({"fejl": f"Bruger med ID {bruger ID} ikke fundet."}), 404

  • Denne første API-rute håndterer HTTP GET-anmodninger for at hente alle brugere fra databasen. Den henter alle brugere fra databasen og returnerer resultaterne i et JSON-format i svaret.
  • Denne anden API-rute håndterer HTTP GET-anmodninger til at hente data for en specifik bruger fra databasen. Det tager i bruger ID som en parameter, henter brugerens data fra databasen og returnerer resultaterne i et JSON-format i svaret.

3. Definer PUT-metoden

Opret put-ruten for at opdatere de lagrede data i databasen.

@app.route("/api/bruger/", methods=["PUT"])
defupdate_user(bruger ID):
data = request.get_json()
navn = data["navn"]
med forbindelse:
med forbindelse.cursor() som cursoren:
cursor.execute (UPDATE_USER_BY_ID, (navn, bruger_id))
hvis cursor.rowcount == 0:
Vend tilbage jsonify({"fejl": f"Bruger med ID {bruger ID} ikke fundet."}), 404
Vend tilbage jsonify({"id": bruger ID, "navn": navn, "besked": f"Bruger med ID {bruger ID} opdateret."})
  • Det update_user funktionen tager bruger-id-parameteren som input og bruger den til at opdatere navnet på den angivne bruger i databasen.
  • Hvis opdateringen lykkes, returnerer den et JSON-objekt med det opdaterede bruger-id, navn og en succesmeddelelse i svaret.

4. Definer SLET-metoden

Implementer sletteruten for at slette de lagrede data for en bestemt bruger i databasen.

@app.route("/api/bruger/", methods=["SLET"])
defdelete_user(bruger ID):
med forbindelse:
med forbindelse.cursor() som cursoren:
cursor.execute (DELETE_USER_BY_ID, (bruger-id,))
hvis cursor.rowcount == 0:
Vend tilbage jsonify({"fejl": f"Bruger med ID {bruger ID} ikke fundet."}), 404
Vend tilbage jsonify({"besked": f"Bruger med ID {bruger ID} slettet."})
  • Denne API-rute håndterer en specifik brugers slettefunktionalitet fra databasen baseret på deres ID. Hvis brugeren ikke findes, returnerer den en 404-statuskode med en fejlmeddelelse. Men hvis slettehandlingen lykkes, returnerer den et JSON-objekt med en succesmeddelelse i svaret.

Skrivning af REST API'er med kolbe

Denne guide viser, hvordan man bruger Flask og Postgres til at bygge en simpel CRUD REST API sammen med, hvordan at etablere en databaseforbindelse og udføre forskellige SQL-forespørgsler for at læse og skrive data til en database. Du kan nu oprette en simpel REST API, der kan håndtere de fire CRUD-operationer, der kræves i enhver webapplikation.

Uanset om du bygger en simpel blog eller en kompleks webapplikation, tilbyder Flask og Postgres kraftfulde funktioner og muligheder, der kræves for at skabe et robust backend-system. Alternativt kan du gøre brug af andre teknologier som FastAPI og MongoDB til at bygge RESTful API'er.