Ontwikkel CodeWhisperer-gegenereerde API-integraties op maat
description
Met deze prompt kan ik snel en efficiënt veilige en performante API-integraties ontwikkelen die precies aansluiten bij mijn projectbehoeften. Het bespaart tijd door automatisch voorbeeldcode te genereren en helpt bij het vermijden van beveiligings- en prestatieproblemen die anders handmatig geïdentificeerd moeten worden.
prompt
Help me bij het creëren van API-integraties met Amazon CodeWhisperer. API-type: <voer het type API in waarmee ik wil integreren>. Programmeertaal: <voer de programmeertaal in die ik gebruik>. Beschr ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een stapsgewijze gids om een RESTful API-integratie te maken in Python met Amazon CodeWhisperer, inclusief OAuth2 authenticatie met tokenverversing, voor het ophalen en weergeven van gebruikersgegevens:
1. Installeer benodigde Python-pakketten:
Gebruik bijvoorbeeld `requests` en `requests_oauthlib` voor OAuth2-authenticatie.
```bash
pip install requests requests_oauthlib
```
2. Implementeer OAuth2 authenticatie met tokenverversing:
Hier is een voorbeeld van hoe je een OAuth2-client kunt instellen en tokens kunt beheren.
```python
from requests_oauthlib import OAuth2Session
from oauthlib.oauth2 import BackendApplicationClient
# Clientgegevens (vervang deze door je eigen client_id en client_secret)
client_id = 'JOUW_CLIENT_ID'
client_secret = 'JOUW_CLIENT_SECRET'
token_url = 'https://externe-service.com/oauth2/token'
# Maak een OAuth2 client
client = BackendApplicationClient(client_id=client_id)
oauth = OAuth2Session(client=client)
# Verkrijg een token
token = oauth.fetch_token(token_url=token_url, client_id=client_id, client_secret=client_secret)
# Token verversen wordt automatisch afgehandeld bij requests_oauthlib
```
3. Ophalen van gebruikersgegevens:
Gebruik de OAuth2-sessie om de API-endpoint aan te roepen.
```python
api_url = 'https://externe-service.com/api/users'
try:
response = oauth.get(api_url)
response.raise_for_status()
gebruikersgegevens = response.json()
# Weergave van gegevens
for gebruiker in gebruikersgegevens:
print(f"Naam: {gebruiker['naam']}, Email: {gebruiker['email']}")
except requests.exceptions.HTTPError as e:
print(f"Fout bij ophalen gegevens: {e}")
```
4. Prestatie- en beveiligingsmaatregelen:
- Zorg dat je tokens veilig opslaat en niet hardcoded in de code staan.
- Gebruik tokenvernieuwingsmechanisme dat door `requests_oauthlib` wordt ondersteund.
- Implementeer caching indien mogelijk om API-aanroepen te minimaliseren.
- Gebruik HTTPS voor alle communicatie.
Samenvatting:
Met bovenstaande code heb je een basis Python-script dat via OAuth2 tokens verkrijgt en automatisch ververst, en gebruikersgegevens ophaalt van een externe RESTful API. Pas de URL's en credentials aan naar jouw situatie.
Wil je dat ik een volledige, voorbeeldklas of script voor je maak?
provider: deepseek
model: deepseek-chat
Hier is een uitgebreide Python-implementatie voor RESTful API-integratie met OAuth2 authenticatie:
## 1. Basisvereisten installeren
```bash
pip install requests python-dotenv
```
## 2. Omgevingsvariabelen (.env bestand)
```env
CLIENT_ID=uw_client_id
CLIENT_SECRET=uw_client_secret
TOKEN_URL=https://api.voorbeeld.com/oauth/token
API_BASE_URL=https://api.voorbeeld.com/v1
REDIRECT_URI=https://uw-app.com/callback
```
## 3. OAuth2 Token Manager
```python
import requests
import json
import time
import os
from dotenv import load_dotenv
load_dotenv()
class OAuth2TokenManager:
def __init__(self):
self.client_id = os.getenv('CLIENT_ID')
self.client_secret = os.getenv('CLIENT_SECRET')
self.token_url = os.getenv('TOKEN_URL')
self.access_token = None
self.refresh_token = None
self.token_expiry = None
def get_initial_tokens(self, authorization_code):
"""Verkrijg initiële tokens met authorization code"""
payload = {
'grant_type': 'authorization_code',
'client_id': self.client_id,
'client_secret': self.client_secret,
'code': authorization_code,
'redirect_uri': os.getenv('REDIRECT_URI')
}
return self._request_tokens(payload)
def refresh_access_token(self):
"""Vernieuw access token met refresh token"""
if not self.refresh_token:
raise ValueError("Geen refresh token beschikbaar")
payload = {
'grant_type': 'refresh_token',
'client_id': self.client_id,
'client_secret': self.client_secret,
'refresh_token': self.refresh_token
}
return self._request_tokens(payload)
def _request_tokens(self, payload):
"""Voer token request uit"""
try:
response = requests.post(
self.token_url,
data=payload,
headers={'Content-Type': 'application/x-www-form-urlencoded'}
)
response.raise_for_status()
token_data = response.json()
self._update_tokens(token_data)
return token_data
except requests.exceptions.RequestException as e:
print(f"Token request mislukt: {e}")
raise
def _update_tokens(self, token_data):
"""Update tokens en expiry tijd"""
self.access_token = token_data['access_token']
self.refresh_token = token_data.get('refresh_token', self.refresh_token)
self.token_expiry = time.time() + token_data['expires_in']
def is_token_valid(self):
"""Controleer of token nog geldig is"""
return self.access_token and time.time() < self.token_expiry - 60
def get_valid_token(self):
"""Retourneer geldig token, refresh indien nodig"""
if not self.is_token_valid():
if self.refresh_token:
self.refresh_access_token()
else:
raise ValueError("Geen geldig token beschikbaar")
return self.access_token
```
## 4. API Client voor Gebruikersgegevens
```python
class UserAPIClient:
def __init__(self, token_manager):
self.token_manager = token_manager
self.base_url = os.getenv('API_BASE_URL')
def _make_authenticated_request(self, endpoint, method='GET', params=None):
"""Maak geauthenticeerde API request"""
token = self.token_manager.get_valid_token()
headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
url = f"{self.base_url}/{endpoint}"
try:
if method.upper() == 'GET':
response = requests.get(url, headers=headers, params=params)
else:
response = requests.request(method, url, headers=headers, json=params)
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
if response.status_code == 401:
print("Token verlopen, probeer te refreshen...")
# Probeer token te refreshen en request opnieuw
self.token_manager.refresh_access_token()
return self._make_authenticated_request(endpoint, method, params)
else:
print(f"API request mislukt: {e}")
raise
def get_user_profile(self, user_id):
"""Haal gebruikersprofiel op"""
return self._make_authenticated_request(f'users/{user_id}')
def get_all_users(self, page=1, limit=50):
"""Haal alle gebruikers op (met paginering)"""
params = {'page': page, 'limit': limit}
return self._make_authenticated_request('users', params=params)
def search_users(self, query, **filters):
"""Zoek gebruikers met filters"""
params = {'query': query, **filters}
return self._make_authenticated_request('users/search', params=params)
```
## 5. Gebruikersgegevens Weergave
```python
class UserDataDisplay:
@staticmethod
def display_user_profile(user_data):
"""Toon gebruikersprofiel in leesbaar formaat"""
print("\n" + "="*50)
print("GEBRUIKERSPROFIEL")
print("="*50)
if isinstance(user_data, dict):
for key, value in user_data.items():
if isinstance(value, dict):
print(f"\n{key.upper()}:")
for sub_key, sub_value in value.items():
print(f" {sub_key}: {sub_value}")
else:
print(f"{key}: {value}")
else:
print("Ongeldige gebruikersdata")
@staticmethod
def display_users_list(users_data):
"""Toon lijst van gebruikers"""
if not isinstance(users_data, list):
users_data = users_data.get('users', [])
print(f"\nGevonden {len(users_data)} gebruikers:")
print("-" * 30)
for i, user in enumerate(users_data, 1):
name = user.get('name', 'Onbekend')
email = user.get('email', 'Geen email')
print(f"{i}. {name} - {email}")
```
## 6. Hoofdapplicatie
```python
def main():
# Initialiseer token manager
token_manager = OAuth2TokenManager()
# Voor eerste setup: verkrijg authorization code via OAuth flow
# authorization_code = input("Voer authorization code in: ")
# token_manager.get_initial_tokens(authorization_code)
# Initialiseer API client
api_client = UserAPIClient(token_manager)
display = UserDataDisplay()
try:
# Voorbeeld: haal specifieke gebruiker op
user_id = input("Voer gebruikers-ID in (of druk Enter voor alle gebruikers): ")
if user_id:
user_data = api_client.get_user_profile(user_id)
display.display_user_profile(user_data)
else:
# Haal alle gebruikers op
users_data = api_client.get_all_users()
display.display_users_list(users_data)
except Exception as e:
print(f"Fout bij ophalen gebruikersgegevens: {e}")
if __name__ == "__main__":
main()
```
## 7. Aanvullende Configuratie
```python
# config.py
import logging
def setup_logging():
"""Configureer logging voor debugging"""
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('api_integration.log'),
logging.StreamHandler()
]
)
# Error handling decorator
def handle_api_errors(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except requests.exceptions.ConnectionError:
logging.error("Netwerkfout: Kan geen verbinding maken met API")
except requests.exceptions.Timeout:
logging.error("Timeout: API reageert niet")
except requests.exceptions.HTTPError as e:
logging.error(f"HTTP fout: {e.response.status_code}")
except Exception as e:
logging.error(f"Onverwachte fout: {e}")
return wrapper
```
## Belangrijke Kenmerken:
1. **OAuth2 Authenticatie**: Volledige implementatie met token refresh
2. **Error Handling**: Robuuste foutafhandeling voor netwerk- en API-fouten
3. **Token Management**: Automatische token refresh voor verlopen tokens
4. **Modulaire Structuur**: Duidelijke scheiding van verantwoordelijkheden
5. **Configuratie**: Gebruik van environment variables voor beveiliging
Pas de endpoints en datastructuren aan volgens de specifieke externe service die je gebruikt.