Voorbeelden

Codevoorbeelden & Integraties

Praktische voorbeelden in verschillende programmeertalen. Kopieer, plak en pas aan voor uw eigen project.

Modern JavaScript met fetch API en async/await.

Basis Request

Eenvoudig gebouw ophalen met BAG ID.

// Gebouw ophalen op BAG ID
const API_KEY = process.env.OPENDATAAPI_KEY;
const BAG_ID = '0363100012168052';

async function getBuilding(bagId) {
  const response = await fetch(
    `https://api.opendataapi.nl/v1/buildings/${bagId}`,
    {
      headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json'
      }
    }
  );

  if (!response.ok) {
    throw new Error(`HTTP error! status: ${response.status}`);
  }

  return response.json();
}

// Gebruik
const building = await getBuilding(BAG_ID);
console.log(`Bouwjaar: ${building.bouwjaar}`);
console.log(`Oppervlakte: ${building.oppervlakte} m²`);

Zoeken op Adres

Gebouwen zoeken op postcode en huisnummer.

// Zoeken op adres
async function searchBuildings(postcode, huisnummer) {
  const params = new URLSearchParams({
    postcode,
    huisnummer,
    limit: '10'
  });

  const response = await fetch(
    `https://api.opendataapi.nl/v1/buildings/search?${params}`,
    {
      headers: {
        'Authorization': `Bearer ${API_KEY}`
      }
    }
  );

  const data = await response.json();
  return data.results;
}

// Voorbeeld: zoek gebouw op Dam 1, Amsterdam
const results = await searchBuildings('1012JS', '1');
console.log(`Gevonden: ${results.length} gebouwen`);

Met Error Handling

Complete implementatie met foutafhandeling.

class OpenDataApiClient {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = 'https://api.opendataapi.nl/v1';
  }

  async request(endpoint, params = {}) {
    const url = new URL(`${this.baseUrl}${endpoint}`);
    Object.entries(params).forEach(([key, value]) => {
      url.searchParams.append(key, value);
    });

    const response = await fetch(url, {
      headers: {
        'Authorization': `Bearer ${this.apiKey}`,
        'Content-Type': 'application/json'
      }
    });

    if (response.status === 401) {
      throw new Error('Ongeldige API key');
    }
    if (response.status === 429) {
      throw new Error('Rate limit bereikt');
    }
    if (!response.ok) {
      throw new Error(`API Error: ${response.status}`);
    }

    return response.json();
  }

  getBuilding(bagId) {
    return this.request(`/buildings/${bagId}`);
  }

  searchBuildings(params) {
    return this.request('/buildings/search', params);
  }

  getBuildingsInBbox(minLat, minLon, maxLat, maxLon) {
    return this.request('/buildings/bbox', {
      minLat, minLon, maxLat, maxLon
    });
  }
}

// Gebruik
const client = new OpenDataApiClient(API_KEY);
const building = await client.getBuilding('0363100012168052');

Python voorbeelden met requests library.

Basis Request

Eenvoudig gebouw ophalen met requests.

import os
import requests

API_KEY = os.environ.get('OPENDATAAPI_KEY')
BASE_URL = 'https://api.opendataapi.nl/v1'

def get_building(bag_id: str) -> dict:
    """Haal gebouwinformatie op basis van BAG ID."""
    response = requests.get(
        f'{BASE_URL}/buildings/{bag_id}',
        headers={
            'Authorization': f'Bearer {API_KEY}',
            'Content-Type': 'application/json'
        }
    )
    response.raise_for_status()
    return response.json()

# Gebruik
building = get_building('0363100012168052')
print(f"Bouwjaar: {building['bouwjaar']}")
print(f"Oppervlakte: {building['oppervlakte']} m²")

Complete Client Class

Herbruikbare API client met error handling.

import requests
from typing import Optional, Dict, Any, List

class OpenDataApiClient:
    """Client voor de OpenDataApi."""
    
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = 'https://api.opendataapi.nl/v1'
        self.session = requests.Session()
        self.session.headers.update({
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        })
    
    def _request(self, endpoint: str, params: Optional[Dict] = None) -> Any:
        """Voer een API request uit."""
        response = self.session.get(
            f'{self.base_url}{endpoint}',
            params=params
        )
        
        if response.status_code == 401:
            raise ValueError('Ongeldige API key')
        if response.status_code == 429:
            raise Exception('Rate limit bereikt')
        
        response.raise_for_status()
        return response.json()
    
    def get_building(self, bag_id: str) -> Dict:
        """Haal gebouw op basis van BAG ID."""
        return self._request(f'/buildings/{bag_id}')
    
    def search_buildings(
        self,
        postcode: Optional[str] = None,
        huisnummer: Optional[str] = None,
        plaats: Optional[str] = None,
        limit: int = 10
    ) -> List[Dict]:
        """Zoek gebouwen op adres."""
        params = {'limit': limit}
        if postcode:
            params['postcode'] = postcode
        if huisnummer:
            params['huisnummer'] = huisnummer
        if plaats:
            params['plaats'] = plaats
        
        result = self._request('/buildings/search', params)
        return result['results']
    
    def get_buildings_in_bbox(
        self,
        min_lat: float,
        min_lon: float,
        max_lat: float,
        max_lon: float,
        limit: int = 100
    ) -> List[Dict]:
        """Haal gebouwen binnen bounding box."""
        params = {
            'minLat': min_lat,
            'minLon': min_lon,
            'maxLat': max_lat,
            'maxLon': max_lon,
            'limit': limit
        }
        result = self._request('/buildings/bbox', params)
        return result['results']

# Gebruik
client = OpenDataApiClient(os.environ['OPENDATAAPI_KEY'])
building = client.get_building('0363100012168052')

PHP voorbeelden met cURL.

Basis Request

Gebouw ophalen met cURL.

<?php

$apiKey = getenv('OPENDATAAPI_KEY');
$baseUrl = 'https://api.opendataapi.nl/v1';

function getBuilding(string $bagId): array {
    global $apiKey, $baseUrl;
    
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => "$baseUrl/buildings/$bagId",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer $apiKey",
            "Content-Type: application/json"
        ]
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode !== 200) {
        throw new Exception("API Error: HTTP $httpCode");
    }
    
    return json_decode($response, true);
}

// Gebruik
$building = getBuilding('0363100012168052');
echo "Bouwjaar: " . $building['bouwjaar'] . "\n";
echo "Oppervlakte: " . $building['oppervlakte'] . " m²\n";

Command-line voorbeelden voor snelle tests.

Gebouw Ophalen

Haal gebouwinformatie op met cURL.

# Gebouw ophalen op BAG ID
curl -X GET "https://api.opendataapi.nl/v1/buildings/0363100012168052" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

Zoeken op Adres

Zoek gebouwen op postcode en huisnummer.

# Zoeken op postcode en huisnummer
curl -X GET "https://api.opendataapi.nl/v1/buildings/search?postcode=1012JS&huisnummer=1" \
  -H "Authorization: Bearer YOUR_API_KEY"

Bounding Box Query

Haal alle gebouwen binnen een gebied op.

# Gebouwen binnen bounding box (centrum Amsterdam)
curl -X GET "https://api.opendataapi.nl/v1/buildings/bbox?minLat=52.36&minLon=4.89&maxLat=52.38&maxLon=4.91&limit=50" \
  -H "Authorization: Bearer YOUR_API_KEY"

3D Geometrie (LoD)

Haal 3D Level of Detail data op.

# 3D geometrie ophalen (Level of Detail 2.2)
curl -X GET "https://api.opendataapi.nl/v1/buildings/0363100012168052/lod?lod=lod22" \
  -H "Authorization: Bearer YOUR_API_KEY"
Best Practices

Tips voor productie

Aanbevelingen voor het gebruik van de API in productie-omgevingen.

Implementeer retry logica

Voeg exponential backoff toe voor het afhandelen van tijdelijke fouten en rate limits.

Cache responses

Gebouwdata verandert niet vaak. Cache responses om API calls te besparen.

Server-side requests

Maak API calls altijd vanaf uw server, nooit direct vanuit de browser.

Monitor uw gebruik

Houd uw API gebruik bij om onverwachte kosten of rate limits te voorkomen.

Meer nodig?

Bekijk de volledige endpoint referentie of neem contact op voor ondersteuning.