Python: Een REST API maken
Stapsgewijze handleiding voor het bouwen van een REST API met Flask in Python
👋 Welkom bij de Stackhero-documentatie!
Stackhero biedt een kant-en-klare Python cloud oplossing die uw deploymentproces vereenvoudigt:
- Deploy uw applicatie naar productie in enkele seconden met een simpele
git push.- Gebruik uw eigen domeinnaam, met automatische HTTPS-certificaatconfiguratie voor veilige verbindingen die volledig voor u geregeld worden.
- Profiteer van automatische back-ups, one-click updates en voorspelbare prijzen, zodat u zich kunt richten op uw code en niet op infrastructuurbeheer.
- Geniet van uitstekende performance en security op een private, dedicated infrastructuur. Uw omgeving is geïsoleerd en beveiligd.
Bespaar tijd en vereenvoudig uw workflow: uw code draait binnen 5 minuten op Stackhero's Python cloud hosting.
Deze handleiding laat zien hoe u een eenvoudige REST API maakt met Python en Flask. Flask is een lichtgewicht micro-framework waarmee u snel webapplicaties en API's kunt ontwikkelen.
Vereisten
Zorg ervoor dat u de volgende tools hebt geïnstalleerd voordat u begint:
- Python
- pip
- git
- asdf
Heeft u hulp nodig bij het opzetten van uw omgeving? Raadpleeg dan de Development platform handleiding. U kunt ook direct aan de slag met de online Code-Hero omgeving. Code-Hero biedt een online IDE en terminal, met alle essentiële tools vooraf geïnstalleerd. Zo kunt u zich richten op uw code in plaats van installatie en configuratie.
Python REST API draaiend in Code-Hero, direct toegankelijk via de browser
Een nieuw project aanmaken
Begin met het aanmaken van een nieuwe projectmap. In dit voorbeeld heet het project myRestApi:
mkdir myRestApi
cd myRestApi
Stel de Python-versie in op de nieuwste beschikbare versie met asdf en initialiseer een Git-repository:
asdf install python latest \
&& asdf local python latest
echo "__pycache__/" >> .gitignore
git init
git add -A .
git commit -m "First commit"
Flask dependency installeren
Voor dit voorbeeld heeft u slechts één hoofddependency nodig: Flask.
Flask is ontworpen om eenvoudig en snel te zijn, zodat u web-API's kunt bouwen en uitrollen zonder extra overhead. Het biedt standaard ondersteuning voor routing, templating en HTTP request handling, waardoor u in enkele minuten van idee naar werkende API kunt gaan.
U kunt Flask en python-dotenv installeren met pip:
pip install Flask python-dotenv
We voegen
python-dotenvtoe om omgevingsvariabelen veilig en gemakkelijk te beheren. U ziet het gebruik hiervan in de volgende stappen.
Na installatie kunt u uw dependencies vastleggen in een requirements.txt bestand:
pip freeze > requirements.txt
Door dependencies vast te leggen, zorgt u ervoor dat iedereen dezelfde pakketversies gebruikt. Deze kleine stap kan u later uren aan troubleshooting besparen.
De REST API implementeren met Flask
Nu bent u klaar om uw API-code te schrijven.
Maak een bestand genaamd app.py aan en voeg deze code toe:
import os
from dotenv import load_dotenv
from flask import Flask, jsonify, request
# Laad omgevingsvariabelen uit .env voor niet-productieomgevingen
if os.environ.get('ENV') != 'production':
load_dotenv()
app = Flask(__name__)
# Voorbeeld taken-data
tasks = [
{
'id': 1,
'title': 'Buy groceries',
'description': 'Milk, Cheese, Pizza, Fruits',
'done': False
},
{
'id': 2,
'title': 'Learn Python',
'description': 'Learn Python programming basics',
'done': False
}
]
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
@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 not task:
return jsonify({'error': 'Task not found'}), 404
return jsonify({'task': task[0]})
@app.route('/api/tasks', methods=['POST'])
def create_task():
if not request.json or 'title' not in request.json:
return jsonify({'error': 'Title is required'}), 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
if __name__ == '__main__':
if os.environ.get('ENV') == 'production':
app.run()
else:
app.run(host='0.0.0.0', port=8080, debug=True)
U kunt de server starten met:
python app.py
Met
host='0.0.0.0'is uw API toegankelijk via uw browser wanneer u Code-Hero gebruikt. Ga 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 met cURL communiceren met uw API. Hier enkele voorbeeldcommando's:
-
Alle taken ophalen:
curl -s http://localhost:8080/api/tasks # Output: # { # "tasks": [ # ... # ] # } -
Een specifieke taak ophalen (ID 2):
curl -s http://localhost:8080/api/tasks/2 # Output: # { # "task": { # ... # } # } -
Een nieuwe taak aanmaken:
curl -s -X POST -H "Content-Type: application/json" \ -d '{"title": "New task", "description": "Created with cURL"}' \ http://localhost:8080/api/tasks # Output: # { # "task": { # ... # } # }
Tip: Voor overzichtelijkere output kunt u het resultaat doorsturen naar
jq. Bijvoorbeeld,curl -s http://localhost:8080/api/tasks/2 | jqmaakt de JSON beter leesbaar.
Voorbeeld van een Python REST API met Flask, draaiend in Stackhero Code-Hero, met de server (1) en de client via cURL (2)
Omgaan met omgevingsvariabelen
Omgevingsvariabelen helpen u om gevoelige gegevens zoals databasewachtwoorden of API-sleutels te beschermen. Door ze te gebruiken, houdt u gevoelige data buiten uw codebase en Git-geschiedenis, en kunt u eenvoudig verschillende instellingen per omgeving toepassen.
Voor het beheren van omgevingsvariabelen kunt u de module python-dotenv gebruiken. Als u deze eerder niet heeft geïnstalleerd, kunt u dat nu alsnog doen:
pip install python-dotenv
pip freeze > requirements.txt
Maak een .env bestand aan in de hoofdmap van uw project en voeg uw ontwikkelomgevingsvariabelen toe:
ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
Voeg .env toe aan uw .gitignore zodat dit bestand niet in Git wordt opgenomen:
echo ".env" >> .gitignore
U kunt deze variabelen in Python benaderen met os.environ.get():
import os
print(os.environ.get('ENV'))
Het
.envbestand is alleen bedoeld voor ontwikkeling. Voor productie of staging kunt u omgevingsvariabelen direct instellen in uw Stackhero dashboard bij de configuratie van uw Python-service.
Python en Flask voorbereiden op productie
De ingebouwde server van Flask is ideaal voor ontwikkeling. Voor productie gebruikt u bij voorkeur een robuuste WSGI-server zoals Gunicorn. Zo bereidt u zich voor:
-
Installeer Gunicorn:
pip install gunicorn pip freeze > requirements.txt -
Start uw app met Gunicorn:
ENV=production gunicorn app:app \ --error-logfile - \ -b 0.0.0.0:8080Hier verwijst
app:appnaar uw bestand (app.py) en de Flask applicatie-instantie (app). -
U kunt een
Makefiletoevoegen om eenvoudig te schakelen tussen ontwikkel- en productiemodus:.DEFAULT_GOAL := dev # Stackhero for Python voert standaard de "run" regel uit. We overschrijven deze om 'prod' te draaien. run: prod prod: ENV=production gunicorn app:app \ --error-logfile - \ -b 0.0.0.0:8080 dev: python app.py
U kunt de server starten in ontwikkelmodus met make dev (of gewoon make), of in productiemodus met make prod.
Uw Python-code uitrollen naar productie
Stackhero maakt cloud deployment eenvoudig en veilig. U kunt uw Python-project uitrollen met de Python cloud hosting service. Functionaliteiten zijn onder andere:
- Deployen met één enkele
git push - Automatische TLS (HTTPS) met aanpasbare domeinen
- Dedicated infrastructuur voor veiligheid
- Ondersteuning voor HTTP/2, TLS 1.3, WebSockets, GZIP & Brotli, ETag, en zowel TCP/UDP poorttoegang
De "Stackhero for Python" service configureren
Volg deze stappen om te deployen:
-
Haal uw publieke SSH-sleutel op:
cat ~/.ssh/id_*.pub -
Open in het Stackhero dashboard uw "Stackhero for Python" service en kies "Configure".
-
Plak uw publieke sleutel in het veld "SSH public keys" of "Key".
-
Klik op "Validate" om uw configuratie te bevestigen.
"Stackhero for Python" publieke sleutel configuratie
Heeft u nog geen SSH-sleutels? U kunt ze genereren met:
ssh-keygen -t ed25519
Voeg een Git remote toe aan uw project met het commando uit uw Stackhero-service (vervang <XXXXXX> door uw servicedomein):
git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git
Git remote commando
Deployen naar productie
Wanneer u klaar bent om te deployen, pusht u uw code met:
git push stackhero main
Vergeet niet uw wijzigingen te committen voordat u gaat deployen. In Stackhero Code-Hero kunt u de Command Palette (
Ctrl+Shift+PofCmd+Shift+P) gebruiken enGit: Committypen voor snelle commits.
Na deployment is uw API live op https://<XXXXXX>.stackhero-network.com/api/tasks. Vervang <XXXXXX> door uw servicedomein om toegang te krijgen tot uw Flask API.
Conclusie
U heeft nu een werkende REST API gebouwd met Flask. Met deze basis is het eenvoudig om uw applicatie uit te breiden, te koppelen aan databases of te integreren met andere diensten. Flask biedt u de flexibiliteit om van een eenvoudig prototype door te groeien naar een volwaardige productie-API.