Я лично предпочитаю схемы URL, которые следуют шаблону глагола субъекта.Например:
/blog/new
/blog/{blog_id}
/blog/{blog_id}/newpost
/blog/{blog_id}/edit
Обратите внимание, что составные предметы в порядке:
/blog/{blog_id}/post/{post_id}
/blog/{blog_id}/post/{post_id}/edit
Как правило, вам не нужно больше двух идентификаторов.Если он становится более сложным, вы можете создать защищенный URI буфер протокола , который объединяет несколько идентификаторов в непрозрачный составной идентификатор, который можно десериализовать в его составные части на стороне сервера.Таким образом, вместо:
/blog/{blog_id}/post/{post_id}/comment/{comment_id}
Использование:
/comment/{merged_id}
Возможно, вы захотите оставаться последовательным.Старайтесь избегать смешивания и сопоставления плоских и иерархических схем URI.Это может сбивать с толку.
В частности, для API вы, как правило, хотите добавлять префикс к /{api_name}/{api_version}/
, потому что, как выясняется, внесение критических изменений в API не делает вас привлекательными для людей, использующих ваши API,Управление версиями позволяет любым разработчикам ваших API-интерфейсов обновлять их по своему усмотрению и дает вам возможность изящно, а не единовременно отказываться от устаревших форматов и схем URI.
Если клиенты отслеживают, какие URI вызыватьОдин из вариантов - предоставить механизм обнаружения.Это то, что Google делает для наших клиентов API следующего поколения.Клиенты могут автоматически обнаруживать структуру URI из документа обнаружения вместе со списком обязательных и необязательных параметров.Это позволяет повторно использовать клиентов для нескольких API и позволяет разработчикам работать либо в стиле RPC, либо в стиле REST, в то же время отделяя большую часть логики.Конечно, этот подход требует гораздо больше предварительных усилий, но он того стоит, если ваша система достаточно сложна или если у вас достаточно API, чтобы обслуживание клиентов M API × N языков клиентов становилось несостоятельным.