Вы можете использовать Accept-Header, чтобы позволить клиенту объявить о своих возможностях, указав, какие версии типов носителей он поддерживает.например,
мобильное приложение выполняет:
GET /server/foo
Accept: application/vnd.acme.fooappV1+xml
Когда вы вводите новые функции, не поддерживающие обратную совместимость, вы можете указать новым обновленным клиентам отправлять,
GET /server/foo
Accept: application/vnd.acme.fooappV2+xml
Тогдаваш сервер знает возможности клиента, с которым он разговаривает.Вы также можете заставить новых клиентов делать это:
GET /server/foo
Accept: application/vnd.acme.fooappV1+xml, application/vnd.acme.fooappV2+xml
Таким образом, вы можете медленно переносить ресурсы сервера в новый формат.Если конечные точки доставят application/vnd.acme.fooappV1+xml
, тогда клиент вернется к старому способу.Если конечные точки возвращают application/vnd.acme.fooappV2+xml
, то новый код может вступить во владение.
При использовании этого подхода не нужно изменять URI, поэтому закладки и статистика остаются действительными.Миграция в новый формат может выполняться постепенно, а поддержка старых клиентов постепенно прекращается.