2016-11-18 3 views
1

При построении API REST должны ли поля, добавленные в ответ в версии 2, возвращаться с ответом от вызова конечной точки версии 1?Должны ли появляться дополнительные поля в более низких версиях API?

В качестве примера, учитывая конечную точку api/v1/users/1, ответ может быть:

{ 
    "first_name":"david" 
} 

Тогда в v2, учитывая конечную точку api/v2/users/1, ответ может быть обновлен, чтобы быть:

{ 
    "first_name":"david", 
    "last_name":"smith" 
} 

Would это будет плохой практикой иметь тот же ответ, который был получен от вызова конечной точки v2, возвращаемого при вызове конечной точки v1? Моя первоначальная мысль - да, но опять же я не вижу проблемы, поскольку это изменение не будет нарушаться.

В качестве побочного примечания возник вопрос, пытаясь выяснить, как построить версию api с использованием Laravel и Eloquent. Я не могу легко понять, как это сделать с Eloquent, и вам нужно будет сопоставить модель с версией или написать все мои репозитории с QueryBuilder для управления полями. Отмечено как Laravel и Eloquent, так как это те специфические рамки, которые я использую, и хочу посмотреть, есть ли у кого-то решение с их помощью, но вопрос в том, что касается дизайна api вообще.

ответ

1

Если вы просто добавляете свойства, вам (возможно) не нужно будет обновлять API. Хорошие клиенты будут игнорировать любые новые свойства. В большинстве случаев добавление свойств считается неотрывным изменением.

Изменение ответа V1 API на включение новых свойств и добавление V2, который выглядит точно так же, как V1, является глупым. Не делай этого. В двух версиях нет значения, которые выглядят одинаково.

Если вы вносите изменения, то обновление V1 API для этих изменений также является ужасной идеей, и вы не должны этого делать.

Я не могу говорить с Ларавелом и Красноречивым.

Смежные вопросы