api-authenticatie-hoe-uitleg-python

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?

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.
verbinden met een api in python voorbeeld tutorial

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:

  1. 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.
  2. Wanneer er voor een API betaald moet worden. Zo weet de ontwikkelaar hoe vaak een gebruiker een API call heeft uitgevoerd.
Met vertrouwen Python inzetten voor data analyses? Schrijf je in voor een van onze trainingen.



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:

API authenticatie met keys in Python

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:

API authenticatie met keys in Python

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:

oauth2 voorbeeld uitleg authenticatie

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

  1. Authenticatie is nodig om gedrag van gebruikers te kunnen meten of beperken.
  2. 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

by: