Я думаю, что добавление сегмента пути / префикса - лучший ответ. Поскольку это уникальные вторичные ключи, это не то же самое, что поиск (который возвращает набор элементов), поэтому использование параметров запроса (которые не кэшируются) не кажется лучшим выбором.
Лично я планирую использовать префикс сегмента пути, разделенный символом "=", например "name =" или "email =":
user/123456
user/name=john.doe
user/email=john.doe@john.doe
Это функционально эквивалентно добавлению сегмента пути (например, "user / name / john.doe"), но мне кажется, что оно более точно соответствует концептуальной модели. Конечно, это незначительная деталь, поскольку RESTful API не должны все равно определять фиксированную структуру URI.
Не использование параметров запроса также позволяет естественным образом получать доступ к подресурсам:
user/name=john.doe/inbox/df87bhJXrg63
Фреймворки, такие как поддержка Java JAX-RS с использованием любого разделителя:
@GET
@Path("user/{id}")
User getUser(@PathParam("id") UUID id);
@GET
@Path("user/name={name}")
User getUserByName(@PathParam("name") String name);
@GET
@Path("user/email={email}")
User getUserByEmail(@PathParam("email") String email);