Ervaring Nathan Hannes (JUVO) met oData web services in Tibco DV

Freelance opdracht

Door Nathan Hannes

Vorige week bespraken we uitgebreid de voor- en nadelen van het gebruik van oData bij het bouwen van simpele web services. Vandaag laten we onze consultant, Nathan Hannes aan het woord over zijn ervaring met oData web services in Tibco DV.

In één van mijn projecten werd Tibco DV (een virtualisatietool die toelaat web services te bouwen via verschillende protocollen) gebruikt voor het opzetten van een view op een database schema. Deze view zou dan door front office geconsumeerd worden via oData om onder andere dropdown lists op te vullen.

Om dit concreet te maken, stel dat we opnieuw met de ‘Personen’ entity van hiervoor werken en dat er een front applicatie is die een dropdown list opvult die de namen bevat van de personen die een maandloon hebben boven een bepaalde inputwaarde (= input parameter die gebruikt wordt om de filter in te vullen voor oData request).

De query die gebouwd wordt ziet er als volgt uit (waarbij INPUT de inputparameter is):

http://host/service/Personen?$select=Naam&$filter=Maandloon ge INPUT

oData webservices

Hiernaast is het ook nodig om paginatie toe te passen op basis van parameters die worden meegegeven in de URL (top en skip) en die bepalen hoeveel resultaten zullen worden getoond.

Hiervoor is het ook nodig om te weten hoeveel resultaten we in totaal terugkrijgen (volledige resultaatset, om te weten wanneer we de volledige set doorlopen hebben).

Concreet, stel dat we een paginatie van 5 resulaten per pagina willen bekomen:

Call 1

Voor eerste 5 resultaten: http://host/service/Personen?$select=Naam&$filter=Maandloon ge INPUT &top=5&skip=0

Call 2

Voor resultaten 6-10: http://host/service/Personen?$select=Naam&$filter=Maandloon ge INPUT &top=5&skip=5

Dit moet worden herhaald tot skip>=count, aangezien dan alle resultaten doorlopen zijn.

Hier liepen we echter tegen bepaalde limitaties van de oData implementatie in Tibco DV:

  • De count optie binnen de TDV oData implementatie liet niet toe de resultaten te tellen na de query, met name het aantal resultaten teruggegeven door volgende request:

http://host/service/Personen?$select=Naam&$filter=Maandloon  ge INPUT

Het was dus niet mogelijk de count van de volledige resultaatset te bepalen waardoor het niet mogelijk was te bepalen over hoeveel records de paginatie moest itereren;

  • Er is binnen oData geen ‘select distinct’ optie, waardoor het niet mogelijk is distinct ‘naam’ te selecteren indien een naam gekoppeld is aan meerdere maandlonen, wat opnieuw een probleem geeft met paginatie aangezien we het aantal resultaten zouden overschatten (zelfs al zouden we de count kunnen bepalen, er zouden nog dubbels in kunnen zitten indien één naam aan meerdere maandlonen is gekoppeld); dit kon verder niet worden opgelost door de select te combineren met een group by omwille van het volgende punt.

 

  • De filteroptie binnen de TDV oData implementatie geeft naast de kolom gespecifieerd in select ook telkens de filter mee in de resultaatset (in dit geval dus naast ‘naam’ ook ‘maandloon’). Dit betekent dat zelfs indien oData zou toelaten een select distinct op de naam te doen of de select met group by te combineren, er dubbele records zouden worden geselecteerd indien meerdere maandlonen gekoppeld zijn aan één naam (aangezien de filter telkens mee wordt teruggegeven en hierop dan de select wordt toegepast).We hebben hier voor bepaalde delen van de implementatie gekozen voor stored procedures in plaats van oData. Echter, het is belangrijk op te merken dat dit niet enkel limitaties van oData  aangeeft maar ook van specifieke implementatiegaps van oData binnen de tools die je gebruikt om de web service op te zetten.

oData implementatie

Conclusie

oData is een zeer intuïtieve manier om snel, eenvoudig en efficiënt simpele web services op te zetten op een database of view. Het biedt een uitgebreide mogelijkheid voor selectie en filterpotjes en heeft een zeer praktische syntax die doet denken aan SQL.

Echter, bij het uitwerken van een solution design waarbij oData een rol kan spelen is het belangrijk om ook de limitaties in rekening te nemen, zoals security-overwegingen en bepaalde query limitaties (bijvoorbeeld het ontbreken van select distinct). En misschien nog belangrijker is het in overweging te nemen hoe de tooling die in de oplossing gebruikt wordt oData geïmplementeerd heeft aangezien er hier verdere limitaties kunnen optreden zoals geïllustreerd in vorige sectie.

Boodschap

Vertrouw niet enkel op de oData standaard documentatie maar zorg dat je ook begrijpt hoe jouw tooling deze geïmplementeerd heeft!

 

Heb je zelf interesse in het gebruik van oData of wil je hier graag meer over weten?
Contacteer ons via nathan.hannes@juvo.be
Wij helpen jou graag verder in de zoektocht naar een nieuw project.