Представьте себе какое-то банковское приложение с экраном для создания учетных записей. Каждый счета имеет Валюта и Банк как собственность, валюты будучи отдельный класс, а также Bank. Код может выглядеть примерно так:Ограничить количество вызовов службы в приложении RESTful
public class Account
{
public Currency Currency { get; set; }
public Bank Bank { get; set; }
}
public class Currency
{
public string Code { get; set; }
public string Name { get; set; }
}
public class Bank
{
public string Name { get; set; }
public string Country { get; set; }
}
В соответствии с принципами дизайна REST, каждый ресурс в приложении должен иметь свою собственную службу, и каждый сервис должен иметь методы, которые сопоставляют хорошо к HTTP глаголов. Таким образом, в нашем случае у нас есть AccountService, CurrencyService и BankService.
На экране для создания учетной записи у нас есть некоторый пользовательский интерфейс, чтобы выбрать банк из списка банков и выбрать валюту из списка валют. Представьте, что это веб-приложение, и эти списки являются выпадающими списками. Это означает, что один раскрывающийся список заполняется из CurrencyService и один из BankService. Это означает, что когда мы открываем экран для создания учетной записи, нам нужно сделать два вызова службы двум различным сервисам. Если этот экран сам по себе не на странице, может быть больше вызовов услуг с той же страницы, что влияет на производительность. Это нормально в таком приложении? Если нет, как его можно избежать? Как можно изменить дизайн, не выходя из REST?
Да, вы правы. Кэширование на клиенте решит это. Но как концепция, архитектурный стиль не зависит от кеширования и до сих пор имеет это практическое ограничение. Мне было интересно, было ли изменение дизайна, которое могло бы решить проблему. – Slavo
Если вы строго RESTful, то у банка и валюты должны быть разные URI, так как они разные. Но вам нечего остановить создание службы (только для чтения), которая могла бы вернуть оба списка в качестве одного объекта. Тем не менее, вы окажетесь нуждаться в таких сервисах для каждого другого экрана, и ваш дизайн пострадает. В конечном счете, крошечные накладные расходы - это стоимость хорошо инкапсулированной архитектуры REST (так же, как вы платите крошечный перфоманс для нескольких DLL против мамонта .exe или для вызовов методов против встроенного кода). Это не должно вызывать наибольшей обеспокоенности в плане производительности. :-) –
Хорошо, я думаю, это лучшее, что я получу. Благодаря :). верхний предел достигнут, завтра. – Slavo