Op Lotusphere 2010, dat plaatsvond begin dit jaar, presenteerde Steve Nikopoulos van IBM een voorproefje van de Domino Data API die, onder voorbehoud, over een maand of twee wordt verwacht in de nieuwe ND 8.5.2 versie.
Deze nieuwe API op de Domino server is onderdeel van Domino Access Services, dat erop gericht is om op webgebaseerde API's voor Domino functionaliteit te ontwikkelen.
standaard webtechnieken voor manipuleren Domino objecten
De Domino Data API maakt gebruik van over http(s) verstuurde XML berichten om Domino functionaliteit toegankelijk te maken.
De redenen achter de nieuwe Data API zijn:
- het aanbieden van nieuwe API's die de toegang tot enkele moeilijk bereikbare features vereenvoudigen
- het gemakkelijker maken om met Domino te werken voor niet-Domino ontwikkelaars
- het vereenvoudigen van integratie met andere applicaties
Voor Domino ontwikkelaars is met name het laatste punt erg interessant. Vanuit elke applicatie, die via http XML berichten kan lezen en versturen, wordt het mogelijk om de volgende acties uit te voeren op Notes databases en documenten:
- aanmaken van documenten (met form gebaseerde validaties en berekeningen)
- verwijderen van documenten
- aanpassen van documenten:
- met HTML of MIME als rich text
- vervangen en verwijderen van items
- documenten toevoegen aan of verwijderen uit folders
- lezen van documenten:
- met HTML representatie van rich text items met links naar attachments
- met MIME representatie van rich text items inclusief attachments
- met decrypten van encrypted items (in speciaal geconfigureerde mail databases)
- lezen van informatie over:
- databases , forms, views, folders en rijen, kolommen en categorieën in views/folders
- documenten in een database, view, folder of categorie (die eventueel voldoen aan full text search criteria en/of die zijn aangemaakt/aangepast sinds een bepaalde datum)
Voor de duidelijkheid: de Domino Data API maakt het zelfs mogelijk rich text items met attachments aan te maken door deze in MIME formaat in een XML bericht te versturen!
REST architectuur
De Domino Data API is een zogenaamde RESTful web API. Dit houdt onder meer in dat elk object met een URI geïdentificeerd wordt en middels andere URI's (links) verwijst naar verwante objecten. Op deze wijze kunt u een verzameling objecten (gerepresenteerd in XML) doorlopen tot het gewenste object is gevonden. Dit in tegenstelling tot bijvoorbeeld een SOAP gebaseerde webservice waar de binnen de webservice gedefinieerde methods gebruikt moeten worden om objecten te benaderen.
Een ander kenmerk van een RESTful architectuur is dat de standaard HTPP methods gebruikt worden om acties uit te voeren, zoals GET, PUT, POST en DELETE. Met een GET request wordt bijvoorbeeld een XML weergave van een object getoond terwijl met een POST request een nieuw document wordt aangemaakt.
Een ATOM feed is een voorbeeld van een RESTful web API. De Domino Data API maakt zelfs gebruik van het ATOM formaat om collecties (databases op de server, views in databases, documenten in views, et cetera) te representeren. Onderstaande afbeelding toont de ATOM feed van de collectie databases op de server middels de server access URL 'http://hostname/api/data'.
figuur 1: (gedeeltelijke) ATOM feed van het top-level van de Data API
Door de link naar een bepaalde database te volgen wordt de ATOM feed van de collecties binnen de database getoond (figuur 2). Vervolgens is het mogelijk een link te volgen naar een document collectie en uiteindelijk naar individuele documenten. Het is ook mogelijk om direct een URL naar een individueel document te openen zodat u niet de verschillende collecties hoeft te doorlopen, bijvoorbeeld: 'http://hostname/database/api/data/documents/u/40BBF4453F28ABBBC12576F7000B82AA/'
figuur 2: (gedeeltelijke) ATOM feed van database collecties
conclusie
De Domino Data API stelt ontwikkelaars in staat op eenvoudige wijze Domino functionaliteit te benaderen. Hierdoor wordt het ook voor niet-Domino ontwikkelaars mogelijk van deze functionaliteit gebruik te maken. Maar ook Domino ontwikkelaars krijgen een krachtig middel in handen, met name voor de integratie met andere applicaties.