@Override
  public void handleRequest(RestRequest restRequest, RestResponseChannel restResponseChannel)
      throws RestServiceException {
    if (shouldProceed(restRequest, restResponseChannel)) {
      RestMethod restMethod = restRequest.getRestMethod();
      restRequest.prepare();
      switch (restMethod) {
        case GET:
          restRequestService.handleGet(restRequest, restResponseChannel);
          break;
        case POST:
          restRequestService.handlePost(restRequest, restResponseChannel);
          break;
        case PUT:
          restRequestService.handlePut(restRequest, restResponseChannel);
          break;
        case DELETE:
          restRequestService.handleDelete(restRequest, restResponseChannel);
          break;
        case HEAD:
          restRequestService.handleHead(restRequest, restResponseChannel);
          break;
        default:
          throw new RestServiceException("Unknown rest method - " + restMethod,
              RestServiceErrorCode.UnsupportedRestMethod);
      }
    }
  }
Calls the appropriate method in the {@link RestRequestService}. Non-blocking nature depends on the implementation
of the underlying {@link RestRequestService}.
@param restRequest the {@link RestRequest} that needs to be handled.
@param restResponseChannel the {@link RestResponseChannel} on which a response to the request may be sent.
@throws IllegalArgumentException if either of {@code restRequest} or {@code restResponseChannel} is null.
@throws RestServiceException if there is any error while processing the request.
ambry-api/src/test/java/com/github/ambry/rest/MockRestRequestResponseHandler.java