slogan3

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

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.