Bestands interface

Het  beperkte nut van XML als bestandsinterface

Wij komen vaak programmeurs tegen die vol vreugde XML tot de standaard verklaren van alle interfaces. Weg met het oude CSV, leve XML! 

En XML heeft een paar voordelen:

  • in XML is het  eenvoudig nieuwe velden toe te voegen.
  • Je hoeft niet beide systemen tegelijk te veranderen als de interface wordt gewijzigd
  • XML heeft een hiërarchische structuur, je kan daarom met 1 bestand volstaan in plaats van een serie onderling gerelateerde CSV bestanden.

Deze voordelen zijn natuurlijk niet wereldschokkend, maar het maakt interfaces iets aangenamer om te maken en te onderhouden. 

Maar ga nu niet blindelings alleen maar XML interfaces bouwen, er zijn twee dingen die je goed in de gaten moet houden:

  • Een XML interface heeft een interface beheer systeem nodig.
  • XML is niet efficiënt.
    Een systeem zal door XML altijd langzamer worden. Altijd!

Interface beheer systeem
De hype rondom XML heeft veel ontwikkelaars op het verkeerde spoor gezet, zij denken dat als beide systemen een XML bestand kunnen maken en lezen je klaar bent. Was het maar waar, helaas ben je nog maar aan het begin van het ontwikkeltraject. In interfaces gaat maar 5% van de code over de interface zelf, maar 95% over wat je moet doen als er iets fout gaat.

Een interface systeem bevat meer dan alleen een methode om bestanden in te lezen en weg te schrijven. Je moet ook een interface beheer systeem maken, dat er bijvoorbeeld op toeziet dat er geen interface bestanden verdwijnen, of dubbel worden ingelezen. Een interface beheer systeem moet ook loggen wat er gebeurd is, transactie afhandeling verzorgen, en automatisch ingrijpen als één van beide systemen terugvalt op een backup. Voorts bevat het meestal een rapportage systeem voor systeembeheerders, en de mogelijkheid voor hen om in te grijpen.
Zo, dat is een behoorlijke hoeveelheid extra werk.

Het bestaansrecht van systemen als Microsoft BizTalk is dan ook niet zozeer het vermogen om data te transporteren maar juist het controlesysteem rondom dit data transport. Wie een minder kostbare en complexe, meer op de taak gerichte oplossing wil kan ook BizTalk negeren en direct met Web Services en SOAP werken. Wij hebben dat bijvoorbeeld gedaan in het SuperCollect systeem, waarbij XML bestanden als Web Services op basis van SOAP worden uitgewisseld. Het grote voordeel voor ons was dat wij er zeker van zijn dat de SuperCollect interface op alle Microsoft varianten werkte, doordat wij een eigen zelf geschreven XML parser gebruiken. (Dat is een voordeel van offshore programmeren, door de lagere loonkosten kun je dingen zelf maken, en ben je minder afhankelijk van anderen. Dit leidt tot betere kwaliteit software.).

Vervang nooit SQL door XML
Voor sommige typen interfaces is XML gewoon te langzaam, of kost teveel ruimte. 
XML is vele malen (30 tot 1000 keer) zo langzaam is als een SQL statement. Logisch want SQL werkt met sets, en XML met losse records.  Bij grote aantallen records voldoet XML niet.

XML en Internet bijten elkaar
Er bestaat een hardnekkig misverstand: als je XML gebruikt over het Internet, dan zorgt het HTTP protocol voor compressie van het XML bestand. Dit is niet waar, HTTP comprimeert helemaal niks. Als je XML ook nog gebruikt voor het overbrengen van binaire bestanden, dan blaas je het nog verder op. En will je binaire bestanden toch in XML integreren dan moet je het eerst converteren naar Base64 encoding. 
Daarom zijn allerlei standaardisatie inspanningen rondom XML er paradoxaal op gericht om de rol van XML te verminderen: zo weinig mogelijk opslaan in XML. De data zelf wordt gewoon weer op de goede oude vertrouwde manier als binair bestand opgeslagen en overgezet. SOAP met attachments en DIME zijn voorbeelden van een dergelijke aanpak. Onlangs hebben wij bij een project de pure XML aanpak vervangen door SOAP met attachments. Eigenlijk was hierna 99,99% van het bestand gewoon ouderwets binair, alleen aan het begin zat een beetje XML. Jammer, maar onvermijdelijk, zelfs 10Mbs Internet verbindingen bleken gewoon te langzaam voor puur XML.

Mag je dan helemaal nergens XML gebruiken? Wanhoop niet, XML kan ook erg nuttig zijn. Lees verder over XML als INI file... 

©1996-2008 Lizatec
<  Is XML wel nuttig? INI File   >