Aflați cum să creați un API RESTful folosind Flask și Postgres, permițând un schimb de date fără întreruperi între aplicația dvs. și sistemele externe.

Interfețele de programare a aplicațiilor (API) sunt o parte critică a construirii și conectarii diferitelor sisteme, permițând aplicațiilor dumneavoastră să comunice și să schimbe date cu alte servicii.

În timp ce dezvoltarea backend implică mai mult decât scrierea de API-uri - ea acoperă, de asemenea, scrierea logicii de afaceri pe partea serverului, proiectarea unui sistem eficient arhitecturi și alte funcții cheie, citiți mai departe pentru a afla cum să construiți un API CRUD REST simplu cu Flask (un cadru Python ușor) și Postgres Bază de date.

Utilizarea Flask pentru a construi API-uri de backend

Balon este un ușor Cadrul Python care oferă o serie de caracteristici pentru a simplifica scrierea API-urilor backend pentru clienții web, scrise folosind diferite tehnologii, cum ar fi React și Angular.

Puteți găsi codul sursă al acestui proiect în aceasta Depozitul GitHub.

Acest ghid vă va ghida prin scrierea a API REST care implementează cele patru operațiuni CRUD: creați, citiți, actualizați și ștergeți pentru a gestiona datele utilizatorilor stocate într-o bază de date Postgres.

Configurați o bază de date Postgres

Pentru a începe, mergeți la ElephantSQL, o soluție de găzduire a bazelor de date bazată pe cloud care oferă o platformă pentru a crea și gestiona baze de date Postgres în cloud, pentru a vă înscrie și a vă conecta la pagina de prezentare generală a contului dvs.

Apasă pe Creați o nouă instanță butonul pentru a crea o instanță nouă pentru aplicația dvs.

Furnizați numele instanței dvs. și selectați planul gratuit și, în sfârșit, selectați regiunea în care va fi găzduită instanța pentru a finaliza procesul de configurare.

Odată creată instanța, navigați la pagina de setări și copiați fișierul URL-ul bazei de date, îl veți folosi pentru a stabili o conexiune cu baza de date.

Configurați un server Flask

Pe terminalul dvs., creați un folder de proiect și schimbați directorul curent în acel folder nou.

Înainte de a instala Flask, confirmați că rulați Python versiunea 3.6+ pe computer. Dacă nu, trebuie să instalați cel mai recent Piton versiune.

python --versiune

După aceea, instalați virtualenv, pentru a crea un mediu de dezvoltare virtual izolat.

pip install virtualenv

Apoi, rulați comanda de mai jos pentru a crea un mediu virtual.

virtualenv venv

În cele din urmă, activați mediul virtual.

# Pe Windows: 
.\venv\Scripts\activate
# Pe Unix sau MacOS:
sursă venv/bin/activate

Instalați pachetele necesare

În directorul rădăcină al folderului de proiect, creați un cerințe.txt fișier și adăugați aceste pachete.

balon
python-dotenv
psycopg2-binar

Apoi, instalați pachetele.

pip install -r requirements.txt

The psycopg2-binar este o bibliotecă Python care acționează ca un middleware, pentru a vă permite să stabiliți conexiuni cu baza de date Postgres și să efectuați diverse operațiuni de bază de date.

În cele din urmă, creați un .env fișier și inserați adresa URL a bazei de date.

DATABASE_URL= adresa URL a bazei de date

Creați serverul Flask

În cele din urmă, creați un app.py fișier în directorul rădăcină și adăugați codul de mai jos.

import os 
import psicopg2
din dotenv import load_dotenv
din balon import Flacon, cerere, jsonify

load_dotenv()

aplicație = Balon (__nume__)
url = os.getenv(„DATABASE_URL”)
conexiune = psycopg2.connect (url)

@app.get("/")
defAcasă():
întoarcere"Salut Lume"

Acest cod setează o instanță a aplicației Flask. Apoi creează o conexiune la baza de date specificată în șirul URL și, în sfârșit, stabilește o rută de acasă care returnează un șir ca răspuns.

Creați API-ul REST pentru activarea operațiunilor CRUD

Acum, construiți API-ul REST care implementează cele patru operațiuni CRUD.

Creați un tabel demonstrativ

Creați un tabel de utilizatori în baza de date.

În fișierul app.py, adăugați codul de mai jos.

CREATE_USERS_TABLE = „CREATE TABLE IF NU EXISTIST users (id SERIAL PRIMARY KEY, name TEXT);”

cu conexiune:
cu connection.cursor() la fel de cursor:
cursor.execute (CREATE_USERS_TABLE)

  • Acest cod creează un nou tabel PostgreSQL numit utilizatorii cu două coloane.
  • Utilizează metoda de conectare psycopg2 pentru a stabili conexiunea cu baza de date și creează un nou obiect cursor folosind conexiune.cursor metoda folosită pentru a executa interogări SQL.

1. Definiți metoda POST

Creați traseul postării pentru a adăuga date.

INSERT_USER_RETURN_ID = „INSERT INTO useri (nume) VALUES (%s) RETURNING id;”
@app.route("/api/user", metode=["POST"])
defcreaza utilizator():
date = request.get_json()
nume = date["Nume"]
cu conexiune:
cu connection.cursor() la fel de cursor:
cursor.execute (INSERT_USER_RETURN_ID, (nume,))
user_id = cursor.fetchone()[0]
întoarcere {"id": ID-ul de utilizator, "Nume": Nume, "mesaj": f"Utilizator {Nume} creată."}, 201
  • Șirul de interogare SQL definește o instrucțiune SQL care va fi executată folosind cursor.execută metoda de a insera un nou rând cu numele unui utilizator în fișierul utilizatorilor tabel din baza de date. Acesta returnează ID-ul utilizatorului nou creat.
  • The creaza utilizator funcția preia un nume ca parametru de stocat în baza de date în timp ce cursor.fetchone metoda este apelată pentru a prelua ID-ul utilizatorului nou creat. În cele din urmă, este returnat un dicționar care conține ID-ul și numele utilizatorului nou creat, împreună cu un mesaj care indică faptul că utilizatorul a fost creat cu succes.

2. Definiți metoda GET

Definiți două rute de obținere: una, pentru a prelua toate datele din baza de date și două, pentru a prelua date specifice din baza de date pe baza ID-ului.

SELECT_ALL_USERS = „SELECT * FROM utilizatori;”

@app.route("/api/user", metode=["GET"])
defobține_toți_utilizatorii():
cu conexiune:
cu connection.cursor() la fel de cursor:
cursor.execute (SELECT_ALL_USERS)
utilizatori = cursor.fetchall()
dacă utilizatori:
rezultat = []
pentru utilizator în utilizatori:
result.append({"id": utilizator[0], "Nume": utilizator[1]})
întoarcere jsonify (rezultat)
altfel:
întoarcere jsonify({"eroare": f„Utilizatori nu au fost găsiți”.}), 404

@app.route("/api/user/", metode=["GET"])
defget_user(ID-ul de utilizator):
cu conexiune:
cu connection.cursor() la fel de cursor:
cursor.execute(„SELECT * FROM users WHERE id = %s”, (ID-ul de utilizator,))
utilizator = cursor.fetchone()
dacă utilizator:
întoarcere jsonify({"id": utilizator[0], "Nume": utilizator[1]})
altfel:
întoarcere jsonify({"eroare": f"Utilizator cu ID {ID-ul de utilizator} nu a fost găsit."}), 404

  • Această primă rută API gestionează solicitările HTTP GET pentru preluarea tuturor utilizatorilor din baza de date. Acesta preia toți utilizatorii din baza de date și returnează rezultatele într-un format JSON în răspuns.
  • Această a doua rută API gestionează solicitările HTTP GET pentru preluarea datelor pentru un anumit utilizator din baza de date. Se ia în ID-ul de utilizator ca parametru, preia datele utilizatorului din baza de date și returnează rezultatele în format JSON în răspuns.

3. Definiți metoda PUT

Creați ruta de intrare pentru a actualiza datele stocate în baza de date.

@app.route("/api/user/", metode=["PUT")])
defupdate_user(ID-ul de utilizator):
date = request.get_json()
nume = date["Nume"]
cu conexiune:
cu connection.cursor() la fel de cursor:
cursor.execute (UPDATE_USER_BY_ID, (nume, user_id))
dacă cursor.rowcount == 0:
întoarcere jsonify({"eroare": f"Utilizator cu ID {ID-ul de utilizator} nu a fost găsit."}), 404
întoarcere jsonify({"id": ID-ul de utilizator, "Nume": Nume, "mesaj": f"Utilizator cu ID {ID-ul de utilizator} actualizat."})
  • The update_user funcția ia ca intrare parametrul ID utilizator și îl folosește pentru a actualiza numele utilizatorului specificat în baza de date.
  • Dacă operațiunea de actualizare are succes, returnează un obiect JSON cu ID-ul de utilizator actualizat, numele și un mesaj de succes în răspuns.

4. Definiți metoda DELETE

Implementați ruta de ștergere pentru a șterge datele stocate ale unui anumit utilizator în baza de date.

@app.route("/api/user/", metode=["ȘTERGERE"])
defdelete_user(ID-ul de utilizator):
cu conexiune:
cu connection.cursor() la fel de cursor:
cursor.execute (DELETE_USER_BY_ID, (user_id,))
dacă cursor.rowcount == 0:
întoarcere jsonify({"eroare": f"Utilizator cu ID {ID-ul de utilizator} nu a fost găsit."}), 404
întoarcere jsonify({"mesaj": f"Utilizator cu ID {ID-ul de utilizator} șters.”})
  • Această rută API gestionează funcționalitatea de ștergere a unui anumit utilizator din baza de date pe baza ID-ului acestuia. Dacă utilizatorul nu este găsit, acesta returnează un cod de stare 404 cu un mesaj de eroare. Cu toate acestea, dacă operația de ștergere are succes, returnează un obiect JSON cu un mesaj de succes în răspuns.

Scrierea API-urilor REST cu Flask

Acest ghid demonstrează cum să utilizați Flask și Postgres pentru a construi un API CRUD REST simplu împreună, cum pentru a stabili o conexiune la baza de date și a executa diferite interogări SQL pentru a citi și scrie date în a Bază de date. Acum puteți crea un API REST simplu care poate gestiona cele patru operațiuni CRUD necesare în orice aplicație web.

Indiferent dacă construiți un blog simplu sau o aplicație web complexă, Flask și Postgres oferă caracteristici și capabilități puternice necesare pentru a crea un sistem backend robust. Alternativ, puteți utiliza alte tehnologii precum FastAPI și MongoDB pentru a construi API-uri RESTful.