In dit blog gaan we in hoe authenticatie voor APIs werkt met Python. Veel APIs hebben een beveiligingslaagje, bijvoorbeeld omdat alleen bepaalde gebruikers specifieke informatie mogen ophalen. Je moet je daarom eerst authenticeren.
Python is een programmeertaal waarmee je makkelijk interactie kunt hebben met APIs. Python wordt veel gebruikt door data scientists in data science vraagstukken en kent enorm veel toepassingen. We laten in dit blog zien hoe je je met Python authenticeert voor een API.
In dit blog
In dit blog behandelen we de volgende onderwerpen:
- Wat is een API?
- Waarom authenticatie?
- Veelvoorkomende vormen van authenticatie
- Voorbeeld authenticatie met keys in Python
- Voorbeeld authenticatie met OAuth2 in Python
Wat is een API?
API staat voor Application Programming Interface. Dit is een gestandaardiseerde en gestructureerde manier om met andere applicaties interactie te hebben.
In onderstaande afbeelding zie je simpel visueel weergegeven hoe een API werkt als je data ophaalt met een GET request.
Om aan de slag te gaan met APIs kun je ook onze andere blogs hierover raadplegen.
Waarom authenticatie nodig is
Authenticatie is veelal nodig om een van onderstaande redenen:
- Wanneer je niet wil dat iedereen alle data op kan halen. Voorbeeld: je kunt alleen je eigen e-mails ophalen met de Google mail API.
- Wanneer er voor een API betaald moet worden. Zo weet de ontwikkelaar hoe vaak een gebruiker een API call heeft uitgevoerd.
Veelvoorkomende soorten authenticatie
Er zijn verschillende authenticatieprotocollen. Veelgebruikte protocollen zijn:
- Authenticatie met keys. Je hebt in deze vorm een gebruikersnaam en wachtwoord.
- Authenticatie met OAuth2. Hierbij log je eerst in met keys. Je krijgt dan een token met een bepaalde geldigheidsduur. Zo lang het token geldig is kun je hiermee API calls verrichten.
Voorbeeld: authenticatie met keys
We bekijken de The Cats API - Cats as a service.
Met deze API kun je foto's en andere details van katten ophalen.
Deze API werkt met authenticatie.
Stap 1: Key verkrijgen
Je moet een key hebben om er gebruik van te kunnen maken.
Via deze link kun je een gratis account aanmaken waarmee je een key krijgt.
Stap 2: Documentatie bekijken
Vervolgens kijk je in de documentatie hoe je de key kunt gebruiken.
De documentatie vind je via deze link.
Hier is het volgende te zien:
We moeten de key toevoegen aan de header
van een API call.
Stap 3: API call uitvoeren
Nu we een key hebben, en weten hoe we deze kunnen gebruiken, gaan we een API call uitvoeren.
We doen het volgende:
- Importeren package
requests
. - Benoemen de url van het API endpoint. In het onderstaande voorbeeld vragen we kattensoorten op.
- We maken de
headers
aan met hierin de key volgens de documentatie. - We voeren een
GET
request uit.
import requests
url = 'https://api.thecatapi.com/v1/breeds'
headers = {
'x-api-key' : 'xxxxxxxxxxxxxx',
}
response = requests.get(
url=api_endpoint,
headers=headers,
)
response.ok
Out: True
De call was succesvol.
Stap 4: Resultaat bekijken
We bekijken het resultaat:
len(response.json())
Out: 67
We hebben informatie over 67 kattensoorten opgehaald.
We bekijken het eerste resultaat:
response.json()[0]
Out:
{'weight': {'imperial': '7 - 10', 'metric': '3 - 5'},
'id': 'abys',
'name': 'Abyssinian',
'cfa_url': 'http://cfa.org/Breeds/BreedsAB/Abyssinian.aspx',
'vetstreet_url': 'http://www.vetstreet.com/cats/abyssinian',
'vcahospitals_url': 'https://vcahospitals.com/know-your-pet/cat-breeds/abyssinian',
'temperament': 'Active, Energetic, Independent, Intelligent, Gentle',
'origin': 'Egypt',
'country_codes': 'EG',
'country_code': 'EG',
'description': 'The Abyssinian is easy to care for, and a joy to have in your home. They’re affectionate cats and love both people and other animals.',
'life_span': '14 - 15',
'indoor': 0,
'lap': 1,
'alt_names': '',
'adaptability': 5,
'affection_level': 5,
'child_friendly': 3,
'dog_friendly': 4,
'energy_level': 5,
'grooming': 1,
'health_issues': 2,
'intelligence': 5,
'shedding_level': 2,
'social_needs': 5,
'stranger_friendly': 5,
'vocalisation': 1,
'experimental': 0,
'hairless': 0,
'natural': 1,
'rare': 0,
'rex': 0,
'suppressed_tail': 0,
'short_legs': 0,
'wikipedia_url': 'https://en.wikipedia.org/wiki/Abyssinian_(cat)',
'hypoallergenic': 0,
'reference_image_id': '0XYvRd7oD',
'image': {'id': '0XYvRd7oD',
'width': 1204,
'height': 1445,
'url': 'https://cdn2.thecatapi.com/images/0XYvRd7oD.jpg'}}
Behoorlijk wat informatie over onderstaande kat:
Je heb nu gezien hoe je met keys kunt authentificeren.
Voorbeeld: Authenticatie met OAuth2
We bekijken de Bol.com Retailer API.
Met deze API kun je als verkoper op Bol.com informatie over je klanten, bestellingen, etc. ophalen.
Deze API werkt met OAuth2 authenticatie.
Dit werkt als volgt:
- Je logt in met keys.
- Je krijgt een token wat een bepaalde geldigheidsduur heeft.
- Zo lang het token geldig is kun je hiermee API calls verrichten.
Zie ook onderstaande afbeelding:
Stap 1: Keys verkrijgen
Je moet keys (gebruikers ID en wachtwoord) hebben om er gebruik van te kunnen maken.
Als Bol.com verkoper kun je deze aanmaken in je account.
Dit lees je ook in de documentatie.
Stap 2: Inloggen met keys
In de documentatie zie je dat wanneer je met keys inlogt je het volgende terugkrijgt:
access_token
: het token om gebruik te maken van de API.token_type
: de standaard, dit is vrijwel altijd'Bearer'
.expires_in
: wanneer het token verloopt.scope
: je rol / rechten / autorisatie.
In onderstaande cel gaan we met keys inloggen om een token te verkrijgen:
import requests
url = 'https://login.bol.com/token?grant_type=client_credentials'
client_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
client_password = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
response = requests.post(url, auth=(client_id, client_password))
response.ok
Out: True
We zijn succesvol ingelogd.
Stap 3: Response bekijken
- We gaan nu het resultaat van de API call bekijken.
response.json()
Out:
{'access_token': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'token_type': 'Bearer',
'expires_in': 299,
'scope': 'RETAILER'}
We zien wat we hadden verwacht volgens de documentatie.
Stap 4: Token ophalen
- We gaan nu het token ophalen voor later gebruik.
- We bewaren het in variabele
token
.
token = response.json()['access_token']
token
Out: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
Het token is nu beschikbaar voor later gebruik.
Stap 5: Token gebruiken voor een API call
We gaan nu het token gebruiken voor een API call.
Daarbij gaan we de openstaande bestellingen van deze verkoper ophalen.
We volgen hierbij de documentatie.
In onderstaande cel doen we het volgende:
- We geven de URL op van het API endpoint om informatie van openstaande bestellingen op te halen.
- We maken de
headers
aan. Daarbij volgen we de documentatie van Bol.com. Hierbij geven we ook het token op. - We voeren een
GET
call uit.
url = 'https://api.bol.com/retailer/orders'
headers = {
'Authorization': f'Bearer {token}',
'Accept': 'application/vnd.retailer.v5+json',
'Content-Type': 'application/json',
}
response = requests.get(url, headers=headers)
response.ok
Out: True
De call is succesvol uitgevoerd.
Stap 6: Response bekijken
Met onderstaande bekijken we de response.
url = 'https://api.bol.com/retailer/orders'
headers = {
'Authorization': f'Bearer {token}',
'Accept': 'application/vnd.retailer.v5+json',
'Content-Type': 'application/json',
}
response = requests.get(url, headers=headers)
response.ok
Out:
{
'orders':
[
{
'orderId': '1234567890',
'orderPlacedDateTime': '2022-01-22T13:25:44+01:00',
'orderItems': [
{
'orderItemId': '2345978901',
'ean': '8719349012345',
'quantity': 2,
'quantityShipped': 0,
'quantityCancelled': 0
}
]
},
{
'orderId': '1234567891',
'orderPlacedDateTime': '2022-01-21T15:11:08+01:00',
'orderItems': [
{
'orderItemId': '2345978902',
'ean': '8719349012345',
'quantity': 10,
'quantityShipped': 0,
'quantityCancelled': 0
}
]
},
]
}
- We zien hier de details van de openstaande orders van de verkoper.
- Er zijn blijkbaar 2 openstaande orders.
- Beide bestaan ze uit 1 product per order.
Je heb nu gezien hoe je met OAuth2 kunt authentificeren.
Samenvatting APIs & authenticatie
- Authenticatie is nodig om gedrag van gebruikers te kunnen meten of beperken.
- Veelvoorkomende soorten authenticatie zijn soorten met keys en OAuth2. Bij authenticatie met keys krijg je toegang met een of meerdere keys. Bij authenticatie met OAuth2 log je in met keys, waarna je met een beperkt geldig token toegang krijgt.
Wil je nog veel meer leren over met mogelijkheden met Python voor Data Science? Schrijf je dan in voor onze Python cursus voor data science, onze machine learning training, onze data science opleiding of onze data science bootcamp en leer met vertrouwen te programmeren en analyseren in Python. Nadat je een van onze trainingen hebt gevolgd kun je zelfstandig verder aan de slag. Je kunt ook altijd even contact opnemen als je een vraag hebt. Bij al deze trainingen is het mogelijk een zelfstudie add-on te selecteren waarin je meer leert over werken met APIs vanuit Python
Download één van onze opleidingsbrochures voor meer informatie
Peter is een ervaren data scientist en python trainer. Na zijn studie aan de Technische Universiteit Delft heeft hij zich altijd bezig gehouden met data en diverse programmeertalen. Peter heeft veel data analyses uitgevoerd en processen geautomatiseerd met Python in productieomgevingen.