Python: Een REST API maken
Hoe een REST API te maken met Flask
👋 Welkom bij de Stackhero-documentatie!
Stackhero biedt een kant-en-klare Python cloud oplossing die tal van voordelen biedt, waaronder:
- Implementeer uw applicatie in seconden met een eenvoudige
git push.- Gebruik uw eigen domeinnaam en profiteer van de automatische configuratie van HTTPS-certificaten voor verbeterde beveiliging.
- Geniet van gemoedsrust met automatische back-ups, updates met één klik, en eenvoudige, transparante en voorspelbare prijzen.
- Krijg optimale prestaties en robuuste beveiliging dankzij een privé en dedicated VM.
Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Python cloud hosting oplossing van Stackhero te proberen!
Deze documentatie is een gebruiksvriendelijke gids voor beginners over het maken van een REST API in Python.
In dit voorbeeld gebruiken we Flask, een lichtgewicht en eenvoudig te gebruiken micro-framework waarmee u snel webapplicaties kunt maken.
Vereisten
Voordat u begint, zorg ervoor dat uw computer is uitgerust met de volgende tools:
- Python
- pip
- git
- asdf
Als uw ontwikkelomgeving nog niet is ingesteld, raadpleeg dan de Development platform gids voor gedetailleerde instructies. U kunt ook het online Code-Hero platform gebruiken. Code-Hero biedt een online IDE en terminal, met alle essentiële tools vooraf geïnstalleerd, zodat u direct kunt beginnen met coderen zonder enige installatie.
Python REST API draaiend in Code-Hero, direct toegankelijk vanuit de browser
Een nieuw project maken
De eerste stap is het maken van een nieuwe projectdirectory. Voor deze gids noemen we het myRestApi:
mkdir myRestApi
cd myRestApi
Stel vervolgens de Python-versie in op de nieuwste beschikbare versie met behulp van asdf, en initialiseer de Git-repository:
asdf install python latest \
&& asdf local python latest
echo "__pycache__/" >> .gitignore
git init
git add -A .
git commit -m "First commit"
Flask afhankelijkheid installeren
Voor dit voorbeeld hebben we slechts één afhankelijkheid nodig: Flask.
Flask is een lichtgewicht webframework dat snelle ontwikkeling van webapplicaties mogelijk maakt. Het is ontworpen om eenvoudig en gemakkelijk te gebruiken te zijn, waardoor ontwikkelaars snel webservices kunnen bouwen en implementeren. Ingebouwde ondersteuning voor routing, templating en het afhandelen van HTTP-verzoeken maakt Flask een uitstekende keuze voor het maken van REST API's.
Installeer Flask (en python-dotenv) met behulp van pip:
pip install Flask python-dotenv
We installeren hier de
Flaskenpython-dotenvmodules. U zult snel zien waarom wepython-dotenvgebruiken (spoiler: het is voor het beheren van omgevingsvariabelen).
Na de installatie, bevries de pakketversies naar een requirements.txt bestand:
pip freeze > requirements.txt
Het bevriezen van uw afhankelijkheden zorgt ervoor dat uw productie server of collega's dezelfde versies gebruiken als u. Slechts een paar seconden werk kan veel toekomstige hoofdpijn voorkomen.
De REST API implementeren met Flask
Laten we nu in de code duiken!
Maak een bestand genaamd app.py en voeg de volgende code in:
import os
from dotenv import load_dotenv
from flask import Flask, jsonify, request
# Laad omgevingsvariabelen uit het .env bestand wanneer niet in productie
if os.environ.get('ENV') != 'production':
load_dotenv()
# Maak de Flask app
app = Flask(__name__)
# Voorbeeld dataset
tasks = [
{
'id': 1,
'title': 'Boodschappen doen',
'description': 'Melk, Kaas, Pizza, Fruit',
'done': False
},
{
'id': 2,
'title': 'Python leren',
'description': 'Leer de basis van Python programmeren',
'done': False
}
]
# Route '/api/tasks' (GET) om alle taken te lijst
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
# Route '/api/tasks/<task_id>' (GET) om een specifieke taak op te halen via ID
@app.route('/api/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
task = [task for task in tasks if task['id'] == task_id]
if len(task) == 0:
return jsonify({'error': 'Taak niet gevonden'}), 404
return jsonify({'task': task[0]})
# Route '/api/tasks' (POST) om een nieuwe taak te maken
@app.route('/api/tasks', methods=['POST'])
def create_task():
if not request.json or 'title' not in request.json:
return jsonify({'error': 'Titel is vereist'}), 400
task = {
'id': tasks[-1]['id'] + 1,
'title': request.json['title'],
'description': request.json.get('description', ""),
'done': False
}
tasks.append(task)
return jsonify({'task': task}), 201
# Start de API server
if __name__ == '__main__':
if os.environ.get('ENV') == 'production':
app.run()
else:
app.run(host='0.0.0.0', port=8080, debug=True)
Om de server te starten, voert u uit:
python app.py
Met de
host='0.0.0.0'optie kunt u ook uw API openen met uw browser wanneer u Code-Hero gebruikt. Navigeer eenvoudig naarhttp://<XXXXXX>.stackhero-network.com:8080/api/tasks, waarbij u<XXXXXX>vervangt door uw Code-Hero domein.
Uw REST API testen
Zodra de server draait, kunt u ermee communiceren met behulp van cURL. Hier zijn enkele voorbeelden:
-
Alle taken ophalen:
curl -s http://localhost:8080/api/tasks { "tasks": [ { "description": "Melk, Kaas, Pizza, Fruit", "done": false, "id": 1, "title": "Boodschappen doen" }, { "description": "Leer de basis van Python programmeren", "done": false, "id": 2, "title": "Python leren" } ] } -
Taak met ID 2 ophalen:
curl -s http://localhost:8080/api/tasks/2 { "task": { "description": "Leer de basis van Python programmeren", "done": false, "id": 2, "title": "Python leren" } } -
Een nieuwe taak maken:
curl -s -X POST -H "Content-Type: application/json" \ -d '{"title": "Nieuwe taak", "description": "Gemaakt met cURL"}' \ http://localhost:8080/api/tasks { "task": { "description": "Gemaakt met cURL", "done": false, "id": 3, "title": "Nieuwe taak" } }
Tip: Leid de uitvoer om naar
jqom de JSON te verfraaien. Bijvoorbeeld,curl -s http://localhost:8080/api/tasks/2 | jqproduceert een beter leesbaar resultaat.
Voorbeeld van Python REST API met Flask, draaiend in Stackhero Code-Hero, met de server (1) en de client die cURL gebruikt (2)
Omgevingsvariabelen beheren
Omgevingsvariabelen zijn essentieel voor het beschermen van gevoelige informatie, zoals database-inloggegevens of API-sleutels. Er zijn twee belangrijke voordelen aan het gebruik van omgevingsvariabelen:
- Uw geheimen worden niet opgeslagen in uw Git-repository, waardoor onbevoegden geen toegang hebben tot uw gevoelige gegevens, zelfs als ze toegang krijgen tot uw broncode.
- U kunt verschillende inloggegevens gebruiken voor verschillende omgevingen (bijvoorbeeld productie versus ontwikkeling).
Om omgevingsvariabelen te beheren, gebruiken we de python-dotenv module. Installeer deze eerst als u dat nog niet heeft gedaan:
pip install python-dotenv
pip freeze > requirements.txt
Maak vervolgens een .env bestand in de hoofdmap van uw project en voeg uw ontwikkelomgevingsvariabelen toe. Bijvoorbeeld:
ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
Voeg ten slotte het .env bestand toe aan uw .gitignore om de veiligheid te waarborgen:
echo ".env" >> .gitignore
Om toegang te krijgen tot deze omgevingsvariabelen in Python, gebruikt u eenvoudig os.environ.get():
import os
print(os.environ.get('ENV'))
Het
.envbestand wordt alleen gebruikt voor de ontwikkelomgeving. Voor staging of productie stelt u de omgevingsvariabelen in op het Stackhero dashboard in uw Python serviceconfiguratie.
Python en Flask voorbereiden voor productie-deployment
Hoewel deze gids de ingebouwde ontwikkelserver van Flask gebruikt, is het voor productie essentieel om een productieklare WSGI-server zoals Gunicorn te gebruiken. Volg deze stappen:
-
Installeer Gunicorn:
pip install gunicorn pip freeze > requirements.txt -
Start uw app met Gunicorn met het
app:appargument (waarbij de eersteappde bestandsnaam is en de tweedeappde Flask-instantie):ENV=production gunicorn app:app \ --error-logfile - \ -b 0.0.0.0:8080 -
Maak een
Makefileom het schakelen tussen ontwikkel- en productiemodi te vereenvoudigen:.DEFAULT_GOAL := dev # Standaard voert Stackhero voor Python de "run" regel uit. We overschrijven deze om de 'prod' regel uit te voeren. run: prod prod: ENV=production gunicorn app:app \ --error-logfile - \ -b 0.0.0.0:8080 dev: python app.py
U kunt uw server in ontwikkelmodus uitvoeren met make dev (of gewoon make), en in productiemodus met make prod.
Uw Python-code naar productie implementeren
De eenvoudigste manier om uw Python-project te implementeren is door gebruik te maken van de Stackhero Python cloud hosting service. Belangrijke kenmerken zijn:
- Implementatie met een eenvoudige
git push - Aanpasbaar domein met automatische TLS-certificaatbeheer (HTTPS)
- Draait op een privé en toegewijde VM voor maximale veiligheid
- Ondersteunt HTTP/2, TLS 1.3 (HTTPS), WebSockets, GZIP & Brotli compressie, ETag, en toegang tot TCP/UDP poorten
De "Stackhero for Python" service configureren
Om uw code naar Stackhero te implementeren, volgt u deze stappen:
-
Haal uw publieke sleutel op met:
cat ~/.ssh/id_*.pub -
Ga in het Stackhero dashboard naar uw "Stackhero for Python" service en klik op de "Configure" knop.
-
Kopieer de publieke sleutel van de eerste stap en plak deze in het veld "SSH public keys" of "Key".
-
Valideer de configuratie door op de "Validate" knop onderaan de pagina te klikken.
"Stackhero for Python" publieke sleutel configuratie
Heeft u geen SSH-sleutels? Maak ze aan door uit te voeren:
ssh-keygen -t ed25519
Configureer ten slotte uw repository om naar Stackhero te implementeren. Voeg in uw projectmap een Git remote toe met behulp van het commando dat in uw Stackhero-service wordt verstrekt (vervang <XXXXXX> door het domein van uw service):
git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git
Git remote commando
Implementeren naar productie
Zodra alles is geconfigureerd, implementeert u uw code naar productie met een enkel commando:
git push stackhero main
Zorg ervoor dat u uw wijzigingen toevoegt en commit voordat u uw code naar productie pusht. In Stackhero Code-Hero, kunt u snel wijzigingen committen met behulp van de Command Palette (druk op
Ctrl+Shift+Pop Windows/Linux ofCmd+Shift+Pop macOS en typGit: Commit).
Na implementatie bezoekt u uw API-URL op https://<XXXXXX>.stackhero-network.com/api/tasks (vervang <XXXXXX> door het domein van uw service) om uw Flask API in actie te zien.
Conclusie
Door deze gids te volgen, begrijpt u nu hoe u een REST API kunt maken met Flask. Met deze kennis kunt u vol vertrouwen uw RESTful applicaties ontwikkelen en uitbreiden, en ze integreren met verschillende front-end en back-end services.