Мне интересно, в какой степени мы должны добавить в API значения, которые можно рассчитать из необработанных данных и дополнительной доступной информации (из сеанса браузера, пользовательского интерфейса … или чего-либо еще)
Например, у нас может быть API, возвращающий этот JSON:
{
ownder_id: '123',
canAddComment: true,
etc...
}
Это дает нам значение «canAddComment» напрямую.
Или мы могли бы иметь только это:
{
ownder_id: '123',
etc...
}
Где комментарии могут быть рассчитаны из owner_id
, Например, пользователь может добавлять комментарии, если сеанс owner_id
отличается от полученного от API.
Мы могли бы сделать это в Javascript вместо этого:
//supposing we have a session object with our browser session values
var params = {owner_id: session.owner_id};
$.post(apiURL, params, function(data){
var result = JSON.parse(data);
//processing the data
result["canAddComments"] = result.owner_id !== session.owner_id;
//do whatever with it
});
Какой будет лучший подход? Какая рекомендация в таких случаях?
Я не совсем уверен, что вы хотите знать. Но моя первая реакция — вы делаете из этого функцию.
// constructor
function Comment() {
this.owner_id;
this.canAddComment = function() {
return session.user_id === this.owner_id;
}
}
var session = {
user_id: 22,
name: 'Kevin'
};
var my_comment = new Comment();
my_comment.owner_id = 15;
if(my_comment.canAddComment()) {
$.ajax({
// now read the form and submit the data ...
})
}
else {
alert('Only the author of this message can update ...');
}
РЕДАКТИРОВАТЬ:
Мой вопрос был в основном, если это лучше рассчитать на стороне сервера или рассчитать после получения данных API.
Не уверен, что есть общий ответ. Несколько аргументов: если вы хотите, чтобы метод был секретным, вы должны сделать это на стороне сервера. В других случаях, я думаю, имеет смысл позволить клиентскому ПК использовать его вычислительную мощность.
Хорошо, один пример: сортировка. Допустим, есть таблица, полная данных; щелчок по голове сортирует таблицу по этому столбцу. Имеет ли смысл отправлять все данные на сервер, разрешать ему сортировать таблицу и возвращать массив ключей? Нет, я думаю, что имеет смысл позволить клиенту обрабатывать это.
http://tablesorter.com/docs/
Аналогично Google Maps: вы перетаскиваете маркер в какое-то место, затем программа должна рассчитать 5 ближайших автобусных остановок. Ну, очевидно, вы рассчитываете все это на стороне клиента.
Других решений пока нет …