Install Required Packages
- First, ensure you have Node.js installed on your system. You'll need the `node-fetch` package, or built-in `fetch` if using Node.js 18+, to make HTTP requests to the Uber API. If you plan to handle OAuth 2.0 token management, you may also want `jsonwebtoken` or similar libraries as needed.
- Install necessary packages using npm:
npm install node-fetch
Obtain API Credentials
- After setting up your Uber developer account, acquire your Client ID, Client Secret, and Server Token from the Uber developer dashboard for authentication.
Authenticating with Uber API
- Uber API uses OAuth 2.0 authentication. Request an access token using your client credentials. Uber provides a specific endpoint to get an access token. Here's a sample code snippet to obtain the token using fetch:
const fetch = require('node-fetch');
async function getAccessToken() {
try {
const response = await fetch('https://login.uber.com/oauth/v2/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
grant_type: 'client_credentials',
scope: 'request',
}),
});
const data = await response.json();
return data.access_token;
} catch (error) {
console.log('Error obtaining access token:', error);
}
}
Estimate Price and Time Before Requesting a Ride
- To provide a better user experience, you should fetch price and time estimates before placing a ride request. Use the "estimates/price" and "estimates/time" endpoints to get this data:
async function getEstimate(pickup, dropoff) {
const token = await getAccessToken();
try {
const response = await fetch(`https://api.uber.com/v1.2/estimates/price?start_latitude=${pickup.latitude}&start_longitude=${pickup.longitude}&end_latitude=${dropoff.latitude}&end_longitude=${dropoff.longitude}`, {
headers: {
Authorization: `Bearer ${token}`,
},
});
const data = await response.json();
return data.prices;
} catch (error) {
console.log('Error obtaining price estimates:', error);
}
}
Request a Ride
- Once you have the estimates and the necessary details, proceed to request a ride. Use the Ride Requests endpoint:
async function requestRide(pickup, dropoff) {
const token = await getAccessToken();
try {
const response = await fetch('https://api.uber.com/v1.2/requests', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
start_latitude: pickup.latitude,
start_longitude: pickup.longitude,
end_latitude: dropoff.latitude,
end_longitude: dropoff.longitude,
}),
});
const data = await response.json();
return data.request_id;
} catch (error) {
console.log('Error requesting ride:', error);
}
}
Handle Ride Updates and Status
- After requesting a ride, you may want to track its status. Use the trip status endpoints to fetch real-time status updates regarding ride acceptance, arrival, and progress.
async function getRideStatus(requestId) {
const token = await getAccessToken();
try {
const response = await fetch(`https://api.uber.com/v1.2/requests/${requestId}`, {
headers: {
Authorization: `Bearer ${token}`,
},
});
const data = await response.json();
return data.status;
} catch (error) {
console.log('Error obtaining ride status:', error);
}
}
Additional Considerations
- Uber API has rate limits, so ensure you handle rate limit errors gracefully by implementing retries with exponential backoff if necessary.
- Use environment variables for sensitive data such as access tokens and client secrets, to ensure security and flexibility in your applications.