Преобразовать ограниченный ответ на объекты модели

Мы создаем приложение AngularJS и используем Restangular для нашего REST-API.

Теперь моя идея состояла в том, чтобы преобразовать ответ от API к типизированным объектам модели JS. Поэтому мы не слишком полагаемся на API, если имена полей отличаются от нашей логики кода, и мы независимы в коде внешнего интерфейса для именования изменений в API. Но так ли это?

Я заблудился, когда дело доходит до того, что мы хотим отправить сообщение обратно в API. Вся функциональность "рестангаризованного" объекта теряется в новом типизированном объекте модели. Как я могу превратить его обратно в пост против API?

Мой подход неверен?

Но как насчет твердого кода, который не ломается, если API изменил некоторые свойства? Или как узнать, какие свойства предлагает моя модель, не обращая внимания на ответ REST-API. В моем классическом способе программирования я открываю свой Model-Class и могу посмотреть все свойства, предлагаемые объектом модели!?

Спасибо

Вот несколько упрощенных примеров кода реализации:

function TypedModel(data) {
  this.foo = data.bar;
}

var typedModel;
Restangular.one('service', 'infos').get().then(function(data) {
  typedModel = new TypedModel(data);
});

1 ответ

Я не думаю, что с вашим подходом что-то не так, нет. Может быть, вы привыкли к языку со строгой типизацией, например к Java? Мне потребовалось некоторое время, чтобы приспособиться к Javascript, потому что он так свободно напечатан.

Я не уверен, будет ли это полезно, но я начал настраивать свои классы следующим образом:

function TypedModel(pojo) {
    if (!TypedModel.validate(pojo)) {
        //Throw an exception if the POJO is not valid.
    }
    this.foo = pojo.foo;
    this.bar = pojo.bar;
    this.fooBar = pojo.fooBar;
}

TypedModel.validate = function(pojo) {
    return (pojo.foo && pojo.bar && pojo.fooBar);
};

Это означает, что я могу точно знать, какими свойствами должен обладать мой класс, и если API изменится, я знаю, что должен изменить свой класс.

Но я также нахожусь в процессе перехода к Typescript, так как это значительно облегчает работу с моделями. Я определенно рекомендую заглянуть в TS.

Комментарии приветствуются:)

Другие вопросы по тегам