Upload
jonathan-leblanc
View
5.010
Download
0
Tags:
Embed Size (px)
DESCRIPTION
June 2012 presentation on ql.io and working with the system inside Node.js applications.
Citation preview
ql.io and Node.js: Next Generation Open Source Web Querying System
Jonathan LeBlancDeveloper Evangelist: X.commerce
Email: [email protected]: @jcleblanc
Github: github.com/jcleblanc
Overview of ql.io
Language Specifications
Monkey Patching & Enhancements
Integrating Into Your Node Applications
Tools and More
Topics We’ll Be Covering
Overview of ql.io
Language Specifications
Monkey Patching & Enhancements
Integrating Into Your Node Applications
Tools and More
Topics We’ll Be Covering
ql.io: The Problem is API Overload
ql.io: Developing for Mobile
ql.io: Reducing Workload + Processing
Reduced Documentation
Reduced Code Length
Reduced Result Syncing
ql.io: Increasing Performance (Requests)
ql.io: Error Handling and Reporting
ql.io: Open Standard Foundation
ql.io: Using the System
Standalone ServerWeb Endpoint
ql.io: Quering the Web Endpoint
HTTP GEThttp://ql.io/q?s=QUERY
ql.io: Using the Standalone Server
Node Hostql.io
Data (internal)
Data (external)
Overview of ql.io
Language Specifications
Monkey Patching & Enhancements
Integrating Into Your Node Applications
Tools and More
Topics We’ll Be Covering
Language: Defining a Data Source
Include in .ql TableInclude in Request
create table TABLE_NAME on select get from "http://api.com/?val1={val1}" using defaults val1="VALUE", val2="VALUE”;
Language: Create Table for Data Source
create table github.issues on select get from "https://github.com/api/v2/json/ issues/list/{user}/{repository}/ {state}/" using defaults state="open";
Language: Sample Github Issues Table
select * from TABLE_NAME where val1="VALUE" and val2="VALUE" limit 10 offset 3;
Language: Obtain Data From New Tables
select * from github.issues where user="jcleblanc" and repository="reddit-php-sdk";
Language: Sample Github Table Call
{"comments": 0,"body": "http://www.phpdoc.org/","title": "Use standardized documentation","updated_at": "2011/12/11 13:49:07 -0800","html_url": "https://github.com/jcleblanc/reddit-php-sdk/issues/3","state": "open”}
insert into bitly.shorten (longUrl) values ('http://ql.io/docs');
Language: Insert Request
"http://bit.ly/uZIvmY"
select ItemID, ViewItemURLForNaturalSearch, Location from details where itemId in (select itemId from finditems where keywords='mini cooper');
Language: Nested Selects
["330730216553","http://www.ebay.com/itm/Clubman-Auto-Sunroof-Prem-…","Huntingdon Valley, Pennsylvania"],
Test Console: http://ql.io/console
ql.io: The Test Console
user = "jcleblanc";slides = select * from slideshare where user="{user}";twitter = select * from github.users where user="{user}"; return { "slides": "{slides}", "twitter": "{twitter}"} via route '/social' using method post;
Language: Including Script Routes
curl --header "content-type: application/x-www-form-urlencoded" -d "user=jcleblanc" http://localhost:3000/social
Language: Using Script Routes
Overview of ql.io
Language Specifications
Monkey Patching & Enhancements
Integrating Into Your Node Applications
Tools and More
Topics We’ll Be Covering
create table TABLE_NAME on select get from "http://api.com/?val1={val1}" using defaults val1="VALUE" using patch "patch.js";
Patching: Including the Monkey Patch
exports['validate param'] = function(args, param, value) { switch(param) { case 'duration' : return !isNaN(value - 0) default: return true; }}
Patching: Validating Input Parameters
exports['patch body'] = function() { return { type: 'application/json', content: JSON.stringify({message : 'aok'}) };}
Patching: The Body Patch
exports['patch response'] = function(args){ var body = args.body; //modify response body return body;}
Patching: The Response Patch
Overview of ql.io
Language Specifications
Monkey Patching & Enhancements
Integrating Into Your Node Applications
Tools and More
Topics We’ll Be Covering
npm install ql.io-engine
Node.js: Installing the Package
var Engine = require('ql.io-engine');var engine = new Engine({ connection: 'close' });
Node.js: Including the Engine
Node.js: Building the Script
Overview of ql.io
Language Specifications
Monkey Patching & Enhancements
Integrating Into Your Node Applications
Tools and More
Topics We’ll Be Covering
Tools: API Masher
Visualization Engine: https://github.com/jcleblanc/api-masher
Technology Backbone– ql.io– jQuery– Mustache Templates
var format = “<li><a href=‘{{link}}’ target=‘_blank’> <img src=‘{{media:content.media:thumbnail.url}}’ width=‘{{media:content.media:thumbnail.width}}’ height=‘{{media:content.media:thumbnail.height}}’ /></a> <br /><span class=‘small’> <a href=‘{{link}}’ target=‘_blank’>{{title}}</a></span></li>”;
Tools: API Masher
var query = “create table slideshare on select get from ‘http://www.slideshare.net/rss/user/{user}’ resultset ‘rss.channel’; select * from slideshare where user=‘jcleblanc’”;
var insertEl = “widgetContainer”;
parser.push(query, format, insertEl);parser.render();
Tools: API Masher
Tools: API Masher Results
Showcase Website: http://jcleblanc.com
Tools: External API Tables
Tables Source: https://github.com/jcleblanc/ql.io-tables
ql.io: The Link
Thank You!http://slidesha.re/ql-io-node
Jonathan LeBlancDeveloper Evangelist: X.commerce
Email: [email protected]: @jcleblanc
Github: github.com/jcleblanc