private String parseSignedIdIfRequired(RestRequest restRequest, String incomingId) throws RestServiceException {
      String blobId;
      if (idSigningService.isIdSigned(incomingId)) {
        Pair<String, Map<String, String>> idAndMetadata = idSigningService.parseSignedId(incomingId);
        restRequest.setArg(RestUtils.InternalKeys.SIGNED_ID_METADATA_KEY, idAndMetadata.getSecond());
        blobId = idAndMetadata.getFirst();
      } else {
        blobId = incomingId;
      }
      return blobId;
    }
If the incoming ID is signed, parse the signed ID and set the
{@link RestUtils.InternalKeys#SIGNED_ID_METADATA_KEY} in the {@link RestRequest}. Otherwise, just return the
provided ID.
@param restRequest the {@link RestRequest} to potentially set the signed ID metadata in.
@param incomingId the incoming ID, with the leading slash removed.
@return a blob ID that can be passed to the router.
@throws RestServiceException if parsing the signed ID fails.
ambry-frontend/src/main/java/com/github/ambry/frontend/AmbryIdConverterFactory.java