Все комментарии имеют хорошие отзывы о возможных решениях.Вопрос, который вам нужно задать, заключается в том, содержит ли ваш вложенный ресурс . Сдерживание не позволяет обращаться к ресурсу и, таким образом, его версия соответствует его родительскому элементу.Например, рассмотрим Заказ и связанные с ним Позиции .Элемент строки обычно не должен быть адресуемым сам по себе.
Если у вас есть связанные, но разные, адресуемые ресурсы, любой один ресурс должен не напрямую предоставлять связанный ресурс.Это вводит связь.Способ решить эту проблему в REST - использовать HATEOAS.Есть много способов достижения HATEOAS и только несколько стандартов, которые дают какие-либо рекомендации.Нет правильного ответа на как реализовать HATEOAS, но может выглядеть примерно так:
Bar v1.1
{
"field_one": "String",
"field_two": "String",
"links": [
{ "name": "Foo", "href": "http://localhost/foo/123" }
]
}
Это позволяет Bar связываться с Foo без жесткой зависимости от него.Это так же, как веб-сайты создаются с использованием гиперссылок на связанные страницы.
Вот еще несколько замечаний, которые следует учитывать при реализации HATEOAS:
- В соответствии с UniformОграничение интерфейса , URL является идентификатором (а не
123
, как может предположить человек) - Вы должны использовать URL-адреса абсолютных ссылок, потому что связанный ресурс может неодин и тот же хост и клиент не должны это выяснять.
- Хотя это часто встречается, управление версиями по сегментам URL вызывает здесь проблему, потому что как сервер знает, как генерировать ссылки с соответствующимВерсия API?Другие методы, такие как тип носителя, строка запроса или даже заголовок, не страдают от этого.В конечном счете, клиент несет ответственность за , зная , какую версию API запрашивать.У сервера нет возможности узнать, чего хочет клиент.Если сервер не гарантирует симметрию версий, вполне возможно, что клиенты будут связаны с несовместимыми версиями API (например, Foo 1.0 и Bar 1.1).Обеспечение симметрии версий может быть трудным или медленным, если все API должны иметь одинаковые поддерживаемые версии, даже если нет изменений.Я также видел URL templates , используемый для решения проблемы сегмента URL, но, опять же, клиенту не нужно знать или понимать синтаксис шаблона.
Может этобыть полезным в качестве отправной точки для ваших проектов.