When we built Facebook’s mobile applications, we needed a data-fetching API powerful enough to describe all of Facebook, yet simple enough to be easy to learn and use by our product developers. We developed GraphQL three years ago to fill this need. Today it powers hundreds of billions of API calls a day. This year we’ve begun the process of open-sourcing GraphQL by drafting a specification, releasing a reference implementation, and forming a community around it at graphql.org.
Tag Archives: GraphQL
At Make School, we are using GraphQL and a Relay-like interface to power our Summer Academy. Our students have a SPA interface that they can use to browse the curriculum, watch recorded lectures, and ask questions.
As GraphQL is relatively new and there are lots of questions about it, I thought it would be beneficial to show a subset of our own schema and how we implement a few features on top of it.
[This article assumes a high level understanding of GraphQL, which has already been written about by Rising Stack and @clayallsopp. This article will start with the backend that we want and then convert it into GraphQL, covering sync/async and query/mutation actions.]
Building off of the basic Pokedex app from my Redux post last week, let’s write a backend API in GraphQL that could support our Pokedex. We’ll need two query methods (to fetch the list of Pokemon and the user’s caught Pokemon) and two mutation methods (to create the user and catch a Pokemon).
The list of Pokemon will be stored in-memory and the list of users and their Pokemon will be stored in MongoDB.
I’ve been a bit heads down for the last two months, working on a project with React 0.12.2 and Reflux. In that course of time, the React ecosystem has begun to feel foreign to me. React is up to 0.14 beta, React-Router is up to 1.0 beta, a few ES6 and ES7 patterns have been popularized, and Redux has gained a large amount of support and momentum and arguably emerged as the Flux library of choice.
I’ve been wanting to look at Redux for a while, but the only way I can motivate myself to learn stuff like this is by doing write ups. So let’s build a simple Pokedex app that displays a list of Pokemon, has an search input field, and lets you click a button to catch some Pokemon. That’s it, intentionally contrived. Everything will be synchronous for now, but I’d ambitiously like to do writeups in the future that introduce the capabilities/usage of Redux Dev Tools, ImmutableJS, GraphQL, and server-side rendering.
[This article is being written specifically for those who have prior experience with React and Flux, but have not had any prior experience with Redux.]
ReactEurope happened last week in the beautiful city of Paris. As it was expected and long-awaited, Facebook released their implementation of the GraphQL draft.
The conference is over, but the conversation has just begun.
Mihai Parparita detailed his efforts to hack his way to a React.js Conf ticket; James Longblogged about his first encounter with React Native; Eric Florenzano talked about how he perceives the impact of Relay, GraphQL, and React Native on software development;Margaret Staples blogged about her experience of being on-campus at Facebook HQ; Jeff Barczewski tied his experience of attending the conference up with a bow in this blog post filled with photos, videos, and links; Kevin Old left us with his takeaways; Paul Wittmannfound React Native freshly on his radar; and finally, undeterred by not being able to attend the conference in person, Justin Ball summarized it from afar.
Tom Occhino opened with a history of how React came to be, before announcing Facebook’s answer to a long-looming what-if question: what if we could use React to target something other than the DOM?
Tweaking in real time
Brenton Simpson showed us how eBay brings Bret Victor’s feedback loop to your favorite editor using Webpack, react-hot-loader, and Ambidex.
Abstract Syntax Trees
Gurdas Nijor showed us how we can leverage some conventions of React to perform source code transformations that unlock an inspirational set of use cases.
Relay and GraphQL
Daniel Schafer and Jing Chen showed us how Facebook approaches data fetching with React, giving us an early peek at the forthcoming duo of Relay and GraphQL.
James Long explores what might happen if we introduce channels, a new style of coordinating actions, to React.
Michael Jackson reminded us that URLs should be part of our design process, and showed us how react-router can help to manage the transitions between them.
Pete Hunt showed us how a Flux approach can help us scale actions and questions on the backend in addition to the frontend.
Jason Bonta showed us how complex user interfaces can get, and how his team keeps them performant as they scale. He also had the pleasure of open-sourcing his team’s work on FixedDataTable.
FormatJS and react-intl
Eric Ferraiuolo showed how you can bring your app to a worldwide audience using a series of polyfills and emerging ECMAScript APIs.
Ryan Florence showed us how easy it is to transition from a career selling life insurance, to a burgeoning one as a software developer. All you have to do is to learn how to say “yes.”
Christopher Chedeau showed us how to bring the developer experience of working with React on the web to native app development, using React Native.
Andrew Rota explained how React and Web Components can work together, and how to avoid some common pitfalls.
Beyond the DOM
Jafar Husain told us a story about how Netflix was able to push React into places where the DOM could not go.
Zach Nation showed us how we can produce visualizations from over 45 million data points without breaking a sweat.
Bill Fisher coordinated a Flux panel together with Michael Ridgway, Spike Brehm, Andres Suarez, Jing Chen, Ian Obermiller, and Kyle Davis.
Bonnie Eisenman led us through the ‘adapter’ approach to inter-component communication taken by her team at Codecademy.
Flow and TypeScript
James Brantly demonstrated how we can reap the benefits of static typing using both Flow and TypeScript.
Core Team Q&A
Tom Occhino, Ben Alpert, Lee Byron,Christopher Chedeau, Sebastian Markbåge, Jing Chen, and Dan Schaferclosed the conference with a Q&A session.