def _unique_resource_identifier_from_kwargs(**kwargs):
    """Chooses an identifier given different choices

    The unique identifier in BIG-IP's REST API at the time of this writing
    is called 'name'. This is in contrast to the unique identifier that is
    used by iWorkflow and BIG-IQ which at some times is 'name' and other
    times is 'uuid'.

    For example, in iWorkflow, there consider this URI

      * https://10.2.2.3/mgmt/cm/cloud/tenants/{0}/services/iapp

    Then consider this iWorkflow URI

      * https://localhost/mgmt/cm/cloud/connectors/local/{0}

    In the first example, the identifier, {0}, is what we would normally
    consider a name. For example, "tenant1". In the second example though,
    the value is expected to be what we would normally consider to be a
    UUID. For example, '244bd478-374e-4eb2-8c73-6e46d7112604'.

    This method only tries to rectify the problem of which to use.

    I believe there might be some change that the two can appear together,
    although I have not yet experienced it. If it is possible, I believe it
    would happen in BIG-IQ/iWorkflow land where the UUID and Name both have
    significance. That's why I deliberately prefer the UUID when it exists
    in the parameters sent to the URL.

    :param kwargs:
    :return:
    """
    name = kwargs.pop('name', '')
    uuid = kwargs.pop('uuid', '')
    id = kwargs.pop('id', '')
    if uuid:
        return uuid, kwargs
    elif id:
        return id, kwargs
    else:
        return name, kwargs
