Automatiseer API-documentatie in Flask met Swagger
description
Met deze prompt kan de gebruiker eenvoudig automatische API-documentatie integreren in zijn Flask-project, waardoor handmatig onderhoud vermindert en documentatie altijd accuraat blijft. Dit verbetert samenwerking, versnelt development en voorkomt misverstanden rond API-specificaties.
prompt
Help mij bij het automatisch genereren van API-documentatie voor mijn Flask-project met Swagger (OpenAPI). Mijn huidige projectstructuur is: <beschrijf je projec ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een stapsgewijze handleiding om Swagger (OpenAPI) te integreren in je Flask-project, documentatie voor je endpoints te schrijven en deze up-to-date te houden:
1. Swagger-integratie in Flask
a. Installeer benodigde pakketten:
Gebruik bijvoorbeeld Flask-RESTX of Flask-Swagger-UI voor eenvoudige integratie.
Voor Flask-RESTX:
```bash
pip install flask-restx
```
b. Setup in je Flask-app:
```python
from flask import Flask
from flask_restx import Api, Resource, fields
app = Flask(__name__)
api = Api(app, version='1.0', title='Gebruikers API', description='API voor gebruikersbeheer')
# Definieer models voor automatische documentatie
gebruiker_model = api.model('Gebruiker', {
'id': fields.Integer(readonly=True, description='De unieke identifier van een gebruiker'),
'naam': fields.String(required=True, description='De naam van de gebruiker'),
'email': fields.String(required=True, description='Het emailadres van de gebruiker')
})
# Voorbeeld endpoint
@api.route('/gebruikers')
class GebruikersList(Resource):
@api.doc('lijst_gebruikers')
@api.marshal_list_with(gebruiker_model)
def get(self):
'''Haalt alle gebruikers op'''
# Implementatie
pass
@api.doc('nieuwe_gebruiker')
@api.expect(gebruiker_model)
@api.marshal_with(gebruiker_model, code=201)
def post(self):
'''Maakt een nieuwe gebruiker aan'''
# Implementatie
pass
```
2. Documentatie schrijven voor endpoints
- Gebruik de decorators zoals `@api.doc()`, `@api.expect()`, en `@api.marshal_with()` om descriptive informatie toe te voegen.
- Beschrijf parameters, responses, en errors expliciet.
- Maak gebruik van de `model` definitie voor gestructureerde request- en response-data.
3. Up-to-date houden tijdens ontwikkeling
- Door je API te bouwen met Flask-RESTX en de modellen en decorators, wordt je documentatie automatisch gegenereerd en gesynchroniseerd met je code.
- Bij elke wijziging in je endpoints of models wordt de Swagger UI automatisch bijgewerkt zodra je de app herstart.
- Bezoek de Swagger UI via bijvoorbeeld `http://localhost:5000/` (afhankelijk van je setup) om je API te bekijken en te testen.
4. Extra tips
- Overweeg om je API-specificaties (OpenAPI YAML/JSON) te exporteren en te versioneren in je broncodebeheer.
- Gebruik automatische tests om te zorgen dat de documentatie altijd overeenkomt met de implementatie.
Door deze aanpak integreer je Swagger naadloos in je Flask-project, waardoor je documentatie altijd actueel is en eenvoudig te onderhouden tijdens je ontwikkelproces.
provider: deepseek
model: deepseek-chat
Zeker, ik help je graag met het integreren van Swagger/OpenAPI in je Flask-project. Hier is een stapsgewijze handleiding:
## 1. Installatie van benodigde packages
```bash
pip install flask flasgger
```
## 2. Basisintegratie in je Flask-app
```python
from flask import Flask, jsonify, request
from flasgger import Swagger, swag_from
app = Flask(__name__)
# Swagger configuratie
app.config['SWAGGER'] = {
'title': 'Gebruikersbeheer API',
'uiversion': 3,
'version': '1.0.0',
'description': 'API voor gebruikersbeheer in Flask'
}
swagger = Swagger(app)
```
## 3. Documentatie schrijven voor endpoints
### Optie A: Inline documentatie met decorators
```python
@app.route('/gebruikers', methods=['GET'])
@swag_from({
'tags': ['Gebruikers'],
'summary': 'Haal alle gebruikers op',
'responses': {
200: {
'description': 'Lijst van gebruikers',
'examples': {
'application/json': [
{'id': 1, 'naam': 'Jan', 'email': 'jan@voorbeeld.nl'},
{'id': 2, 'naam': 'Piet', 'email': 'piet@voorbeeld.nl'}
]
}
}
}
})
def krijg_gebruikers():
"""Endpoint om alle gebruikers op te halen"""
# Je implementatie hier
return jsonify([])
```
### Optie B: Externe YAML-bestanden (aanbevolen)
**gebruikers.yaml:**
```yaml
get:
tags:
- Gebruikers
summary: Haal alle gebruikers op
responses:
200:
description: Lijst van gebruikers
examples:
application/json:
- id: 1
naam: Jan
email: jan@voorbeeld.nl
- id: 2
naam: Piet
email: piet@voorbeeld.nl
```
**In je Flask-app:**
```python
@app.route('/gebruikers', methods=['GET'])
@swag_from('gebruikers.yaml')
def krijg_gebruikers():
# Implementatie
pass
```
## 4. Volledig voorbeeld met gebruikersbeheer
```python
from flask import Flask, jsonify, request
from flasgger import Swagger, swag_from
app = Flask(__name__)
swagger = Swagger(app)
# Simpele datastore
gebruikers = [
{'id': 1, 'naam': 'Jan', 'email': 'jan@voorbeeld.nl'},
{'id': 2, 'naam': 'Piet', 'email': 'piet@voorbeeld.nl'}
]
@app.route('/gebruikers', methods=['GET'])
@swag_from('docs/gebruikers_get.yaml')
def krijg_alle_gebruikers():
return jsonify(gebruikers)
@app.route('/gebruikers/<int:gebruiker_id>', methods=['GET'])
@swag_from('docs/gebruiker_get.yaml')
def krijg_gebruiker(gebruiker_id):
gebruiker = next((u for u in gebruikers if u['id'] == gebruiker_id), None)
if gebruiker:
return jsonify(gebruiker)
return jsonify({'fout': 'Gebruiker niet gevonden'}), 404
@app.route('/gebruikers', methods=['POST'])
@swag_from('docs/gebruiker_post.yaml')
def maak_gebruiker():
data = request.get_json()
nieuwe_gebruiker = {
'id': len(gebruikers) + 1,
'naam': data['naam'],
'email': data['email']
}
gebruikers.append(nieuwe_gebruiker)
return jsonify(nieuwe_gebruiker), 201
```
## 5. Voorbeeld YAML-bestanden
**docs/gebruiker_post.yaml:**
```yaml
post:
tags:
- Gebruikers
summary: Maak een nieuwe gebruiker aan
parameters:
- in: body
name: body
required: true
schema:
type: object
required:
- naam
- email
properties:
naam:
type: string
example: Klaas
email:
type: string
example: klaas@voorbeeld.nl
responses:
201:
description: Gebruiker succesvol aangemaakt
examples:
application/json:
id: 3
naam: Klaas
email: klaas@voorbeeld.nl
400:
description: Ongeldige invoer
```
## 6. Documentatie up-to-date houden
### Best practices:
1. **Schrijf documentatie eerst**: Begin met de YAML-specificatie voordat je code schrijft
2. **Gebruikerstests**: Test je endpoints via Swagger UI
3. **Automatische validatie**:
```python
# Voeg toe aan je app.py
if __name__ == '__main__':
app.run(debug=True)
# Swagger valideert automatisch bij debug mode
```
4. **Versiebeheer**: Houd YAML-bestanden onder versiebeheer samen met je code
## 7. Toegang tot Swagger UI
Start je Flask-app en ga naar:
- `http://localhost:5000/apidocs/` (standaard)
- Hier kun je endpoints testen en documentatie bekijken
## 8. Extra tips
- Gebruik consistente naamgeving in je YAML-bestanden
- Houd parameterdefinities consistent tussen endpoints
- Documenteer foutresponses (400, 404, 500)
- Gebruik `examples` voor duidelijke voorbeelden
- Valideer je OpenAPI-specificatie met online tools
Met deze aanpak heb je altijd actuele documentatie die automatisch meegroeit met je code!