---
title: "2. Hook up your data sources"
description: Start here for the Apollo fullstack tutorial
---
Apollo data sources provide the best experience for fetching and caching data from REST endpoints, web services, and databases. It's a new pattern for loading data from various sources, with built-in support for deduplication, caching, and error handling.
Connect a REST API
To get started connecting to a REST API, install the `apollo-datasource` and `apollo-datasource-rest` packages:
```bash
npm install apollo-datasource-rest
```
The `apollo-datasource-rest` exposes the `RESTDataSource` class that is responsible for fetching data from a given REST API. To define a data source for the REST endpoint, extend the `RESTDataSource` class and implement the data fetching methods that your resolvers require. Let's look at a simple example to understand how data sources work.
```js
import { RESTDataSource } from 'apollo-datasource-rest';
export class MvrpAPI extends RESTDataSource {
constructor() {
super();
this.baseURL = 'https://mvrp.herokuapp.com/api/';
}
async getAllCars() {
return this.get('cars');
}
async getACar(plateNumber) {
const result = await this.get('car', {
plateNumber
});
return result[0];
}
};
```
The `https://mvrp.herokuapp.com/api/` endpoint is a simple REST API that returns data for cars.
The `MvrpAPI` class implementation in the code above contains a `getAllCars` and `getACar` functions that wrap convenience methods provided by the `RESTDataSource` class for performing HTTP requests. In this example, we used the built-in `get` method that's responsible for `GET` requests.
Connect a database