High-level Design of Uber

Workflow of our application

Before diving deep into the design, let’s understand how our application works. The following steps show the workflow of our application:

  1. All the nearby drivers except those already serving rides can be seen when the rider starts our application.

  2. The rider enters the drop-off location and requests a ride.

  3. The application receives the request and finds a suitable driver.

  4. Until a matching driver is found, the status will be “Waiting for the driver to respond.”

  5. The drivers report their location every four seconds. The application finds the trip information and returns it to the driver.

  6. The driver accepts or rejects the request:

    • The driver accepts the request, and status information is modified on both the rider’s and the driver’s applications. The rider finds that they have successfully matched and obtains the driver’s information.

    • The driver refuses the ride request. The rider restarts from step 2 and rematches to another driver.

High-level design of Uber

At a high level, our system should be able to take requests for a ride from the rider and return the matched driver information and trip information to the rider. It also regularly takes the driver’s location. Additionally, it returns the trip and rider information to the driver when the driver is matched to a rider.

API design

Let’s discuss the design of APIs according to the functionalities we provide. We’ll design APIs to translate our feature set into technical specifications.

We won’t repeat the description of repeating parameters in the following APIs.

Update driver location

updateDriverLocation(driverID, oldlat, oldlong, newlat, newlong )

Parameter

Description

driverID

The ID of the driver

oldlat

The previous latitude of the driver

oldlong

The previous longitude of the driver

newlat

The new latitude of the driver

newlong

The new longitude of the driver

The updateDriverLocation API is used to send the driver’s coordinates to the driver location servers. This is where the location of the driver is updated and communicated to the riders.

Find nearby drivers

findNearbyDrivers(riderID, lat, long)

Parameter

Description

riderID

The ID of the rider

lat

The latitude of the rider

long

The longitude of the rider

The findNearbyDrivers API is used to send the location of the rider for whom we want to find the nearby drivers.

Request a ride

requestRide(riderID, lat, long, dropOfflat,dropOfflong, typeOfVehicle)

Parameter

Description

lat

The current latitude of the rider

long

The current longitude of the rider

dropOfflat

The latitude of the rider’s drop-off location

dropOfflong

The longitude of the rider’s drop-off location

typeOfVehicle

The type of vehicle required by the rider—for example, business, economy, and so on.

The requestRide API is used to send the location of the rider and the type of vehicle the rider needs.

Show driver ETA

showETA(driverID, eta)

Parameter

Description

eta

The estimated time of arrival of the driver

The showEta API is used to show the estimated time of arrival to the rider.

Confirm pickup

confirmPickup(driverID, riderID, timestamp)

Parameter

Description

timestamp

The time at which the driver picked up the rider

The confirmPickup API is used to determine when the driver has picked up the rider.

Show trip updates

showTripUpdates(tripID, riderID, driverID, driverlat, driverlong, time_elapsed, time_remaining)

Parameter

Description

tripID

The ID of the trip

driverlat

The latitude of the driver

driverlong

The longitude of the driver

time_elapsed

The total time of the trip

time_remaining

The time remaining (extract the current time from the ETA) to reach the destination

The showTripUpdates API is used to show the updates of the trip, including the position of the driver and the time remaining to reach the destination.

End the trip

endTrip(tripID, riderID, driverID ,time_elapsed, lat, long)

The endTrip API is used to end the trip.

Last updated

Was this helpful?