SparQL is de query taal voor het
Semantic Web /
RDF (het proberen alle data op internet te annoteren en doorzoekbaar te maken). De Web Query Language (QI.io) van eBay is in feite een web-api abstractie laag (een op
node.js gebaseerde middle tier) waardoor je met een relatief eenvoudige query dezelfde informatie op kan vragen die je anders zelf moet schrijven met behulp van diverse custom API calls (en de bijbehorende honderden regels code).
Vaak zijn web API's zo opgezet dat ze één specifieke set data uitspugen, en geoptimaliseerd zijn voor dat specifieke doel. Neem bijvoorbeeld de
Flickr API. Daar heb je een API die kan alle foto albums van een gebruiker geven. Om alle foto's in een bepaald album op de te vragen moet je daarna een tweede API's aanroepen met het ID van het foto album waar je meer van wil zien. Om daarna van elke foto de detail informatie op te vragen moet je voor iedere foto weer een andere API aanroepen om detail informatie op te vragen. Dat zijn dus een berg API calls die voor nogal wat overhead kunnen zorgen in je applicatie, en nogal wat custom code vereissen in je applicatie. Met de Web Query Language is het mogelijk om een (op node.js gebaseerde) middle tier te installeren op een server die in feite API abstractie toepast. Daardoor is het mogelijk om
een query af te vuren op de middle tier waarmee je dus vergelijkbare vragen kan stellen als een een normale SQL query kan op een relationele database, maar nu dus over web API's in de middle tier een query op te stellen over diverse api's, en het resultaat te exposen als een custom api.
De insteek is ook -volgens mij met name- zo dat de
hostende partij (eBay, Flickr, Google, etcetera) de middle tier zal hosten. Doordat de abstractie op hun lokale netwerk plaatsvind, kunnen de diverse API calls veel sneller en efficiënter worden uitgevoerd dan wanneer ze allemaal vanaf een externe website / applicatie worden uitgevoerd (via internet, hoge latency). Aan de client kant is het voor de developer veel eenvoudiger geworden omdat je nog maar
één query hoeft te schrijven om data op te vragen die eerder honderden regels code en diverse API calls vereiste.
Voorbeeldje van QI.io:
To call three HTTP APIs, write this script:
prodid = select ProductID[0].Value from eBay.FindProducts where
QueryKeywords = 'macbook pro';
details = select * from eBay.ProductDetails where
ProductID in ('{prodid}') and ProductType = 'Reference';
reviews = select * from eBay.ProductReviews where
ProductID in ('{prodid}') and ProductType = 'Reference';
return select d.ProductID[0].Value as id, d.Title as title,
d.ReviewCount as reviewCount, r.ReviewDetails.AverageRating as rating
from details as d, reviews as r
where d.ProductID[0].Value = r.ProductID.Value
via route '/myapi' using method get;
and curl away
curl http://<host>:<port>/myapi
Daarmee expose je dus (via je eigen middle tier) je eigen custom api (myapi) wat een samenvoegsel is van drie eBay API's. Nu hoeft jouw software alleen 'myapi' aan te spreken om alle data op te vragen die het anders had moeten doen door de drie verschillende eBay api's aan te spreken.
Dus: developers blij (minder code te onderhouden, als API's wijzigen hoeft alleen de middle tier te worden aangepast), eBay blij (minder load op de servers en een eenvoudiger endpoint voor developers), gebruikers blij (potentieel sneller werkende sites / applicaties vanwege verminderde latency en overhead).
Het is zeker een interessante ontwikkeling en ik ga het zeker in de gaten houden
[Reactie gewijzigd door Verwijderd op 23 juli 2024 20:43]