SEPTEMBER 14 2021
Bring RESTful Data Into Your GraphQL Responses Using Dgraph Lambda
“Learn how to use Dgraph Lambda to integrate dynamic data from a RESTful API into your existing GraphQL API.”

If you have a RESTful API that performs some business logic or 3rd party info that isn’t within your data, you’ve likely thought about how to use this data within your GraphQL API. Most of the time, a RESTful service may be used by sources outside of just your application, so moving it over to GraphQL may not make sense. Conversely, you may not even own the RESTful service but still want to expose that data through your GraphQL API for your users.
Luckily, with Dgraph Lambda
we can do exactly that. We simply need to add the field to our schema, annotate
it with the @lambda
directive, and then build out the logic that calls the
RESTful API from within Dgraph Lambda. In just a few steps, you’ll be retrieving
RESTful data while exposing it through your GraphQL API. If you want to follow
along, simply create a free Dgraph cloud account,
launch a backend, and follow the steps below. Let’s take a deeper look!
You can check out the accompanying video for this article from our YouTube channel below:
Populating a field with data from a RESTful endpoint
The service we will build is quite simple. It will consist of a City
data type
containing id
, name
, state
, and country
fields which will retrieve data
from the database. There will also be a fifth field named current_weather
.
This field will contain a string with the description of the current weather.
This data will be retrieved from the OpenWeather
RESTful API using data in the other GraphQL fields within the City
type.
Step 1: Define The Schema
With this in mind, let’s create our GraphQL schema to power this API. In Dgraph Cloud, navigate to the Schema screen and add the following schema:
type City {
id: ID!
name: String!
state: String!
country: String!
current_weather: String! @lambda
}
Once populated, click Deploy to deploy the schema to the backend.
You’ll notice that we have annotated the current_weather
field with the
@lambda
GraphQL directive.
This tells Dgraph that this field will be derived from some custom logic within
Dgraph Lambda.
Step 2: Create The Lambda Function
Once we have added the schema, we can now define our Lambda as well. To do this in Dgraph Cloud, navigate to the Lambda screen through the left-side menu. Once on the screen, implement the following Lambda function in the provided text area:
self.addGraphQLResolvers({
'City.current_weather': getCurrentWeather,
})
async function getWeather(name, state, country) {
let url = `https://api.openweathermap.org/data/2.5/weather?q=${name},${state},${country}&appid=944f9bf37b47e039c6466b185de46269`
let response = await fetch(url)
let data = await response.json()
return data.weather[0].description
}
async function getCurrentWeather({ parent }) {
const { name, state, country } = parent
var weather = getWeather(name, state, country)
return weather
}
Let’s break down each function for understanding.
-
self.addGraphQLResolvers
will tell Dgraph thatCity.current_weather
should be resolved by thegetCurrentWeather
function we have defined below. -
The
getWeather
function will take aname
,state
, andcountry
, call the OpenWeather API with these parameters and return a JSON object with some weather information. Out of this information, we will only return the description of the weather. -
The
getCurrentWeather
function is the one that actually “resolves” the data for thecurrent_weather
field. It extracts thename
,state
, andcountry
from the parent object and calls the abovegetWeather
function that actually retrieves the data.
You could combine the getCurrentWeather
and getWeather
functions but I’ve
chosen to keep them as separate routines: one as a simple resolver function and
the other containing the RESTful API call.
Step 3: Add Some Data
With our schema and Lambda ready, let’s add some data! For that, we will run a mutation that will add Toledo, Ohio to our database. Navigate to the GraphQL screen via the left-side menu and populate the Query text area with the following:
mutation MyMutation {
addCity(input: { name: "Toledo", state: "OH", country: "US" }) {
numUids
}
}
This will add a single entry to our database. Feel free to add more (but there are no guarantees that the OpenWeather API will have the data need and you may end up with an error!).
Step 4: Query The Data With a Dynamic Field
Lastly, let’s query Toledo, Ohio through our GraphQL API and get the dynamic
current_weather
field in our GraphQL response. On the GraphQL screen where
we ran the mutation, add in a query that looks like this:
query MyQuery {
getCity(id: "0x2de670e66") {
name
state
country
current_weather
}
}
Press the Play button to execute the query. You should get back a response
that includes a brief weather description in the current_weather
field. At
this point, our Dgraph Lambda has been invoked, retrieved the data from the
RESTful API, and mapped it back into the GraphQL response.
Conclusion
As you can see, using RESTful APIs to retrieve dynamic data in Dgraph is extremely simple to get started with. Hopefully, this brief overview gives you the confidence to build more complex Lambda functions in Dgraph as you build your next application! Get started on Dgraph Cloud today to start building quickly and easily with GraphQL. Feel free to share your work with our community or ask any questions you might have on Discuss!