2012: ql.io and Node.js
Upcoming SlideShare
Loading in...5
×
 

2012: ql.io and Node.js

on

  • 4,025 views

June 2012 presentation on ql.io and working with the system inside Node.js applications.

June 2012 presentation on ql.io and working with the system inside Node.js applications.

Statistics

Views

Total Views
4,025
Views on SlideShare
3,028
Embed Views
997

Actions

Likes
3
Downloads
20
Comments
0

9 Embeds 997

http://www.scoop.it 690
http://www.nakedtechnologist.com 196
http://go.developer.ebay.com 59
http://lanyrd.com 39
http://us-w1.rockmelt.com 8
http://www.verious.com 2
http://webcache.googleusercontent.com 1
http://coderwall.com 1
http://localhost 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Mashing up multiple data sourcesPerformance issuesAdd slides showing performance hits
  • Most mobile applications will, on average, make at least 5+ HTTP data requests per UI paint.
  • Language based on a SQL-like syntax which exports all data to JSON
  • If you’re using the web endpoint you would make HTTP GET requests to the API endpoint, inserting your query in the request. A JSON response will be returned to you.
  • If you download the standalone server version of ql.io, it will sit on top of your existing node server (or within your node applications) and be able to query your internal data and/or external data sources
  • A create table call (to define a data source) may be included in the HTTP request to the ql.io web source or defined in a .ql file, which is added into the /tables directory of your application.
  • Update / Delete requests not currently supported, but are being actively worked on.
  • create table slideshare on select get from "http://www.slideshare.net/rss/user/{user}" resultset "rss.channel";create table github.users on select get from "http://github.com/api/v2/json/user/show/{user}";user = "jcleblanc";slides = select * from slideshare where user="{user}";twitter = select * from github.users where user="{user}";return { "slides": "{slides}", "twitter": "{twitter}"}
  • Route files are also stored with the .ql extension but are placed under the routes directory
  • var script = "create table geocoder " + " on select get from 'http://maps.googleapis.com/maps/api/geocode/json?address={address}&sensor=true' " + " resultset 'results.geometry.location'" + "select lat as lattitude, lng as longitude from geocoder where address='Mt. Everest'";engine.execute(script, function(emitter) {emitter.on('end', function(err, res) {console.log(res.body[0]); });});
  • var script = "create table geocoder " + " on select get from 'http://maps.googleapis.com/maps/api/geocode/json?address={address}&sensor=true' " + " resultset 'results.geometry.location'" + "select lat as lattitude, lng as longitude from geocoder where address='Mt. Everest'";engine.execute(script, function(emitter) {emitter.on('end', function(err, res) {console.log(res.body[0]); });});

2012: ql.io and Node.js 2012: ql.io and Node.js Presentation Transcript

  • ql.io and Node.js: Next GenerationOpen Source Web Querying System Jonathan LeBlanc Developer Evangelist: X.commerce Email: jleblanc@x.com Twitter: @jcleblanc Github: github.com/jcleblanc
  • 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 Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • 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 Web Endpoint Standalone Server
  • ql.io: Quering the Web Endpoint HTTP GET http://ql.io/q?s=QUERY
  • ql.io: Using the Standalone Server Data (internal) ql.io Node Host Data (external)
  • Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • Language: Defining a Data Source Include in Request Include in .ql Table
  • Language: Create Table for Data Source create table TABLE_NAME on select get from "http://api.com/?val1={val1}" using defaults val1="VALUE", val2="VALUE”;
  • Language: Sample Github Issues Table create table github.issues on select get from "https://github.com/api/v2/json/ issues/list/{user}/{repository}/ {state}/" using defaults state="open";
  • Language: Obtain Data From New Tables select * from TABLE_NAME where val1="VALUE" and val2="VALUE" limit 10 offset 3;
  • Language: Sample Github Table Call select * from github.issues where user="jcleblanc" and repository="reddit-php-sdk"; { "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” }
  • Language: Insert Request insert into bitly.shorten (longUrl) values (http://ql.io/docs); "http://bit.ly/uZIvmY"
  • Language: Nested Selects select ItemID, ViewItemURLForNaturalSearch, Location from details where itemId in (select itemId from finditems where keywords=mini cooper); [ "330730216553", "http://www.ebay.com/itm/Clubman-Auto-Sunroof-Prem-…", "Huntingdon Valley, Pennsylvania" ],
  • ql.io: The Test Console Test Console: http://ql.io/console
  • Language: Including Script Routes 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: Using Script Routes curl --header "content-type: application/x-www-form-urlencoded" -d "user=jcleblanc" http://localhost:3000/social
  • Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • Patching: Including the Monkey Patch create table TABLE_NAME on select get from "http://api.com/?val1={val1}" using defaults val1="VALUE" using patch "patch.js";
  • Patching: Validating Input Parameters exports[validate param] = function(args, param, value) { switch(param) { case duration : return !isNaN(value - 0) default: return true; } }
  • Patching: The Body Patch exports[patch body] = function() { return { type: application/json, content: JSON.stringify({message : aok}) }; }
  • Patching: The Response Patch exports[patch response] = function(args){ var body = args.body; //modify response body return body; }
  • Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • Node.js: Installing the Package npm install ql.io-engine
  • Node.js: Including the Engine var Engine = require(ql.io-engine); var engine = new Engine({ connection: close });
  • Node.js: Building the Script
  • Topics We’ll Be Covering Overview of ql.io Language Specifications Monkey Patching & Enhancements Integrating Into Your Node Applications Tools and More
  • Tools: API Masher Visualization Engine: https://github.com/jcleblanc/api-masher Technology Backbone – ql.io – jQuery – Mustache Templates
  • Tools: API Masher 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 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 LeBlanc Developer Evangelist: X.commerce Email: jleblanc@x.com Twitter: @jcleblanc Github: github.com/jcleblanc