Recipes
In the recipes documentation, we aim to describe some patterns to organize your API calls to maximize performance.
If you can give the equivalent example in your own language-of-preference, please submit a pull request!
Creating a Zaak, a Document and relating them
Using Django with zgw-consumers
import base64
from datetime import date
from requests import Response
from zgw_consumers.constants import APITypes
from zgw_consumers.models import Service
from zgw_consumers.client import build_client
zrc_client = build_client(Service.objects.get(api_type=APITypes.zrc))
drc_client = build_client(Service.objects.get(api_type=APITypes.drc))
# zaak creation
today = date.today().strftime("%Y-%m-%d")
zaak_body = {
"zaaktype": "https://test.openzaak.nl/catalogi/api/v1/zaaktypen/4acb5ab8-f189-4559-b18a-8a54553a74ff",
"bronorganisatie": "123456782",
"verantwoordelijkeOrganisatie": "123456782",
"registratiedatum": today,
"startdatum": today,
}
zaak_response: Response = zrc_client.post("zaak", json=zaak_body)
zaak = zaak_response.json()
# document creation
with open("/tmp/some_file.txt", "rb") as some_file:
document_body = {
"bronorganisatie": "123456782",
"creatiedatum": today,
"titel": "Example document",
"auteur": "Open Zaak",
"inhoud": base64.b64encode(some_file.read()).decode("utf-8"),
"bestandsomvang": some_file.size,
"bestandsnaam": some_file.name,
"taal": "nld",
"informatieobjecttype": (
"https://test.openzaak.nl/catalogi/api/v1/"
"informatieobjecttypen/abb89dae-238e-4e6a-aacd-0ba9724350a9"
)
}
document_response: Response = drc_client.post("enkelvoudiginformatieobject", json=document_body)
document = document_response.json()
# relate them
zio_body = {
"zaak": zaak["url"],
"informatieobject": document["url"],
}
zio: Response = zrc_client.post("zaakinformatieobject", json=zio_body)
import jwt from 'jsonwebtoken';
const CLIENT_ID = 'example';
const SECRET = 'secret';
// helpers
const getJWT = () => {
return jwt.sign(
{client_id: CLIENT_ID},
SECRET,
{
algorithm: 'HS256',
issuer: CLIENT_ID,
}
);
};
const apiCall = (url, method='get', body) => {
const fetchBody = body ? JSON.stringify(body) : null;
const token = getJWT();
const response = await fetch(
url,
{
method: method,
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json',
},
body: _body
}
);
const responseData = await response.json();
return responseData;
};
const toBase64 = file => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
// zaak creation
const today = '2020-10-16';
const zaakBody = {
'zaaktype': 'https://test.openzaak.nl/catalogi/api/v1/zaaktypen/4acb5ab8-f189-4559-b18a-8a54553a74ff',
'bronorganisatie': '123456782',
'verantwoordelijkeOrganisatie': '123456782',
'registratiedatum': today,
'startdatum': today,
}
const zaak = await apiCall(
'https://test.openzaak.nl/zaken/api/v1/zaken',
'POST',
zaakBody
);
// document creation
const someFile = document.querySelector('#myfile').files[0];
const documentBody = {
'bronorganisatie': '123456782',
'creatiedatum': today,
'titel': 'Example document',
'auteur': 'Open Zaak',
'inhoud': toBase64(someFile),
'bestandsomvang': someFile.size,
'bestandsnaam': someFile.name,
'taal': 'nld',
'informatieobjecttype': `https://test.openzaak.nl/catalogi/api/v1/
informatieobjecttypen/abb89dae-238e-4e6a-aacd-0ba9724350a9`
};
const doc = await apiCall(
'https://test.openzaak.nl/documenten/api/v1/enkelvoudiginformatieobjecten',
'POST',
documentBody
);
// relate them
const zioBody = {
'zaak': zaak.url,
'informatieobject': doc.url
};
const zio = await apiCall(
'https://test.openzaak.nl/zaken/api/v1/zaakinformatieobjecten',
'POST',
zioBody,
);