REST не заботится об написании идентификаторов вашего ресурса. Соглашения, подобные описанным в https://restfulapi.net/resource-naming/, примерно аналогичны соглашениям о кодировании написания имен переменных.
С точки зрения клиента REST, /api/courses/X
и /api/courses/Y
- это разные ресурсы - эти ресурсы могут совместно использовать одно и то же базовое представление (поскольку они построены из одних и тех же базовых данных) , но это проблема реализации сервера.
Написание URI ограничено только RFC 3986 .
/api/courses?id1=12345
/api/courses?id2=67890
Это совершенно разумный выбор. Одним из потенциальных преимуществ является то, что HTML включает стандарт для создания шаблонов URI с параметрами запроса. Потенциальным недостатком является то, что относительное эталонное разрешение обрабатывает неиерархические данные в части запроса иначе, чем иерархические данные в сегментах пути.
/api/courses/id1/12345
/api/courses/id2/67890
Совершенно разумный выбор с противоположным компромиссом сверху.
/api/courses/id1=12345
/api/courses/id2=67890
Это действительно та же идея, что и выше, с немного другим написанием. Преимущества простоты и удобства чтения. Однако на самом деле работа с этим шаблоном может быть сложной, в зависимости от того, какая у вас есть поддержка маршрутизации.
Как и шаблоны URI , они, вероятно, будут выглядеть как
/api/courses/id1={id}
/api/courses/id2={id}
Но там, где у вас есть поддержка шаблонов URI 4-го уровня, вы можете использовать
/api/courses/{/ids*}
Другой возможностью будет использование написания, основанного на «матричном параметре», например
/api/courses;id1=12345
/api/courses;id2=67890
Опять же, это дает вам другой набор компромиссов читаемости, поддержки шаблонов, поддержки относительного разрешения и т. Д.
См. Также Стефан Тилков - ОТДЫХ: Я не думаю, что это означает то, что вы думаете, это делает .