Я прочитал противоречивые «мнения» о том, следует ли удалять конверт по запросу или ответу JSON.Будущее доказательство: снимает ли конверт JSON текущую лучшую практику?
Пример:
{
"data": {
"foo" : "bar",
"baz" : "Xyzzy"
}
}
должен (предположительно) быть записана в виде:
{
"foo" : "bar",
"baz" : "Xyzzy"
}
Но, в соответствии с принципами ТВЕРДЫХ, эта структура должна быть открыта для расширения, но закрыты для модификации. Таким образом, удаление конверта было бы плохой идеей. Правильно?
Если, позже, я решаю, что мне нужно добавить еще немного информации для входящей информации JSON, гораздо чище, чтобы сделать это:
{
"data": {
"foo" : "bar",
"baz" : "Xyzzy"
},
"extended-data": {
"abc" : 123
}
}
чем это было бы сделать это:
{
"foo" : "bar",
"baz" : "Xyzzy",
"abc" : 1234
}
Первый позволяет ранее написанный код, который ищет узел данных для выполнения без сбоев или изменений. Последнее требует, чтобы код был переписан для поиска нового значения.
Какова нынешняя передовая практика и, пожалуйста, сайт для ваших источников: Мне нужны общепринятые стандарты, а не мнения.
Update:
Чтобы ответить на возражение: «Если добавить поля, которые вы должны изменить свой код.»
Не совсем. Я не должен изменить код для обработки новых полей, я только добавить новый обработчик для новых данных:
Пример:
function delegateTask($json) {
$this->doSomething($json->data);
}
после расширения:
function delegateTask($json) {
$this->doSomething($json->data);
$this->doSomethingElse($json->extended);
}
Если Я использую только HTTP в качестве конверта, мне нужно перезаписать doSomething(). Если я делаю это SOLID, мне нужно только добавить функцию, которая смотрит на новые данные.
Не дублировать: Этот вопрос не является дубликатом When in my REST API should I use an envelope? If I use it in one place, should I always use it?, потому что этот вопрос конкретно касается принципов S.O.L.I.D и расширения для кода, как он относится к конверту. Не только сообщения об ошибках возвращаются клиенту.
Если вы используете конверт или нет, вам все равно придется менять код для обработки новых полей. – codenheim
Возможный дубликат [Когда в моем REST API я должен использовать конверт? Если я использую его в одном месте, должен ли я всегда использовать его?] (Http://stackoverflow.com/questions/9989135/when-in-my-rest-api-should-i-use-an-envelope-if- i-use-it-in-one-place-should-i) – jmargolisvt
Я видел http://stackoverflow.com/questions/9989135/when-in-my-rest-api-should-i-use-an-envelope -ел-я потребительное это в одном месте, должен-я. Это похоже, но не то же самое. Да, HTTP «это конверт», но я специально прошу об этом в отношении принципов SOLID. – DrDamnit