VNG-Realisatie / gemma-zaken

Samen ontwikkelen van API's voor Zaakgericht werken
https://vng-realisatie.github.io/gemma-zaken/
Other
41 stars 27 forks source link

Als frontend developer wil ik minder calls doen naar de ZGW API's, #2016

Closed RvdKlip closed 1 year ago

RvdKlip commented 2 years ago

zodat ik de performance optimaliseer, complexiteit reduceer, de foutgevoeligheid/foutafhandeling verlaag en daarmee het beroep op functioneel beheer verminder.

Dit kan bijvoorbeeld op niveau van: Opvragen zaak & Aanmaken van een zaak

Opvragen zaak Om een overzicht op het scherm te maken van een zaak moeten er een aantal calls gedaan worden naar de ZGW API's. Voor het tonen van de zaak met: de laatste status, resultaat, 1 document (met naam), aanvrager, 1 zaakobject en 1 eigenschap moeten er in totaal 9 aanroepen gedaan worden naar de zaken API en dan nog 5 à 6 naar de zaak catalogus om URL's te vertalen naar zinnige teksten (v.b. status URL, zaaktype URL). Deze laatste kunnen we eventueel cachen. Zijn er meer documenten, of als er nog geen resultaat is, kan het aantal calls iets meer zijn. Wil je een besluit tonen dan komen er weer een aantal calls bij.

Als één van deze calls fout gaat dan kan er geen complete zaak getoond worden. Aanroepen: • Zaak o ZaakType voor naam van de zaak (Ztc) • ZaakInformatieObjecten (Documenten) o Per object het enkelvoudigInformatieObject. Hierin staat de naam van het document • Rollen voor aanvrager o I.v.m. dynamische betrokkene moet ik per type (5x) een Request doen. o Per rol het RolType (Ztc) • Zaakobjecten (Boom) • Eigenschappen o Per eigenschap nog de EigenschapType omschrijving (Ztc) • Laatste Status o StatusType met omschrijving (Ztc) • Resultaat o ResultaatType voor naam (Ztc)

Aanmaken van een zaak. Om dezelfde zaak aan te maken zijn 7 REST calls nodig. Als er meer of minder documenten en eigenschappen zijn kan dat meer of minder REST calls zijn. Elk van deze REST calls kan fout gaan. Als dit gebeurt dan staat er maar een halve zaak in de ZGW API's. We zetten daarom de status als laatste zodat een BackOffice applicatie niet te vroeg een zaak oppakt. Voor een applicatie betekent dit ook dat er uitgebreide foutafhandeling nodig is om de gefaalde stappen opnieuw uit te voeren. Al dan niet geautomatiseerd maar uiteindelijk door interventie van functioneel beheer. Een voorbeeld wat fout kan gaan is het toevoegen van documenten (enkelvoudige data objecten). Hier zijn 2 REST calls voor nodig. De eerste om een document aan te maken en een tweede om het document te koppelen aan de zaak. Gaat de eerste call fout dan is er geen document toegevoegd aan de zaak; gaat de 2e call fout dan zit er wel een document in het zaak systeem maar die is aan geen enkele zaak gekoppeld.

De stappen zijn: • Zaak aanmaken (verplicht) • Rol; aanvrager toevoegen (procedureel verplicht) • Zaakobject toevoegen (zoals een Boom/ ObjectAPI object) (0-n) • Eigenschappen toevoegen (0-n) • Aanmaken document(en) (0-n). Twee REST calls per document o EnkelvoudigInformatieObject (document aanmaken) o Informatie Object (document koppelen aan de zaak) • Status aanmaken (procedureel verplicht)

In de huidige zaaksystemen van de Gemeente Rotterdam is het mogelijk om al de stappen in 1 Webservice operatie uit te voeren. Het opvoeren van de zaak kan nog steeds fout gaan maar je hebt geen zaken die maar half zijn doorgezet.

(Doorverwijzing vanuit: https://github.com/open-zaak/open-zaak/issues/1175)

michielverhoef commented 2 years ago

Opvragen van een zaak is de afgelpoen twee keer uitgebreid besproken bij het technisch gebruikersoverleg. Het staat ook op de planning om dat mee te nemen in de Zaken API 1.3 versie die op 7 juli uit komt: https://github.com/VNG-Realisatie/gemma-zaken/milestone/20

In het technisch gebruikersoverleg zijn twee mogelijkheden om dit op te lossen besproken, HAL+JSON en Inclusions. Het voorstel voor Inclusions staat hier beschreven: https://github.com/VNG-Realisatie/gemma-zaken/discussions/1960#discussioncomment-2389343

Meer informatie over JSON + HAL: https://en.wikipedia.org/wiki/Hypertext_Application_Language

Het schrijven is een apart onderwerp. Ik begrijp de wens, er wordt eigenlijk gevraagd om een StUF zakLk01 bericht. Dit komt op de agenda voor de functionele gebruikersgroep om te zien in hoeverre de wens gedeeld wordt door de andere gemeenten. De vraag is of dit iets is wat bij de registers moet liggen of bij een andere laag.

In ieder geval is dit iets wat het REST karakter van de API's aantast en daarom niet zomaar in de Zaken API (of een andere API van een register) toegepast kan worden.

joeribekker commented 2 years ago

Frontend moet ook niet direct de ZGW API's bevragen maar dit moet via een BFF (backend for frontend, of gewoon backend) gaan omwille van security en inderdaad om de informatie en performance op te halen die je specifiek nodig hebt voor je frontend (dus dat wil je altijd filteren uit bijvoorbeeld een zaak-response waar je niet perse wilt tonen wie de behandelaar is).

michielverhoef commented 1 year ago

Inmiddels is in Zaken API 1.5 en Documenten API 1.4 de mogelijkheid opgenomen via expand gerelateerde resources mee op te vragen en zo het aantal calls drastisch te verminderen.

Daarom wordt dit issue gesloten.