Если бы я разрабатывал этот API, я бы начал с универсального типа гипермедиа, такого как HAL, и разработал корневое представление, которое предоставляет мне доступ к различным сценариям, которые вы описываете, используя ссылки и шаблоны URI.
например
GET /api
=>
<resource>
<link rel="urn:mycompany:customer" href=".../{id}"/>
<link rel="urn:mycompany:customers" href="..."/>
<link rel="urn:mycompany:customersearch" href="...{?email}"/>
</resource>
Я не заполнил фактические URL, потому что с точки зрения потребителя API действительно не имеет значения, как эти URL структурированы.Делайте все, что проще в вашей серверной среде.Не беспокойтесь, если вы ошиблись, вы можете изменить это позже, и ваши клиенты не сломаются, потому что они должны обнаружить URL из корневого представления.
Принято считать, что размещение клиента в группе клиентов создаст нового клиента, поэтому вы можете просто потребовать, чтобы ваши потребители использовали эту ссылку.Или, если вы хотите быть более явным, вы можете определить новое отношение ссылки, которое предоставляет URL для создания клиентов.