SlideShare a Scribd company logo
1 of 12
When to reinvent the wheel?
Building a JSON-based query language for JavaScript/TypeScript
@ashleydavis75
Background
 GraphQL didn’t fit my needs
 Thus MiniQL was born
@ashleydavis75
What is GraphQL?
 A language to query and update data
 Very popular
 Created by Facebook
 Open source
 It’s quite incredible
https://graphql.org/
What’s wrong with GraphQL?
 Forced schema
 Add a new language to your stack
 Too big/complex
 Time consuming to implement
 Tedious to have to specify everything you want returned
Why reinvent the wheel?
 When is it appropriate?
@ashleydavis75
Why reinvent the wheel?
 If no one reinvented wheels we’d never have better wheels
@ashleydavis75
Why reinvent the wheel?
 The existing wheel doesn’t do what you want
 To make a better wheel
@ashleydavis75
Why reinvent the wheel?
 For fun or education
@ashleydavis75
Why reinvent the wheel?
 For fun or education
 But not at work
@ashleydavis75
Introducing MiniQL
 Features
 JSON-based query language
 Implemented in TypeScript for use in JavaScript/TypeScript
 No schema
 All fields returned by default
 Delegate features to the backend
 Node.js or the browser
@ashleydavis75
MiniQL demo
 Demo time!
@ashleydavis75
Resources
 MiniQL: https://github.com/miniql/miniql
 Interactive example: https://miniql.github.io/miniql-interactive-example/
 GraphQL: https://graphql.org/
 TypeScript template: https://github.com/ashleydavis/typescript-template
 Bootstrapping Microservices: http://bit.ly/2o0aDsP
@ashleydavis75

More Related Content

What's hot

Editable PowerPoint project plan template - wide screen
Editable PowerPoint project plan template - wide screenEditable PowerPoint project plan template - wide screen
Editable PowerPoint project plan template - wide screenOffice Timeline
 
SharePoint Saturday Utah 2018 - SharePoint Framework, Angular and Azure Funct...
SharePoint Saturday Utah 2018 - SharePoint Framework, Angular and Azure Funct...SharePoint Saturday Utah 2018 - SharePoint Framework, Angular and Azure Funct...
SharePoint Saturday Utah 2018 - SharePoint Framework, Angular and Azure Funct...Sébastien Levert
 
Quarterly Technology Briefing, Manchester, UK September 2013
Quarterly Technology Briefing, Manchester, UK September 2013Quarterly Technology Briefing, Manchester, UK September 2013
Quarterly Technology Briefing, Manchester, UK September 2013Thoughtworks
 
EXPERTALKS: Jul 2012 - Build using Gradle
EXPERTALKS: Jul 2012 - Build using GradleEXPERTALKS: Jul 2012 - Build using Gradle
EXPERTALKS: Jul 2012 - Build using GradleEXPERTALKS
 
Novidades do ASP.NET e do Visual Studio 2013
Novidades do ASP.NET e do Visual Studio 2013Novidades do ASP.NET e do Visual Studio 2013
Novidades do ASP.NET e do Visual Studio 2013Jiéverson Maissiat
 
SharePoint Fest Chicago 2017 - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Chicago 2017 - SharePoint Framework, Angular & Azure FunctionsSharePoint Fest Chicago 2017 - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Chicago 2017 - SharePoint Framework, Angular & Azure FunctionsSébastien Levert
 
From zero to test in 60 seconds
From zero to test in 60  secondsFrom zero to test in 60  seconds
From zero to test in 60 secondsHugh McCamphill
 
Telstra’s Journey to SAFe - RallyON - June 2013
Telstra’s Journey to SAFe - RallyON - June 2013Telstra’s Journey to SAFe - RallyON - June 2013
Telstra’s Journey to SAFe - RallyON - June 2013Em Campbell-Pretty
 
Create Alexa Skills using IBM Watson Conversation and Apache OpenWhisk
Create Alexa Skills using IBM Watson Conversation and Apache OpenWhiskCreate Alexa Skills using IBM Watson Conversation and Apache OpenWhisk
Create Alexa Skills using IBM Watson Conversation and Apache OpenWhisk Niklas Heidloff
 
Improving Information Management Delivery With Agile Data Warehousing - June ...
Improving Information Management Delivery With Agile Data Warehousing - June ...Improving Information Management Delivery With Agile Data Warehousing - June ...
Improving Information Management Delivery With Agile Data Warehousing - June ...Em Campbell-Pretty
 
Agile Software Development and Continuous Delivery at UPT DEGI | 25th of Sep...
Agile Software Development and Continuous Delivery at UPT DEGI  | 25th of Sep...Agile Software Development and Continuous Delivery at UPT DEGI  | 25th of Sep...
Agile Software Development and Continuous Delivery at UPT DEGI | 25th of Sep...Eduardo Ribeiro
 

What's hot (14)

Editable PowerPoint project plan template - wide screen
Editable PowerPoint project plan template - wide screenEditable PowerPoint project plan template - wide screen
Editable PowerPoint project plan template - wide screen
 
SharePoint Saturday Utah 2018 - SharePoint Framework, Angular and Azure Funct...
SharePoint Saturday Utah 2018 - SharePoint Framework, Angular and Azure Funct...SharePoint Saturday Utah 2018 - SharePoint Framework, Angular and Azure Funct...
SharePoint Saturday Utah 2018 - SharePoint Framework, Angular and Azure Funct...
 
Quarterly Technology Briefing, Manchester, UK September 2013
Quarterly Technology Briefing, Manchester, UK September 2013Quarterly Technology Briefing, Manchester, UK September 2013
Quarterly Technology Briefing, Manchester, UK September 2013
 
EXPERTALKS: Jul 2012 - Build using Gradle
EXPERTALKS: Jul 2012 - Build using GradleEXPERTALKS: Jul 2012 - Build using Gradle
EXPERTALKS: Jul 2012 - Build using Gradle
 
Novidades do ASP.NET e do Visual Studio 2013
Novidades do ASP.NET e do Visual Studio 2013Novidades do ASP.NET e do Visual Studio 2013
Novidades do ASP.NET e do Visual Studio 2013
 
SharePoint Fest Chicago 2017 - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Chicago 2017 - SharePoint Framework, Angular & Azure FunctionsSharePoint Fest Chicago 2017 - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Chicago 2017 - SharePoint Framework, Angular & Azure Functions
 
How To Tweak Angular 2 Performance
How To Tweak Angular 2 PerformanceHow To Tweak Angular 2 Performance
How To Tweak Angular 2 Performance
 
From zero to test in 60 seconds
From zero to test in 60  secondsFrom zero to test in 60  seconds
From zero to test in 60 seconds
 
Testing for performance
Testing for performanceTesting for performance
Testing for performance
 
Telstra’s Journey to SAFe - RallyON - June 2013
Telstra’s Journey to SAFe - RallyON - June 2013Telstra’s Journey to SAFe - RallyON - June 2013
Telstra’s Journey to SAFe - RallyON - June 2013
 
ABC: Angular, Bazel, CLI
ABC: Angular, Bazel, CLIABC: Angular, Bazel, CLI
ABC: Angular, Bazel, CLI
 
Create Alexa Skills using IBM Watson Conversation and Apache OpenWhisk
Create Alexa Skills using IBM Watson Conversation and Apache OpenWhiskCreate Alexa Skills using IBM Watson Conversation and Apache OpenWhisk
Create Alexa Skills using IBM Watson Conversation and Apache OpenWhisk
 
Improving Information Management Delivery With Agile Data Warehousing - June ...
Improving Information Management Delivery With Agile Data Warehousing - June ...Improving Information Management Delivery With Agile Data Warehousing - June ...
Improving Information Management Delivery With Agile Data Warehousing - June ...
 
Agile Software Development and Continuous Delivery at UPT DEGI | 25th of Sep...
Agile Software Development and Continuous Delivery at UPT DEGI  | 25th of Sep...Agile Software Development and Continuous Delivery at UPT DEGI  | 25th of Sep...
Agile Software Development and Continuous Delivery at UPT DEGI | 25th of Sep...
 

Similar to When to reinvent the wheel / Building a query language in TypeScript

React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)Pavel Chertorogov
 
WordPress on the Jamstack by rtCamper Muhammad Muhsin @ WordPress Colombo Meetup
WordPress on the Jamstack by rtCamper Muhammad Muhsin @ WordPress Colombo MeetupWordPress on the Jamstack by rtCamper Muhammad Muhsin @ WordPress Colombo Meetup
WordPress on the Jamstack by rtCamper Muhammad Muhsin @ WordPress Colombo MeetuprtCamp
 
How to GraphQL
How to GraphQLHow to GraphQL
How to GraphQLTomasz Bak
 
GraphQL - Missing Link In REST
GraphQL -  Missing Link In RESTGraphQL -  Missing Link In REST
GraphQL - Missing Link In RESTAnubolu Sreekanth
 
GraphQL over REST at Reactathon 2018
GraphQL over REST at Reactathon 2018GraphQL over REST at Reactathon 2018
GraphQL over REST at Reactathon 2018Sashko Stubailo
 
GraphQL-ify your APIs - Devoxx UK 2021
 GraphQL-ify your APIs - Devoxx UK 2021 GraphQL-ify your APIs - Devoxx UK 2021
GraphQL-ify your APIs - Devoxx UK 2021Soham Dasgupta
 
APIdays Paris 2018 - GraphQL Opening Talk: The State of GraphQL, Jonathan Jal...
APIdays Paris 2018 - GraphQL Opening Talk: The State of GraphQL, Jonathan Jal...APIdays Paris 2018 - GraphQL Opening Talk: The State of GraphQL, Jonathan Jal...
APIdays Paris 2018 - GraphQL Opening Talk: The State of GraphQL, Jonathan Jal...apidays
 
Where does CSS come from?
Where does CSS come from?Where does CSS come from?
Where does CSS come from?Rachel Andrew
 
Graph ql subscriptions on the jvm
Graph ql subscriptions on the jvmGraph ql subscriptions on the jvm
Graph ql subscriptions on the jvmGerard Klijs
 
Building and deploying GraphQL Servers with AWS Lambda and Prisma I AWS Dev D...
Building and deploying GraphQL Servers with AWS Lambda and Prisma I AWS Dev D...Building and deploying GraphQL Servers with AWS Lambda and Prisma I AWS Dev D...
Building and deploying GraphQL Servers with AWS Lambda and Prisma I AWS Dev D...AWS Germany
 
A Link Generator for Increasing the Utility of OpenAPI-to-GraphQL Translations
A Link Generator for Increasing the Utility of OpenAPI-to-GraphQL TranslationsA Link Generator for Increasing the Utility of OpenAPI-to-GraphQL Translations
A Link Generator for Increasing the Utility of OpenAPI-to-GraphQL TranslationsIstvanKoren
 
Sashko Stubailo - The GraphQL and Apollo Stack: connecting everything together
Sashko Stubailo - The GraphQL and Apollo Stack: connecting everything togetherSashko Stubailo - The GraphQL and Apollo Stack: connecting everything together
Sashko Stubailo - The GraphQL and Apollo Stack: connecting everything togetherReact Conf Brasil
 
The Apollo and GraphQL Stack
The Apollo and GraphQL StackThe Apollo and GraphQL Stack
The Apollo and GraphQL StackSashko Stubailo
 
Frontcon Riga - GraphQL Will Do To REST What JSON Did To XML
Frontcon Riga - GraphQL Will Do To REST What JSON Did To XMLFrontcon Riga - GraphQL Will Do To REST What JSON Did To XML
Frontcon Riga - GraphQL Will Do To REST What JSON Did To XMLRoy Derks
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQLİlker Güller
 
Graphql presentation
Graphql presentationGraphql presentation
Graphql presentationVibhor Grover
 
GraphQL London January 2018: Graphql tooling
GraphQL London January 2018: Graphql toolingGraphQL London January 2018: Graphql tooling
GraphQL London January 2018: Graphql toolingSøren Bramer Schmidt
 

Similar to When to reinvent the wheel / Building a query language in TypeScript (20)

Graph QL + Swift
Graph QL + SwiftGraph QL + Swift
Graph QL + Swift
 
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
 
WordPress on the Jamstack by rtCamper Muhammad Muhsin @ WordPress Colombo Meetup
WordPress on the Jamstack by rtCamper Muhammad Muhsin @ WordPress Colombo MeetupWordPress on the Jamstack by rtCamper Muhammad Muhsin @ WordPress Colombo Meetup
WordPress on the Jamstack by rtCamper Muhammad Muhsin @ WordPress Colombo Meetup
 
How to GraphQL
How to GraphQLHow to GraphQL
How to GraphQL
 
GraphQL - Missing Link In REST
GraphQL -  Missing Link In RESTGraphQL -  Missing Link In REST
GraphQL - Missing Link In REST
 
GraphQL over REST at Reactathon 2018
GraphQL over REST at Reactathon 2018GraphQL over REST at Reactathon 2018
GraphQL over REST at Reactathon 2018
 
GraphQL-ify your APIs - Devoxx UK 2021
 GraphQL-ify your APIs - Devoxx UK 2021 GraphQL-ify your APIs - Devoxx UK 2021
GraphQL-ify your APIs - Devoxx UK 2021
 
Pave the Golden Path On Your Internal Platform
Pave the Golden Path On Your Internal PlatformPave the Golden Path On Your Internal Platform
Pave the Golden Path On Your Internal Platform
 
APIdays Paris 2018 - GraphQL Opening Talk: The State of GraphQL, Jonathan Jal...
APIdays Paris 2018 - GraphQL Opening Talk: The State of GraphQL, Jonathan Jal...APIdays Paris 2018 - GraphQL Opening Talk: The State of GraphQL, Jonathan Jal...
APIdays Paris 2018 - GraphQL Opening Talk: The State of GraphQL, Jonathan Jal...
 
Where does CSS come from?
Where does CSS come from?Where does CSS come from?
Where does CSS come from?
 
Graph ql subscriptions on the jvm
Graph ql subscriptions on the jvmGraph ql subscriptions on the jvm
Graph ql subscriptions on the jvm
 
GraphQL.net
GraphQL.netGraphQL.net
GraphQL.net
 
Building and deploying GraphQL Servers with AWS Lambda and Prisma I AWS Dev D...
Building and deploying GraphQL Servers with AWS Lambda and Prisma I AWS Dev D...Building and deploying GraphQL Servers with AWS Lambda and Prisma I AWS Dev D...
Building and deploying GraphQL Servers with AWS Lambda and Prisma I AWS Dev D...
 
A Link Generator for Increasing the Utility of OpenAPI-to-GraphQL Translations
A Link Generator for Increasing the Utility of OpenAPI-to-GraphQL TranslationsA Link Generator for Increasing the Utility of OpenAPI-to-GraphQL Translations
A Link Generator for Increasing the Utility of OpenAPI-to-GraphQL Translations
 
Sashko Stubailo - The GraphQL and Apollo Stack: connecting everything together
Sashko Stubailo - The GraphQL and Apollo Stack: connecting everything togetherSashko Stubailo - The GraphQL and Apollo Stack: connecting everything together
Sashko Stubailo - The GraphQL and Apollo Stack: connecting everything together
 
The Apollo and GraphQL Stack
The Apollo and GraphQL StackThe Apollo and GraphQL Stack
The Apollo and GraphQL Stack
 
Frontcon Riga - GraphQL Will Do To REST What JSON Did To XML
Frontcon Riga - GraphQL Will Do To REST What JSON Did To XMLFrontcon Riga - GraphQL Will Do To REST What JSON Did To XML
Frontcon Riga - GraphQL Will Do To REST What JSON Did To XML
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
Graphql presentation
Graphql presentationGraphql presentation
Graphql presentation
 
GraphQL London January 2018: Graphql tooling
GraphQL London January 2018: Graphql toolingGraphQL London January 2018: Graphql tooling
GraphQL London January 2018: Graphql tooling
 

More from Ashley Davis

Live reload across the stack
Live reload across the stackLive reload across the stack
Live reload across the stackAshley Davis
 
Microservices with Node.js - Livestreamed for Manning
Microservices with Node.js - Livestreamed for ManningMicroservices with Node.js - Livestreamed for Manning
Microservices with Node.js - Livestreamed for ManningAshley Davis
 
Rapid Fullstack Development
Rapid Fullstack DevelopmentRapid Fullstack Development
Rapid Fullstack DevelopmentAshley Davis
 
Rapid Fullstack Development
Rapid Fullstack DevelopmentRapid Fullstack Development
Rapid Fullstack DevelopmentAshley Davis
 
Building microservices with Node.js - part 3
Building microservices with Node.js - part 3Building microservices with Node.js - part 3
Building microservices with Node.js - part 3Ashley Davis
 
Microservices with Node.js for BrisJS
Microservices with Node.js for BrisJSMicroservices with Node.js for BrisJS
Microservices with Node.js for BrisJSAshley Davis
 
Building microservices with Node.js - part 2
Building microservices with Node.js - part 2Building microservices with Node.js - part 2
Building microservices with Node.js - part 2Ashley Davis
 
Building microservices with Node.js - part 1
Building microservices with Node.js - part 1Building microservices with Node.js - part 1
Building microservices with Node.js - part 1Ashley Davis
 
How to be a good developer
How to be a good developerHow to be a good developer
How to be a good developerAshley Davis
 
Crafting build pipelines with Docker
Crafting build pipelines with DockerCrafting build pipelines with Docker
Crafting build pipelines with DockerAshley Davis
 
How to be a good developer
How to be a good developerHow to be a good developer
How to be a good developerAshley Davis
 
Building desktop apps in java script with Electron
Building desktop apps in java script with ElectronBuilding desktop apps in java script with Electron
Building desktop apps in java script with ElectronAshley Davis
 
Testing trading strategies in JavaScript
Testing trading strategies in JavaScriptTesting trading strategies in JavaScript
Testing trading strategies in JavaScriptAshley Davis
 
Node.js memory limitations
Node.js memory limitationsNode.js memory limitations
Node.js memory limitationsAshley Davis
 
Ai and ml study group lecture 1 and 2
Ai and ml study group   lecture 1 and 2Ai and ml study group   lecture 1 and 2
Ai and ml study group lecture 1 and 2Ashley Davis
 
Data analysis in JavaScript
Data analysis in JavaScriptData analysis in JavaScript
Data analysis in JavaScriptAshley Davis
 

More from Ashley Davis (17)

Live reload across the stack
Live reload across the stackLive reload across the stack
Live reload across the stack
 
Microservices with Node.js - Livestreamed for Manning
Microservices with Node.js - Livestreamed for ManningMicroservices with Node.js - Livestreamed for Manning
Microservices with Node.js - Livestreamed for Manning
 
Rapid Fullstack Development
Rapid Fullstack DevelopmentRapid Fullstack Development
Rapid Fullstack Development
 
Rapid Fullstack Development
Rapid Fullstack DevelopmentRapid Fullstack Development
Rapid Fullstack Development
 
Building microservices with Node.js - part 3
Building microservices with Node.js - part 3Building microservices with Node.js - part 3
Building microservices with Node.js - part 3
 
Microservices with Node.js for BrisJS
Microservices with Node.js for BrisJSMicroservices with Node.js for BrisJS
Microservices with Node.js for BrisJS
 
Building microservices with Node.js - part 2
Building microservices with Node.js - part 2Building microservices with Node.js - part 2
Building microservices with Node.js - part 2
 
Building microservices with Node.js - part 1
Building microservices with Node.js - part 1Building microservices with Node.js - part 1
Building microservices with Node.js - part 1
 
How to be a good developer
How to be a good developerHow to be a good developer
How to be a good developer
 
Crafting build pipelines with Docker
Crafting build pipelines with DockerCrafting build pipelines with Docker
Crafting build pipelines with Docker
 
How to be a good developer
How to be a good developerHow to be a good developer
How to be a good developer
 
Building desktop apps in java script with Electron
Building desktop apps in java script with ElectronBuilding desktop apps in java script with Electron
Building desktop apps in java script with Electron
 
Testing trading strategies in JavaScript
Testing trading strategies in JavaScriptTesting trading strategies in JavaScript
Testing trading strategies in JavaScript
 
Node.js memory limitations
Node.js memory limitationsNode.js memory limitations
Node.js memory limitations
 
Ai and ml study group lecture 1 and 2
Ai and ml study group   lecture 1 and 2Ai and ml study group   lecture 1 and 2
Ai and ml study group lecture 1 and 2
 
Web scraping
Web scrapingWeb scraping
Web scraping
 
Data analysis in JavaScript
Data analysis in JavaScriptData analysis in JavaScript
Data analysis in JavaScript
 

Recently uploaded

Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Lecture # 8 software design and architecture (SDA).ppt
Lecture # 8 software design and architecture (SDA).pptLecture # 8 software design and architecture (SDA).ppt
Lecture # 8 software design and architecture (SDA).pptesrabilgic2
 

Recently uploaded (20)

Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Lecture # 8 software design and architecture (SDA).ppt
Lecture # 8 software design and architecture (SDA).pptLecture # 8 software design and architecture (SDA).ppt
Lecture # 8 software design and architecture (SDA).ppt
 

When to reinvent the wheel / Building a query language in TypeScript

  • 1. When to reinvent the wheel? Building a JSON-based query language for JavaScript/TypeScript @ashleydavis75
  • 2. Background  GraphQL didn’t fit my needs  Thus MiniQL was born @ashleydavis75
  • 3. What is GraphQL?  A language to query and update data  Very popular  Created by Facebook  Open source  It’s quite incredible https://graphql.org/
  • 4. What’s wrong with GraphQL?  Forced schema  Add a new language to your stack  Too big/complex  Time consuming to implement  Tedious to have to specify everything you want returned
  • 5. Why reinvent the wheel?  When is it appropriate? @ashleydavis75
  • 6. Why reinvent the wheel?  If no one reinvented wheels we’d never have better wheels @ashleydavis75
  • 7. Why reinvent the wheel?  The existing wheel doesn’t do what you want  To make a better wheel @ashleydavis75
  • 8. Why reinvent the wheel?  For fun or education @ashleydavis75
  • 9. Why reinvent the wheel?  For fun or education  But not at work @ashleydavis75
  • 10. Introducing MiniQL  Features  JSON-based query language  Implemented in TypeScript for use in JavaScript/TypeScript  No schema  All fields returned by default  Delegate features to the backend  Node.js or the browser @ashleydavis75
  • 11. MiniQL demo  Demo time! @ashleydavis75
  • 12. Resources  MiniQL: https://github.com/miniql/miniql  Interactive example: https://miniql.github.io/miniql-interactive-example/  GraphQL: https://graphql.org/  TypeScript template: https://github.com/ashleydavis/typescript-template  Bootstrapping Microservices: http://bit.ly/2o0aDsP @ashleydavis75

Editor's Notes

  1. PREP: Wifi hotspot Start slides on desktoip Open source tree. Start timer. Hi everyone, My name is Ashley Davis. I’m the author of a new book that’s about to be published called Bootstrapping Microservices. This book is practical and project-based guide to building applications with microservices. I’m also the CTO of Sortal and we are helping businesses manage their digital assets with machine learning. I hope everyone out there is doing ok through the pandemic. I hoping that soon we’ll all be able to meet up again in person. Please feel free to get in touch with me via Twitter. My handle is ashleydavis75 and you’ll see that printed at the bottom right of each slide. I’m going to share screen now so you can see my slides. !! Share screen !! “To reinvent the wheel” means to rebuild something that has already been built before. The connotation is that reinventing something is pointless and a waste of time, because somebody has already done it before. In general this is a good warning. And you should be careful where you invest your time and focus. In this talk we’ll explore when it’s ok to reinvent the wheel. And we’ll take a look at my new open source project called MiniQL.
  2. I’ll start with some background on what I’m talking about tonight. To make a long story short I’d really like to use GraphQL, I think it’s pretty awesome, but it didn’t quite fit my needs. So a few weeks back I decided to create my own query language which I’ve called MiniQL. It’s pretty much like GraphQL but much smaller. I had some good reasons for doing this that I’m going to talk about soon. And I can assure you that it’s not just because I’m crazy. I am a little bit crazy. So there is that. I implemented the core query engine for MiniQL in a very short amount of time. And that’s because it is very small. I’ve actually put a lot more effort into examples and documentation of MiniQL than I did for the code. This is interesting in itself. That something can be so simple to code and yet quite difficult to teach to other people. And that’s because it’s very abstract. After this experience I wanted to talk about MiniQL itself. How it was built. How it works. And why I chose to reinvent the wheel on this occasion.
  3. For those you that don’t what GraphQL is, I’ll explain it quickly. These are the facts at a glance.. GraphQL is a language to query and manipulate data. It’s very popular. It was created by Facebook. It’s open source. There’s a link on the slide there in case you want to learn more about GraphQL and I’ll repeat that link on the last slide as well. If you had thought that I don’t like GraphQL you are quite wrong. I actually think it’s quite incredible. I wanted to use GraphQL so much that I decided to lovingly rewrite the parts of it that work best for me.
  4. So if GraphQL is incredible why don’t I want to use it? Well there’s a time and place for GraphQL. I’ve seen it work really well when I was contracting. But I tried to implement it for my startup and it didn’t fit. The first problem was having to have a schema. For my startup I need to rapidly evolve and iterate our product so we can experiment to create the best product for our customers. One of my aims in this effort is to reduce the cost of experimentation. Not using a schema is one thing that helps with that. The cost of defining a schema, updating it as the data evolves and migrating the database is a headache I don’t need and don’t want. I don’t want to have create a schema for every microservice, so when it came to define a schema for my application’s data I just had to say no to GraphQL. There are some other issues of course. GraphQL adds an extra language to your stack that you and the other developers have to learn. You might not want to bring onboard that extra complexity. All things considered that isn’t a huge deal for me, but still I’d prefer not to add new languages if I can avoid it. Also GraphQL is big and complex. It takes time to learn and it takes time to implement. And I find it really tedious having to specify all the fields in the data that you want returned. For me and my startup the barrier to entry to GraphQL was too high. So I started thinking about what it would take to recreate it in a minimal form.
  5. So this leads to the most important question in this talk. When is it ok to reinvent the wheel? We are often told that reinventing the wheel is a bad thing. Some people will say we should never reinvent the wheel. And generally that’s a good principle.
  6. But consider this… If no one ever reinvented anything we’d never have better things. We’d still be stuck with the tired old programming languages, databases, operating systems and so on. There are times when reinventing the wheel is necessary for innovation and evolution. But unfortunately we can only see this in hindsight. When you make a better wheel that is successful you will be praised. But the only way to get to that success is to make it past all the people that are telling you not to reinvent the wheel.
  7. Another reason is that the existing wheel doesn’t do what you want. This is what happened to me. GraphQL didn’t fit my needs so I created my own small query language. You could also be motivated to build a better wheel. I don’t think I could build something better than GraphQL, it’s already pretty good so that’s not my motivation. But if you think you could reinvent something and surpass the limitations that came before, well that’s a pretty good motivation.
  8. Of course it’s also perfectly ok to reinvent things for fun or education. That’s actually a fantastic way to learn new things and get experience as a developer. Pick some technology that you really like and try to make your version. I say try because you might start building it then realize that it’s actually really difficult and have to give up. At this point I’d like to say that this is ok as well. Starting a project, learning something useful then dropping it is perfectly ok. When we do any kind of hobbiest coding for education we should stop coding as soon as we have learned what we wanted to learn.
  9. Ok but just don’t do this on work time. If you are rebuilding something for fun or education please do it on your own time.
  10. So please without further ado let me introduce you to MiniQL. It’s a tiny JSON-based query language inspired by GraphQL. This was born out of desire to use GraphQL but then my frustration in not being able to use it. MiniQL is implemented in TypeScript for use in JavaScript and TypeScript. The query language is just JSON of course so it’s possible in the future you might see MiniQL implementations in other languages besides TypeScript. MiniQL doesn’t require you to define a schema and all fields are returned by default. One of the things that’s important for keeping MiniQL small is that many features can be delegated to the backend. So whatever database you are using in the backend you can make use of whatever special features it has for searching, querying and pagination. My first implementation of MiniQL works both in Node.js or the browser. And I’m about to show you some examples.
  11. Show interactive example. - Star wars data - JavaScript, even though MiniQL is TypeScript MiniQL + miniql/inline Entirely browser based example of MiniQL. React / create-react-app / hooks Ant design Tailwind MonacoEditor Show GitHib page, with instructions to get it started. Show MiniQL on GitHub. Show other examples. Show MiniQL org on GitHub Explain what the other projects are. Show MiniQL code and tests. Show core engine. Note that it’s TypeScript. Show commit history. SourceTree Emphasize small commits. Each change has automated tests. This is a good example of test driven development. If you want to learn more about development, you could follow along with each commit to see step by step how this project was developed.
  12. I’m basically done. There’s a bunch links here that you might find useful. There’s a link to MiniQL and the interactive example that I demonstrated earlier. There’s a link to GraphQL if you want to learn more about that. I always start my TypeScript projects with my TypeScript template, so there’s a link there to that if you’d like to try it out. And also for anyone to learn about microservices there’s a link at the end to my new book Bootstrapping Microservices .