The API KnowledgeShare

Aloi's guide to APIs for technical and non-technical users.

Apollo GraphQL Overview

Over the last few years, GraphQL has gained popularity as an alternative way to build and interact with APIs. GraphQL allows the client to decide the data that is returned (queried) from the server instead of having a restricted response of data from the server. It simplifies the repetitive back and forth when specifying nested requests. In recent years, Apollo GraphQL has become the go-to server.

Apollo GraphQL is trusted by global brands such as Airbnb, The New York Times, and Medium. Its platform offers three primary tools: Client, Server, and Engine.

Apollo Client

Apollo Client is a client-side library that helps you consume a GraphQL API. It is extensively documented making it easier to use especially with its integration with numerous javascript frameworks such as Vue, Meteor, Angular, Ember, and React.

Apollo Client also allows you to handle your requests and cache the data you received, as well as update your UI using predictable and declarative codes that are in line with modern React best practices. It enables developers to build high-quality and complex functional web and mobile apps eliminating complicated data plumbing boilerplate.

Apollo Server

In a nutshell, Apollo Server is a library that connects your GraphQL Schema to a server through the use of other popular HTTP servers like Lambda, Hapi, Koa, Express, and Connect. It communicates with your backend to send back responses according to the request of the client.

Apollo Engine

This is your bridge between your Apollo Client and Apollo Server that provides error tracking, historical stats, performance reporting, caching, and many other functionalities. It is the only part of the Apollo suite of tools that is not completely free—only up to 1 million requests per month. This provides Apollo funding for the other open-source parts of the suite.

Why Use Apollo?

Extensive Documentation

Apollo continues to evolve every day as more and more developers are contributing to its progress. It keeps the documentation updated and there are many documented methods on how to build applications using Apollo tools. There are a lot of resources for beginners as well as advanced materials for experts.

Simplify Complex Applications

You can use a lot of libraries in Apollo that make it easier to build applications from end to end. These libraries are open-sourced and more manageable to use for effective GraphQL implementation.

For example, Apollo Client caches client requests which prevent sending a request if the data is already in the cache. It boosts the performance of your site, decreasing the network traffic that you create. It also normalizes data, making it easier to look for data entries without going through other columns resulting in faster responses of your server.

Integrate with other Frameworks

Apollo is library agnostic both on the client-side and the server-side. That means it’s possible to connect Apollo through its libraries to other frameworks bridging Apollo tools and the framework. This is useful when migrating from one framework to another since javascript is continuously evolving as a language.

State Management

Especially true for beginners, state management can be a nightmare. Even with experienced developers, the rise of GraphQL has created confusion as to where to put your state management libraries. Apollo allows you to use other libraries to handle your local data while your remote data is handled by the Apollo client. Or, if you want to further simplify your application state, you can use your local state instead of other libraries like MobX or Redux.

If you prefer, you can use Apollo’s own solution in managing local state. By using Apollo Link State library, you can manage your local data using GraphQL operations embracing the advantages of Apollo and GraphQL fully.

Challenges in Using Apollo:

It’s Relatively New

As a technology stack, Apollo is still relatively new. Although there are numerous users that consistently develop new features, there are also some pitfalls that programmers should be aware of. Nothing is set in stone yet, since the development of Apollo’s environment is fast and dynamic. Changes are introduced relatively frequently, which might be a challenge when you are using and/or updating libraries in your own application.

Although there are a lot of resources available online, the ability to fully learn Apollo is sometimes slowed down by the fast-paced development in the community. Tutorials and articles about the use of Apollo tools are sometimes outdated, making it challenging to find updated external resources.

Under Construction

The increasing popularity of Apollo makes its development and implementation of new features fast. Sometimes too fast; before developers can catch up. It can be a challenge to debug errors with little to no available information on the error occurring.

Also, due to its fast pace, the Apollo community neglects earlier versions, which makes it challenging for those who are using earlier versions. For instance, when Redux was abandoned as the internal management solution of Apollo, developers were confused about what they would do with it when Apollo 2.0 was released.

No Competition, just yet…

A major concern about Apollo’s newness is the absence of its competition in the Javascript Domain in GraphQL. Keep in mind, this concern can be applied to any new technology solution that we have today. There are many alternatives per se to Apollo (located below) but they only offer limited solutions as compared to the Apollo ecosystem. Since it is open-source, there is an opportunity to create libraries that can compete with Apollo though non currently exist.

Apollo Client Alternatives

  • Plain HTTP Request: Although you can always use other libraries to perform your GraphQL requests, GraphQL does not care about the network layer so you can use plain HTTP methods for your queries and mutations.
  • Relay: This was among the first libraries before Apollo was introduced. It was created by Facebook for consuming GraphQL in React applications.
  • Urql: This was created by Formidable Labs for consuming GraphQL in their React applications. It was also open-sourced and a good minimalist alternative to Apollo.
  • AWS Amplify – GraphQL Client: This alternative offers libraries for applications that are cloud-enabled.

Apollo Server Alternatives

  • Express-graphql: This library provides simple API to connect Express middleware to GraphQL layers.
  • Graphql-yoga: This is a fully-featured GraphQL Server that focuses on performance, and overall developer experience. It is easier to set-up removing more boilerplate code form you.

The constantly evolving world of web and app development makes it challenging to find reliable solutions to our common problems. Apollo has done a great job of riding the wave in GraphQL’s rise in usage. If you’re starting to kick around GraphQL, it’s a set of solutions worth checking out.

Application programming interfaces allow software to communicate. Learn about APIs, GraphQL, and how to use best practices when developing API Integrations.