SOA vs REST
От: TYuD  
Дата: 22.12.12 09:35
Оценка:
Почитал книжицу "Идеальная архитектура". Там есть статья Брайана Слеттена "Ресурсно-ориентированные архитектуры. Жизнь в WWW", где автор поругивает веб-службы и восхваляет REST. Вроде опытный дядечка, обосновано говорит, но мне трудно воспринимать его доводы, т.к. немного в другой области работаю (встраиваемые системы).

Буду благодарен, если в двух словах поможете объяснить плюсы/минусы обоих архитектур.

Хочу быть в курсе передового опыта разработки сложных систем.
Re: SOA vs REST
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.12.12 16:04
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD>Почитал книжицу "Идеальная архитектура". Там есть статья Брайана Слеттена "Ресурсно-ориентированные архитектуры. Жизнь в WWW", где автор поругивает веб-службы и восхваляет REST. Вроде опытный дядечка, обосновано говорит, но мне трудно воспринимать его доводы, т.к. немного в другой области работаю (встраиваемые системы).


TYD>Буду благодарен, если в двух словах поможете объяснить плюсы/минусы обоих архитектур.


TYD>Хочу быть в курсе передового опыта разработки сложных систем.


Разные архитектуры под разные задачи. Нельзя описать плюсы и минусы самосвала и Бентли, потому что да разного они нужны.

В мире веба конечно рулит REST, потому что не борется с HTTP, а использует его по максимуму. WS-* веб-сервисы (реализация SOA для веба) наоборот пытается абстрагироваться полностью от HTTP и это ведет к куче негативных последствий.
Re: SOA vs REST
От: Sharov Россия  
Дата: 23.12.12 09:45
Оценка: 3 (1)
Здравствуйте, TYuD, Вы писали:

TYD>Буду благодарен, если в двух словах поможете объяснить плюсы/минусы обоих архитектур.


Два разных архитектурных стиля, призванных решить одну и ту же задачу удаленного взаимодействия программ постпредствам протокола HTTP.
В интернетах много где сравнивается SOAP vs REST, поэтому проще пойти в гугл и набрать SOAP vs REST.
Кину ссылки на хабр:
http://habrahabr.ru/post/158605/
http://habrahabr.ru/post/131343/
Кодом людям нужно помогать!
Re: SOA vs REST
От: Mishka Норвегия  
Дата: 01.01.13 20:50
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD>Почитал книжицу "Идеальная архитектура". Там есть статья Брайана Слеттена "Ресурсно-ориентированные архитектуры. Жизнь в WWW", где автор поругивает веб-службы и восхваляет REST. Вроде опытный дядечка, обосновано говорит, но мне трудно воспринимать его доводы, т.к. немного в другой области работаю (встраиваемые системы).


TYD>Буду благодарен, если в двух словах поможете объяснить плюсы/минусы обоих архитектур.


TYD>Хочу быть в курсе передового опыта разработки сложных систем.


SOA vs REST — это как OOП vs XML
Re[2]: SOA vs REST
От: TYuD  
Дата: 02.01.13 22:39
Оценка:
M>SOA vs REST — это как OOП vs XML

В сранении SOA соответсвует OOП, REST — XML или наоборот?
А в каком ключе сравнивать OOП с XML даже не соображу?

Как я понял, REST не противоречит SOA, а вполне ему соответствует. Можно сказать, что REST — это SOA с некоторыми ограничениями. Наверное надо было поставить вопрос SOAP vs REST.
Re[3]: SOA vs REST
От: Mishka Норвегия  
Дата: 08.01.13 11:07
Оценка:
Здравствуйте, TYuD, Вы писали:

M>>SOA vs REST — это как OOП vs XML


TYD>В сранении SOA соответсвует OOП, REST — XML или наоборот?

TYD>А в каком ключе сравнивать OOП с XML даже не соображу?

TYD>Как я понял, REST не противоречит SOA, а вполне ему соответствует. Можно сказать, что REST — это SOA с некоторыми ограничениями. Наверное надо было поставить вопрос SOAP vs REST.


SOAP vs REST — да.
Очень многие думают, что SOA — это как писать приложения с помощью web services. С точки зрения enterprise архитектуры SOA — это организация функциональности в виде сервисов. Например, "заказать билеты" — это сервис в SOA, как он реализован — не важно. Может быть это soap/rest/tibco web service, может быть stored procedure, а может быть тётя на другом конце провода, которая этот сервис обеспечивает.
Re[4]: SOA vs REST
От: TYuD  
Дата: 10.01.13 19:24
Оценка:
Здравствуйте, Mishka, Вы писали:

M>SOAP vs REST — да.


Давайте чуть изменим постановку вопроса и рассмотрим "SOAP vs REST". Я бы даже расширил: "Веб-службы vs REST"

Автор упоминаемой книги приводил пример, что при ориентации корпоративных систем на веб-службы оказывается очень сложным поиск нужной информации. А в REST это легко. Может в этом причина? Почему сложен/прост поиск информации в этих случаях?

И еще говорил, что системы на веб-службах очень сложные получаются, запутанные, трудно отлаживаются. Мне казалось, что веб-службы очень строго описывают свои интерфейсы, которые отслеживаются в автоматическом режиме. Это же благо, которое должно бы упростить разработку. В чем я ошибаюсь?
Re[5]: SOA vs REST
От: Tanker  
Дата: 10.01.13 21:55
Оценка: 1 (1)
Здравствуйте, TYuD, Вы писали:


TYD>Давайте чуть изменим постановку вопроса и рассмотрим "SOAP vs REST". Я бы даже расширил: "Веб-службы vs REST"


Операционная модель vs модель ресурсов.
The animals went in two by two, hurrah, hurrah...
Re[6]: SOA vs REST
От: TYuD  
Дата: 11.01.13 07:18
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Операционная модель vs модель ресурсов.


Лозунг подобный я слышал, а подоступнее ключевые идеи и отличия можно?
Re[7]: SOA vs REST
От: Sharov Россия  
Дата: 11.01.13 09:30
Оценка: -1
Здравствуйте, TYuD, Вы писали:

TYD>Здравствуйте, Tanker, Вы писали:


T>>Операционная модель vs модель ресурсов.


TYD>Лозунг подобный я слышал, а подоступнее ключевые идеи и отличия можно?


Модель REST ориентирована на сущности (ресурсы), предоставляемые сервисом. Над любыми сущностями можно совершить как минимум 4 операции --
получить сущность (GET), добавить (POST), изменить (PUT), удалить (DELETE). Создатель архитектурного стиля REST заметил, что данные операции удачно ложатся на методы протокола HTTP. Про REST как-то так.

RPC сервисы ориентированные на действия, то есть вы по сути вызывается метод на удаленной машине. Методы могут быть какими угодно,
пишете простой код вызова метода у объекта, а на самом деле это метод будет выполнен сервисом на другой машине. Данный подход гораздо сложней
реализовать, т.е. если в случае REST у вас все уже готово, то тут задействована кодогенерация методов (stub) на стороне клиентов, разрабатывать свои протоколы, либо использовать уже готовые RPC/XML , SOAP. Необходим единый протокол описания методов WSDL и проч.

Еще раз -- данные два похода призваны решать одну и ту же задачу удаленного взаимодействия сервисов, но делают они это по разному:
— REST (модель ресурсов) не очень гибок, но прост и удачно вписывается в Интернет идеологию ;
— SOAP/rpc(Операционная модель) мощнее, но требует больше усилий и действий , чтобы все заработало.
Кодом людям нужно помогать!
Re[7]: SOA vs REST
От: Tanker  
Дата: 11.01.13 10:12
Оценка:
Здравствуйте, TYuD, Вы писали:

T>>Операционная модель vs модель ресурсов.


TYD>Лозунг подобный я слышал, а подоступнее ключевые идеи и отличия можно?


Ресурс по своей природе требует в основном CRUD, все это ложится на http, если нет проблем в виде прокси. Вроде как современные прокси стали уже все вербы поддерживать, хотя я не уверен в этом.
Операционная модель это фактически удаленное управление. Скажем есть некоторый технологический процесс, можно представить в виде системы массового обслуживания, эдакий конвейер самых разных процедур. Управление конвейером, процедурами, навроде подключить, остановить, продолжить, получить прогрес, отменить, зациклить, разорвать цикл и тд.
В каждой модели можно сделать всё. Например в операционной можно rest реализовать. А в rest можно и управление обделать. Разница в количестве телодвижений на клиентской и серверной стороны.
Очевидно, можно конвейер останавливать так — pipe.Suspend("Maintenance"); На сервере будет просто вызов метода Suspend, который сделает все что надо.

class Pipe
{
    void Suspend(string reason) // явное связывание, чисто бизнеслогика
    {
      Check(IsReasonValid(reason));  
      ...
    }
}


В Rest это будет так

 var operation = GetOperationResource<Operations.Suspend>({reason = "Maintenance", pipe = pipe });

 context.Operations.Add(operation);
 context.Submit()


а на сервере нужно сделать триггер в сервисном коде, который на момент коммита будет для каждого ресурса делать соответсвующий процессинг. Поддержки как у Soa здесь не будет, потому надо пилить все руками, типа

 switch(resource)
 {
  ...
   case Resource.Operation:
     var params = ExtractParamsFrom(resource);

     ProcessOperation(params); // неявное связывание взамен вагона кода
     break;
  ...
 }

class SuspendProcessor : IProcessor // неявное связывание взамен вагона кода
{
    void Run(int pipe, string reason)
    {
      Check(IsPipeValid(pipe));
      Check(IsReasonValid(reason));  
      ...
   }
}
The animals went in two by two, hurrah, hurrah...
Re[8]: SOA vs REST
От: TYuD  
Дата: 11.01.13 14:35
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Еще раз -- данные два похода призваны решать одну и ту же задачу удаленного взаимодействия сервисов, но делают они это по разному:

S>- REST (модель ресурсов) не очень гибок, но прост и удачно вписывается в Интернет идеологию ;
S>- SOAP/rpc(Операционная модель) мощнее, но требует больше усилий и действий , чтобы все заработало.

В общих чертах понятно. Босюсь, окончательное понимание возможно только после практического использования.

А вот с поиском нужной информации на корпоративном сайте не разобрался. Почему в ресурсной модели проще искать нужную информацию? Может поисковые утилиты готовые помогают? Или серфинг? А в операционной модели подобное не возможно?
Re[8]: SOA vs REST
От: TYuD  
Дата: 11.01.13 14:55
Оценка:
Здравствуйте, Tanker, Вы писали:

T>
T> var operation = GetOperationResource<Operations.Suspend>({reason = "Maintenance", pipe = pipe });
T> context.Operations.Add(operation);
T> context.Submit()
T>


Зачастую кусочек кода лучше демонстрирует мысль, чем много слов. Но я не знаю, что такое: GetOperationResource, Operations, context и пр. Это из какого-то фреймворка типа WCF? Наверное мне такой пример мало поможет. Я вожусь со встраиваемыми системами на С++ в лучшем случае.
Re[9]: SOA vs REST
От: Sharov Россия  
Дата: 11.01.13 15:00
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD>А вот с поиском нужной информации на корпоративном сайте не разобрался. Почему в ресурсной модели проще искать нужную информацию? Может поисковые утилиты готовые помогают? Или серфинг? А в операционной модели подобное не возможно?


Извините, но не очень понял Ваш вопрос. Попробую объяснить исходя из текущего его понимания и контекста беседы.
В REST модели вы используете обычный и привычный url типа http://www.parampam.com. Далее, для поиска и индексации информации сущ. куча движков
и т.д. и т.п. Все они работают с обычными урлами (GET метод) и индексируют полученную информацию. Допустим, нужно найти все заказы на сайте,
идем по ссылке http://www.parampam.com/orders и получаем список всех заказов, который уже можно как-то распарсить и проиндексировать. Соотв., можно использовать готовые решения,поисковики и т.п. В случае операционной модели поисковику необходимо знать интерфейс сервиса и, следовательно, сущ. решения либо придется долго адаптировать, либо не подойдут вовсе,либо писать все с нуля.

PS: в поисковиках я разбираюсь не очень, поэтому что-то мог сказать не так, но общая идея, надеюсь, ясна.
Кодом людям нужно помогать!
Re[9]: SOA vs REST
От: Tanker  
Дата: 11.01.13 22:16
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD>Здравствуйте, Tanker, Вы писали:


T>>
T>> var operation = GetOperationResource<Operations.Suspend>({reason = "Maintenance", pipe = pipe });
T>> context.Operations.Add(operation);
T>> context.Submit()
T>>


TYD>Зачастую кусочек кода лучше демонстрирует мысль, чем много слов. Но я не знаю, что такое: GetOperationResource, Operations, context и пр. Это из какого-то фреймворка типа WCF? Наверное мне такой пример мало поможет. Я вожусь со встраиваемыми системами на С++ в лучшем случае.


Да, это из фремворков, ну, почти. GetOperationResource возвращае просто экземпляр объекта который надо закомитать на сервер, его впринципе можно заменить на new OperationSuspend() + инициализаця. Operations это вобщем контейнер таких операций, точнее не самих операций, а только изменений. Context это контейнер всех ресурсов.
context.Submit отправляет на сервер все изменения всех ресурсов.

Реально будет так, POST http://site.com/resources/Operations + данные в теле запроса {operation='suspend', id='13234234', reason = "Maintenance", pipe = pipe } ну и все остальное, в виде xml или json
The animals went in two by two, hurrah, hurrah...
Re[10]: SOA vs REST
От: TYuD  
Дата: 12.01.13 13:06
Оценка:
Здравствуйте, Sharov, Вы писали:

S>PS: в поисковиках я разбираюсь не очень, поэтому что-то мог сказать не так, но общая идея, надеюсь, ясна.


Да, ясна. Спасибо.
Re[10]: SOA vs REST
От: TYuD  
Дата: 12.01.13 13:16
Оценка:
Здравствуйте, Tanker, Вы писали:

T>Реально будет так, POST http://site.com/resources/Operations + данные в теле запроса {operation='suspend', id='13234234', reason = "Maintenance", pipe = pipe } ну и все остальное, в виде xml или json


А вот "{operation='suspend', id='13234234', reason = "Maintenance", pipe = pipe } ну и все остальное" оно по какому-то стандартному формату упаковывается? Или как принято на сайте? Или как фреймворк упакует? Это типа RPC получается?
Re[8]: SOA vs REST
От: TYuD  
Дата: 12.01.13 13:32
Оценка:
Здравствуйте, Sharov, Вы писали:

S>RPC сервисы ориентированные на действия, то есть вы по сути вызывается метод на удаленной машине. Методы могут быть какими угодно, пишете простой код вызова метода у объекта, а на самом деле это метод будет выполнен сервисом на другой машине. Данный подход гораздо сложней реализовать, т.е. если в случае REST у вас все уже готово, то тут задействована кодогенерация методов (stub) на стороне клиентов, разрабатывать свои протоколы, либо использовать уже готовые RPC/XML , SOAP. Необходим единый протокол описания методов WSDL и проч.


Наверное существуют фреймворки, которые скрывают возню со stub, WSDL и пр. Ну, если не существуют или сыроваты, то со временем появятся и/или созреют. Может проблема в том, что для REST технологии уже устаканились, а для SOAP еще нет? Поэтому любят то, к чему привыкли, что попроще, что прозрачнее? Со временем ситуация может выровняется, или есть другие глубинные причины преимущества REST? Вот, например, преимущество в поиске информации мне более-менее понятно стало. Еще кеширование в REST вроде проще реализовать. Есть еще что-то?

И еще, слышал мельком о каком-то RESTful. Чем оно отличается REST?
Re[11]: SOA vs REST
От: hattab  
Дата: 12.01.13 17:25
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD> T>Реально будет так, POST http://site.com/resources/Operations + данные в теле запроса {operation='suspend', id='13234234', reason = "Maintenance", pipe = pipe } ну и все остальное, в виде xml или json


TYD> А вот "{operation='suspend', id='13234234', reason = "Maintenance", pipe = pipe } ну и все остальное" оно по какому-то стандартному формату упаковывается? Или как принято на сайте? Или как фреймворк упакует? Это типа RPC получается?


Ага, идеологи реста (не относится к участникам темы) пыжатся-пыжатся, а потом у них все равно эрписи получается Рест не определяет формат данных, это идеология. Поэтому у рест-сервисов будет все индивидуально (ну, если мы не считаем, что все они используют один единственный фреймвок).
avalon 1.0rc3 build 432, zlib 1.2.5
Re[9]: SOA vs REST
От: Sharov Россия  
Дата: 12.01.13 19:20
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD>Наверное существуют фреймворки, которые скрывают возню со stub, WSDL и пр.

Да, безусловно.

>Ну, если не существуют или сыроваты, то со временем появятся и/или созреют. Может проблема в том, что для REST технологии уже устаканились, а для SOAP еще нет?

Еще раз повторю, для REST особых технологий не надо -- протокол HTTP и придерживаться соотв. архитектурного стиля. Есть ресурсы, например заказы, и манипулируем
ими по REST методологией.

>Со временем ситуация может выровняется, или есть другие глубинные причины преимущества REST?

REST удачно ложиться/вписывается в инфраструктуру интернета со всеми вытекающими плюшками -- отработанные протоколы, кучи всяких библиотек, фреймворков, стилей. Пример с поисковиками вроде разобрали.

>Еще кеширование в REST вроде проще реализовать. Есть еще что-то?

Это благодаря HTTP.

TYD>И еще, слышал мельком о каком-то RESTful. Чем оно отличается REST?

Веб сервисы, построенные в соотв. с REST архитектурой.
Кодом людям нужно помогать!
Re[11]: SOA vs REST
От: Tanker  
Дата: 13.01.13 21:56
Оценка: -1
Здравствуйте, TYuD, Вы писали:

TYD>Здравствуйте, Tanker, Вы писали:


T>>Реально будет так, POST http://site.com/resources/Operations + данные в теле запроса {operation='suspend', id='13234234', reason = "Maintenance", pipe = pipe } ну и все остальное, в виде xml или json


TYD>А вот "{operation='suspend', id='13234234', reason = "Maintenance", pipe = pipe } ну и все остальное" оно по какому-то стандартному формату упаковывается? Или как принято на сайте? Или как фреймворк упакует? Это типа RPC получается?


Это просто будет json или xml. Я показал просто структуру данных, new пропустил, это анонимный класс. Упаковывается как принято на сайте разумеется. RPC не получается, получается REST, т.е. ни о каком удаленном вызове функции речи не идет, вс связывание делаешь руками. RPC можно только сэмулировать.
Хочешь православный RPC, бери SOA
The animals went in two by two, hurrah, hurrah...
Re[10]: SOA vs REST
От: TYuD  
Дата: 15.01.13 10:02
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Еще раз повторю, для REST особых технологий не надо -- протокол HTTP и придерживаться соотв. архитектурного стиля. Есть ресурсы, например заказы, и манипулируем

S>ими по REST методологией.

S>REST удачно ложиться/вписывается в инфраструктуру интернета со всеми вытекающими плюшками -- отработанные протоколы, кучи всяких библиотек, фреймворков, стилей. Пример с поисковиками вроде разобрали.


S>Это благодаря HTTP.


S>Веб сервисы, построенные в соотв. с REST архитектурой.


Благодарю
Re[12]: SOA vs REST
От: TYuD  
Дата: 15.01.13 10:05
Оценка:
Здравствуйте, Tanker, Вы писали:

TYD>>А вот "{operation='suspend', id='13234234', reason = "Maintenance", pipe = pipe } ну и все остальное" оно по какому-то стандартному формату упаковывается? Или как принято на сайте? Или как фреймворк упакует? Это типа RPC получается?


T>Это просто будет json или xml. Я показал просто структуру данных, new пропустил, это анонимный класс. Упаковывается как принято на сайте разумеется. RPC не получается, получается REST, т.е. ни о каком удаленном вызове функции речи не идет, вс связывание делаешь руками. RPC можно только сэмулировать.

T>Хочешь православный RPC, бери SOA

В общих чертах начинаю понимать. Спасибо.
Re[12]: SOA vs REST
От: Tanker  
Дата: 16.01.13 10:14
Оценка:
Здравствуйте, hattab, Вы писали:

H>Ага, идеологи реста (не относится к участникам темы) пыжатся-пыжатся, а потом у них все равно эрписи получается Рест не определяет формат данных, это идеология. Поэтому у рест-сервисов будет все индивидуально (ну, если мы не считаем, что все они используют один единственный фреймвок).


Получается взаимодействие с удаленным сервером. Рпц это частный случай взаимодейтсвия с удаленным сервером, а именно — стандарты, протоколы, операционная модель. Рест это тоже частный случай взаимодействия с удаленным сервером, актуален для тех случаев, когда апи взаимодействия легко укладывается в CRUD + поддержка доп. стандартов и протоколов на клиенте практически отсутствует + модель ресурсов. Все что надо для рест это хттп и локальные соглашения.
Очевидно, в равных условиях, при отсутствии поддержки SOA инфраструктурой придется убить немеряно времени на реализацию и забить на многие аспекты вроде перформанса. Рест здесь рулит и дает пропускную способность практически на уровне максимальной. И наоборот, в тех же равных условиях, если есть поддержка инфраструктурой, то наоборот, SOA рулит не по детски.
The animals went in two by two, hurrah, hurrah...
Re[13]: SOA vs REST
От: hattab  
Дата: 16.01.13 11:08
Оценка: +1
Здравствуйте, Tanker, Вы писали:

T> Получается взаимодействие с удаленным сервером. Рпц это частный случай взаимодейтсвия с удаленным сервером, а именно — стандарты, протоколы, операционная модель. Рест это тоже частный случай взаимодействия с удаленным сервером, актуален для тех случаев, когда апи взаимодействия легко укладывается в CRUD + поддержка доп. стандартов и протоколов на клиенте практически отсутствует + модель ресурсов. Все что надо для рест это хттп и локальные соглашения.


Ага. Только тот пример, что ты показал, рестом не является Это некий гибридный вариант реста и рпц. Операции реста ограничены методами хттп, а у тебя операция есть ресурс. Это от попытки натянуть идеологию на задачу.

T> Очевидно, в равных условиях, при отсутствии поддержки SOA инфраструктурой придется убить немеряно времени на реализацию и забить на многие аспекты вроде перформанса. Рест здесь рулит и дает пропускную способность практически на уровне максимальной. И наоборот, в тех же равных условиях, если есть поддержка инфраструктурой, то наоборот, SOA рулит не по детски.


Ерунда. Для мыла, конечно, инфраструктура нужна т.к. это овердизайнутое ненужно и просто руками с этим работать трудно. Но мылом соа не ограничивается, и если рассматривать легкие методы рпц, такие как json-rpc и xml-rpc, им никакой инфраструктуры сверх требуемой для рест не нужно. Ну а парсинг/сериализация требуется и там и там, поэтому перформанс будет зависеть от рук разработчика, а не определяться архитектурой.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[14]: SOA vs REST
От: Tanker  
Дата: 16.01.13 12:22
Оценка:
Здравствуйте, hattab, Вы писали:

H>Ага. Только тот пример, что ты показал, рестом не является Это некий гибридный вариант реста и рпц. Операции реста ограничены методами хттп, а у тебя операция есть ресурс. Это от попытки натянуть идеологию на задачу.


Правильно — я показал, что будет если эмулировать рпц с помощью реста.

T>> Очевидно, в равных условиях, при отсутствии поддержки SOA инфраструктурой придется убить немеряно времени на реализацию и забить на многие аспекты вроде перформанса. Рест здесь рулит и дает пропускную способность практически на уровне максимальной. И наоборот, в тех же равных условиях, если есть поддержка инфраструктурой, то наоборот, SOA рулит не по детски.


H>Ерунда. Для мыла, конечно, инфраструктура нужна т.к. это овердизайнутое ненужно и просто руками с этим работать трудно. Но мылом соа не ограничивается, и если рассматривать легкие методы рпц, такие как json-rpc и xml-rpc, им никакой инфраструктуры сверх требуемой для рест не нужно. Ну а парсинг/сериализация требуется и там и там, поэтому перформанс будет зависеть от рук разработчика, а не определяться архитектурой.


Инфраструктура нужна для построения АПИ, а форматы данных это дело десятое.
var s = echo("Hello JSON-RPC"); // вот для того нужна инфраструктура

серверный код будет вот такой
string echo(string value) // вот для того нужна инфраструктура
{
    return value;
}
а результат имеем вот такой:
[code]
--> { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1}
<-- { "result": "Hello JSON-RPC", "error": null, "id": 1}
[/code]


Покажи теперь то же самое для замены рест, например пример CRUD операции на своем json-rpc, хотя бы Create + Update, для такого вот ресурса
class Book
{
 public string Title;
 public string Annotation;
 public string ISBN;
 public string Author;
 public string Excerpt;
}

И объясни, как быть клиенту, если сервер работает с сотней таких ресурсов.
The animals went in two by two, hurrah, hurrah...
Re[15]: SOA vs REST
От: hattab  
Дата: 16.01.13 14:06
Оценка:
Здравствуйте, Tanker, Вы писали:

T> H>Ерунда. Для мыла, конечно, инфраструктура нужна т.к. это овердизайнутое ненужно и просто руками с этим работать трудно. Но мылом соа не ограничивается, и если рассматривать легкие методы рпц, такие как json-rpc и xml-rpc, им никакой инфраструктуры сверх требуемой для рест не нужно. Ну а парсинг/сериализация требуется и там и там, поэтому перформанс будет зависеть от рук разработчика, а не определяться архитектурой.


T> Инфраструктура нужна для построения АПИ, а форматы данных это дело десятое.

T>
T> var s = echo("Hello JSON-RPC"); // вот для того нужна инфраструктура
T>

T> серверный код будет вот такой
T>
T> string echo(string value) // вот для того нужна инфраструктура
T> {
T>     return value;
T> }
T> а результат имеем вот такой:
T> [code]

T> --> { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1}

T> <-- { "result": "Hello JSON-RPC", "error": null, "id": 1}
T> [/code]
T>


А с чего ты решил, что рпц требует наличия инфраструктуры? Инфраструктура для рпц это приятная плюшка разработчику, а не обязательное требование. Кто-то запрещает делать все руками (тем более с текстовыми протоколами обмена)?

T> Покажи теперь то же самое для замены рест, например пример CRUD операции на своем json-rpc, хотя бы Create + Update, для такого вот ресурса

T>
T> class Book
T> {
T>  public string Title;
T>  public string Annotation;
T>  public string ISBN;
T>  public string Author;
T>  public string Excerpt;
T> }
T>

T> И объясни, как быть клиенту, если сервер работает с сотней таких ресурсов.

После твоего рест-примера.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[15]: SOA vs REST
От: hattab  
Дата: 16.01.13 14:07
Оценка:
Здравствуйте, Tanker, Вы писали:

T> H>Ерунда. Для мыла, конечно, инфраструктура нужна т.к. это овердизайнутое ненужно и просто руками с этим работать трудно. Но мылом соа не ограничивается, и если рассматривать легкие методы рпц, такие как json-rpc и xml-rpc, им никакой инфраструктуры сверх требуемой для рест не нужно. Ну а парсинг/сериализация требуется и там и там, поэтому перформанс будет зависеть от рук разработчика, а не определяться архитектурой.


T> Инфраструктура нужна для построения АПИ, а форматы данных это дело десятое.

T>
T> var s = echo("Hello JSON-RPC"); // вот для того нужна инфраструктура
T>

T> серверный код будет вот такой
T>
T> string echo(string value) // вот для того нужна инфраструктура
T> {
T>     return value;
T> }
T> а результат имеем вот такой:
T> [code]

T> --> { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1}

T> <-- { "result": "Hello JSON-RPC", "error": null, "id": 1}
T> [/code]
T>


А с чего ты решил, что рпц требует наличия инфраструктуры? Инфраструктура для рпц это приятная плюшка разработчику, а не обязательное требование. Кто-то запрещает делать все руками (тем более с текстовыми протоколами обмена)?

T> Покажи теперь то же самое для замены рест, например пример CRUD операции на своем json-rpc, хотя бы Create + Update, для такого вот ресурса

T>
T> class Book
T> {
T>  public string Title;
T>  public string Annotation;
T>  public string ISBN;
T>  public string Author;
T>  public string Excerpt;
T> }
T>

T> И объясни, как быть клиенту, если сервер работает с сотней таких ресурсов.

После твоего рест-примера.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[16]: SOA vs REST
От: Tanker  
Дата: 16.01.13 14:26
Оценка:
Здравствуйте, hattab, Вы писали:

H>А с чего ты решил, что рпц требует наличия инфраструктуры? Инфраструктура для рпц это приятная плюшка разработчику, а не обязательное требование. Кто-то запрещает делать все руками (тем более с текстовыми протоколами обмена)?


Пару тыщ классов-методов писать, парсить, майнтейнить руками ?

T>> Покажи теперь то же самое для замены рест, например пример CRUD операции на своем json-rpc, хотя бы Create + Update, для такого вот ресурса

T>>
T>> class Book
T>> {
T>>  public string Title;
T>>  public string Annotation;
T>>  public string ISBN;
T>>  public string Author;
T>>  public string Excerpt;
T>> }
T>>

T>> И объясни, как быть клиенту, если сервер работает с сотней таких ресурсов.

H>После твоего рест-примера.


Не-а. Я уже показал один пример, твоя очередь. Если нечего сказать — так и говори, что де аргументы закончились.
The animals went in two by two, hurrah, hurrah...
Re[17]: SOA vs REST
От: hattab  
Дата: 16.01.13 14:34
Оценка:
Здравствуйте, Tanker, Вы писали:

T> H>А с чего ты решил, что рпц требует наличия инфраструктуры? Инфраструктура для рпц это приятная плюшка разработчику, а не обязательное требование. Кто-то запрещает делать все руками (тем более с текстовыми протоколами обмена)?


T> Пару тыщ классов-методов писать, парсить, майнтейнить руками ?


При невозможности использовать инфраструктуру. Почему нет? У клиента в такой ситуации вообще выбора нет

T> H>После твоего рест-примера.


T> Не-а. Я уже показал один пример, твоя очередь. Если нечего сказать — так и говори, что де аргументы закончились.


Да я просто под копирку твое же повторю, в стиле рпц разумеется, чтоб небыло левых придирок (потому как реализовать можно кучей способов).
avalon 1.0rc3 build 432, zlib 1.2.5
Re[18]: SOA vs REST
От: Tanker  
Дата: 16.01.13 14:41
Оценка:
Здравствуйте, hattab, Вы писали:

T>> Пару тыщ классов-методов писать, парсить, майнтейнить руками ?


H>При невозможности использовать инфраструктуру. Почему нет? У клиента в такой ситуации вообще выбора нет


У меня вот в модели около 200 классов. Как раз то, что надо для SOA. Без архитектуры нужно все делать самому, вообще всё. Выполнение последовательности операцией превращается в целую пачку простыней.

T>> H>После твоего рест-примера.

T>> Не-а. Я уже показал один пример, твоя очередь. Если нечего сказать — так и говори, что де аргументы закончились.

H>Да я просто под копирку твое же повторю, в стиле рпц разумеется, чтоб небыло левых придирок (потому как реализовать можно кучей способов).


"Show me the code" @
The animals went in two by two, hurrah, hurrah...
Re[19]: SOA vs REST
От: hattab  
Дата: 16.01.13 17:03
Оценка:
Здравствуйте, Tanker, Вы писали:

T> T>> Пару тыщ классов-методов писать, парсить, майнтейнить руками ?


T> H>При невозможности использовать инфраструктуру. Почему нет? У клиента в такой ситуации вообще выбора нет


T> У меня вот в модели около 200 классов. Как раз то, что надо для SOA. Без архитектуры нужно все делать самому, вообще всё. Выполнение последовательности операцией превращается в целую пачку простыней.


Так кто же спорит Руками придется дофига писать, как и в случае рест. Только при этом не нужно будет думать, как бы от идеологии не отступить.

Твои слова
Автор: Tanker
Дата: 16.01.13
:

Очевидно, в равных условиях, при отсутствии поддержки SOA инфраструктурой придется убить немеряно времени на реализацию и забить на многие аспекты вроде перформанса.


То есть, рест в твоей ситуации, на модели с парой сотен классов, будет сильно лучше что-ли? Работы будет столько же т.к. что в случае с рест все нужно делать руками, что в случае с рпц и при отказе от инфраструктуры тоже придется все делать руками. Разница будет лишь в том, что у рпц (json-rpc и xml-rpc) есть четкие спеки, а для рест стиля придется еще и форматы обмена велосипедить.

T> H>Да я просто под копирку твое же повторю, в стиле рпц разумеется, чтоб небыло левых придирок (потому как реализовать можно кучей способов).


T> "Show me the code" @


Ну так:

После твоего рест-примера.

avalon 1.0rc3 build 432, zlib 1.2.5
Re[20]: SOA vs REST
От: Tanker  
Дата: 16.01.13 17:28
Оценка: +1
Здравствуйте, hattab, Вы писали:

H>Так кто же спорит Руками придется дофига писать, как и в случае рест. Только при этом не нужно будет думать, как бы от идеологии не отступить.


Для рест не надо, если это АПИ это модель ресурсов.

H>То есть, рест в твоей ситуации, на модели с парой сотен классов, будет сильно лучше что-ли?


Для большой модели ресурсов рест это практически серебряная пуля.

>Работы будет столько же т.к. что в случае с рест все нужно делать руками, что в случае с рпц и при отказе от инфраструктуры тоже придется все делать руками. Разница будет лишь в том, что у рпц (json-rpc и xml-rpc) есть четкие спеки, а для рест стиля придется еще и форматы обмена велосипедить.


Форматы обмена нужны для эмуляции рпц с помощью рест.

T>> "Show me the code" @


H>Ну так:

H>

После твоего рест-примера.


Предлагаю закончить, раз ты не способен самостоятельно полдесятка строчек накидать.
The animals went in two by two, hurrah, hurrah...
Re[20]: SOA vs REST
От: Sharov Россия  
Дата: 16.01.13 17:51
Оценка:
Здравствуйте, hattab, Вы писали:



H>Так кто же спорит Руками придется дофига писать, как и в случае рест. Только при этом не нужно будет думать, как бы от идеологии не отступить.


Спорно. Понятное дело, что для rpc как такового кода нужно больше, но этот в основе своей будет сгенерирован. В остальном усилия программиста и
в том и в др. случае будут сопоставимы. Возможно с rpc возни со всякими настройками будет больше.
Кодом людям нужно помогать!
Re[21]: SOA vs REST
От: hattab  
Дата: 16.01.13 20:03
Оценка:
Здравствуйте, Tanker, Вы писали:

T> H>Так кто же спорит Руками придется дофига писать, как и в случае рест. Только при этом не нужно будет думать, как бы от идеологии не отступить.


T> Для рест не надо, если это АПИ это модель ресурсов.


Модель ресурсов это не апи. АПИ это соглашения о взаимодействии. Да и состояние должно как то представляться для передачи. Да и роутинг по URI кто то делать должен. И все это нужно делать, и стандартов на это нет.

T> H>То есть, рест в твоей ситуации, на модели с парой сотен классов, будет сильно лучше что-ли?


T> Для большой модели ресурсов рест это практически серебряная пуля.


Слова, слова

T> >Работы будет столько же т.к. что в случае с рест все нужно делать руками, что в случае с рпц и при отказе от инфраструктуры тоже придется все делать руками. Разница будет лишь в том, что у рпц (json-rpc и xml-rpc) есть четкие спеки, а для рест стиля придется еще и форматы обмена велосипедить.


T> Форматы обмена нужны для эмуляции рпц с помощью рест.


Да с чего бы. Банальная задача сообщить подробную информацию об ошибке операции уже приводит к велосипедству. Цитирую RESTful web services:
Example 3-2. A sample error response from S3
404 Not Found
Content-Type: application/xml
Date: Fri, 10 Nov 2006 20:04:45 GMT
Server: AmazonS3
Transfer-Encoding: chunked
X-amz-id-2: /sBIPQxHJCsyRXJwGWNzxuL5P+K96/Wvx4FhvVACbjRfNbhbDyBH5RC511sIz0w0
X-amz-request-id: ED2168503ABB7BF4
<?xml version="1.0" encoding="UTF-8"?>
<Error>
 <Code>NoSuchKey</Code>
 <Message>The specified key does not exist.</Message>
 <Key>nonexistent/object</Key>
 <RequestId>ED2168503ABB7BF4</RequestId>
 <HostId>/sBIPQxHJCsyRXJwGWNzxuL5P+K96/Wvx4FhvVACbjRfNbhbDyBH5RC511sIz0w0</HostId>
</Error>


Оставаться в тесных рамках хттп для большой задачи долго не получится. Ну и повторю на счет представления состояния.

T> Предлагаю закончить, раз ты не способен самостоятельно полдесятка строчек накидать.


Я тебе предложил сделать первый шаг. Тот, с банальным эхо за пример не катит.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[21]: SOA vs REST
От: hattab  
Дата: 16.01.13 20:03
Оценка:
Здравствуйте, Sharov, Вы писали:

S> H>Так кто же спорит Руками придется дофига писать, как и в случае рест. Только при этом не нужно будет думать, как бы от идеологии не отступить.


S> Спорно. Понятное дело, что для rpc как такового кода нужно больше, но этот в основе своей будет сгенерирован. В остальном усилия программиста и

S> в том и в др. случае будут сопоставимы. Возможно с rpc возни со всякими настройками будет больше.

Кто будет генерировать код в ситуации отсутствия инфраструктуры о которой идет речь?
avalon 1.0rc3 build 432, zlib 1.2.5
Re[22]: SOA vs REST
От: Sharov Россия  
Дата: 17.01.13 09:02
Оценка: +1
Здравствуйте, hattab, Вы писали:

S>> Спорно. Понятное дело, что для rpc как такового кода нужно больше, но этот в основе своей будет сгенерирован. В остальном усилия программиста и

S>> в том и в др. случае будут сопоставимы. Возможно с rpc возни со всякими настройками будет больше.

H>Кто будет генерировать код в ситуации отсутствия инфраструктуры о которой идет речь?


Хороший вопрос. Задача должна быть совсем уж экзотической, чтобы не было хоть какой-нибудь инфраструктуры.
Кодом людям нужно помогать!
Re[22]: SOA vs REST
От: Tanker  
Дата: 17.01.13 11:29
Оценка:
Здравствуйте, hattab, Вы писали:

H>Модель ресурсов это не апи. АПИ это соглашения о взаимодействии. Да и состояние должно как то представляться для передачи. Да и роутинг по URI кто то делать должен. И все это нужно делать, и стандартов на это нет.


Модель ресурсов это и есть соглашение о взаимодействии, следовательно, это апи.

T>> H>То есть, рест в твоей ситуации, на модели с парой сотен классов, будет сильно лучше что-ли?

T>> Для большой модели ресурсов рест это практически серебряная пуля.

H>Слова, слова


Пишется мышом, например в wcf data services.

H>Да с чего бы. Банальная задача сообщить подробную информацию об ошибке операции уже приводит к велосипедству. Цитирую RESTful web services:


см выше.

P.S. как надумаешь привести хотя бы один пример — подтягивайся.
The animals went in two by two, hurrah, hurrah...
Re[23]: SOA vs REST
От: hattab  
Дата: 17.01.13 14:22
Оценка:
Здравствуйте, Tanker, Вы писали:

T> H>Модель ресурсов это не апи. АПИ это соглашения о взаимодействии. Да и состояние должно как то представляться для передачи. Да и роутинг по URI кто то делать должен. И все это нужно делать, и стандартов на это нет.


T> Модель ресурсов это и есть соглашение о взаимодействии, следовательно, это апи.


Ничего подобного. Результат взаимодействия с ресурсами может быть сильно разным. Это раз. Формат представления состояния нужно определять. Это два.

T> H>Слова, слова


T> Пишется мышом, например в wcf data services.


Кто-то тут
Автор: Tanker
Дата: 16.01.13
говорил про ситуацию с отсутствующей инфраструктурой, на которой рест зарулит рпц Откуда, вдруг, взялся WCF?

T> H>Да с чего бы. Банальная задача сообщить подробную информацию об ошибке операции уже приводит к велосипедству. Цитирую RESTful web services:


T> см выше.


Так ты сам и посмотри о чем речь идет, если контекст потерял.

T> P.S. как надумаешь привести хотя бы один пример — подтягивайся.


Сразу после тебя. Не сомневайся.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[24]: SOA vs REST
От: Tanker  
Дата: 17.01.13 15:55
Оценка:
Здравствуйте, hattab, Вы писали:

T>> H>Модель ресурсов это не апи. АПИ это соглашения о взаимодействии. Да и состояние должно как то представляться для передачи. Да и роутинг по URI кто то делать должен. И все это нужно делать, и стандартов на это нет.

T>> Модель ресурсов это и есть соглашение о взаимодействии, следовательно, это апи.

H>Ничего подобного. Результат взаимодействия с ресурсами может быть сильно разным. Это раз. Формат представления состояния нужно определять. Это два.


Взаимодействие не с ресурсами, а с сервером посредтсвом ресурсов. Формат определяется локально, это дает возможность для оптимизаций.

T>> Пишется мышом, например в wcf data services.

H>Кто-то тут
Автор: Tanker
Дата: 16.01.13
говорил про ситуацию с отсутствующей инфраструктурой, на которой рест зарулит рпц Откуда, вдруг, взялся WCF?

T>> H>Да с чего бы. Банальная задача сообщить подробную информацию об ошибке операции уже приводит к велосипедству. Цитирую RESTful web services:
T>> см выше.

H>Так ты сам и посмотри о чем речь идет, если контекст потерял.


Ты наверное не в курсе, что wcf data services это рест и не в курсе, что там есть обработка ошибок "искаропки". Загляни на досуге.
А вообще скажем кеширование гораздо более важно нежели информация об ошибках.

H>Сразу после тебя. Не сомневайся.


Есть основания тебе не верить.
The animals went in two by two, hurrah, hurrah...
Re[25]: SOA vs REST
От: hattab  
Дата: 17.01.13 16:53
Оценка:
Здравствуйте, Tanker, Вы писали:

T> T>> Модель ресурсов это и есть соглашение о взаимодействии, следовательно, это апи.


T> H>Ничего подобного. Результат взаимодействия с ресурсами может быть сильно разным. Это раз. Формат представления состояния нужно определять. Это два.


T> Взаимодействие не с ресурсами, а с сервером посредтсвом ресурсов. Формат определяется локально, это дает возможность для оптимизаций.


Конечно определяется. Как определяется и механика взаимодействия. И у каждого рест-сервиса оно свое собственное. Это и есть АПИ, а модель это просто модель (не определяющая ни форматов ни механизмов).

T> T>> Пишется мышом, например в wcf data services.


T> H>Кто-то тут
Автор: Tanker
Дата: 16.01.13
говорил про ситуацию с отсутствующей инфраструктурой, на которой рест зарулит рпц Откуда, вдруг, взялся WCF?


T> T>> H>Да с чего бы. Банальная задача сообщить подробную информацию об ошибке операции уже приводит к велосипедству. Цитирую RESTful web services:


T> T>> см выше.


T> H>Так ты сам и посмотри о чем речь идет, если контекст потерял.


T> Ты наверное не в курсе, что wcf data services это рест и не в курсе, что там есть обработка ошибок "искаропки". Загляни на досуге.


Я тебе еще раз напомню, что ты говорил
Автор: Tanker
Дата: 16.01.13
об отсутствии инфраструктуры. Не приплетай теперь сюда WCF.

T> А вообще скажем кеширование гораздо более важно нежели информация об ошибках.


Это далеко не киллер фича, более того, использующееся по дефолту может вступать в конфликт с требованиями безопасности. Ну и все мы слышали о рекомендациях перезагрузить страничку или очистить куки в случае проблем с работой сайтов (это от него самого). А работа через прокси может усугубить проблему. Плавали, знаем. Кроме того, предоставление полной информации об ошибке является одним из важнейших условий качественного публичного сервиса.

T> Есть основания тебе не верить.


У меня, похоже, скоро появятся основания считать тебе балаболом
avalon 1.0rc3 build 432, zlib 1.2.5
Re[26]: SOA vs REST
От: Tanker  
Дата: 17.01.13 17:32
Оценка:
Здравствуйте, hattab, Вы писали:

T>> H>Ничего подобного. Результат взаимодействия с ресурсами может быть сильно разным. Это раз. Формат представления состояния нужно определять. Это два.

T>> Взаимодействие не с ресурсами, а с сервером посредтсвом ресурсов. Формат определяется локально, это дает возможность для оптимизаций.
H>Конечно определяется. Как определяется и механика взаимодействия. И у каждого рест-сервиса оно свое собственное. Это и есть АПИ, а модель это просто модель (не определяющая ни форматов ни механизмов).

Правильно, это основное преимущество рест что "оно собственное" + то же самое кеширование.

T>> Ты наверное не в курсе, что wcf data services это рест и не в курсе, что там есть обработка ошибок "искаропки". Загляни на досуге.

H>Я тебе еще раз напомню, что ты говорил
Автор: Tanker
Дата: 16.01.13
об отсутствии инфраструктуры. Не приплетай теперь сюда WCF.


Серверная инфраструктура есть и там и там. А вот клиентской может и не быть. WCF data services != WCF.

H>Это далеко не киллер фича, более того, использующееся по дефолту может вступать в конфликт с требованиями безопасности. Ну и все мы слышали о рекомендациях перезагрузить страничку или очистить куки в случае проблем с работой сайтов (это от него самого). А работа через прокси может усугубить проблему. Плавали, знаем. Кроме того, предоставление полной информации об ошибке является одним из важнейших условий качественного публичного сервиса.


Это все как будто про про wcf data services

T>> Есть основания тебе не верить.

H>У меня, похоже, скоро появятся основания считать тебе балаболом

Твой ник у меня в черном списке как раз по такому же вопросу — не хотел пример приводить
The animals went in two by two, hurrah, hurrah...
Re[27]: SOA vs REST
От: hattab  
Дата: 17.01.13 17:58
Оценка:
Здравствуйте, Tanker, Вы писали:

T> H>Конечно определяется. Как определяется и механика взаимодействия. И у каждого рест-сервиса оно свое собственное. Это и есть АПИ, а модель это просто модель (не определяющая ни форматов ни механизмов).


T> Правильно, это основное преимущество рест что "оно собственное" + то же самое кеширование.


То есть модель таки не АПИ. Договорились.

T> T>> Ты наверное не в курсе, что wcf data services это рест и не в курсе, что там есть обработка ошибок "искаропки". Загляни на досуге.


T> H>Я тебе еще раз напомню, что ты говорил
Автор: Tanker
Дата: 16.01.13
об отсутствии инфраструктуры. Не приплетай теперь сюда WCF.


T> Серверная инфраструктура есть и там и там. А вот клиентской может и не быть. WCF data services != WCF.


Речь не шла о разделении на клиентскую часть и серверную, более того, слова о перформансе
Автор: Tanker
Дата: 16.01.13
вообще мало соотносятся с клиентской частью т.к. она (производительность), по большому счету, определяется стороной сервера. Кроме того, в своем примере кода
Автор: Tanker
Дата: 16.01.13
ты говоришь как о серверной инфраструктуре так и о клиентской. Ну и еще, серверная инфраструктура не в пример сложнее инфраструктуры клиентской, поэтому я слабо представляю себе ситуацию отсутствия инфраструктуры у клиента при наличии оной для серверной части. Это уже какие то выдумки пошли.

T> H>Это далеко не киллер фича, более того, использующееся по дефолту может вступать в конфликт с требованиями безопасности. Ну и все мы слышали о рекомендациях перезагрузить страничку или очистить куки в случае проблем с работой сайтов (это от него самого). А работа через прокси может усугубить проблему. Плавали, знаем. Кроме того, предоставление полной информации об ошибке является одним из важнейших условий качественного публичного сервиса.


T> Это все как будто про про wcf data services


И давно рест сузился до wcf data services? Что-то тебя потянуло обсуждать существующий фреймвок, хотя разговор начался с обсуждения подходов

T> T>> Есть основания тебе не верить.


T> H>У меня, похоже, скоро появятся основания считать тебе балаболом


T> Твой ник у меня в черном списке как раз по такому же вопросу — не хотел пример приводить


Раз ты все записываешь, не мог бы привести ссылочку на меня или цитату?
avalon 1.0rc3 build 432, zlib 1.2.5
Re[28]: SOA vs REST
От: Tanker  
Дата: 18.01.13 06:33
Оценка:
Здравствуйте, hattab, Вы писали:

T>> Правильно, это основное преимущество рест что "оно собственное" + то же самое кеширование.

H>То есть модель таки не АПИ. Договорились.

АПИ.

H>Речь не шла о разделении на клиентскую часть и серверную, более того, слова о перформансе
Автор: Tanker
Дата: 16.01.13
вообще мало соотносятся с клиентской частью т.к. она (производительность), по большому счету, определяется стороной сервера.


Вот так новость, пропускная способность каналов связи стала ничтожной ! Ты веб с десктопом случайно не перепутал ?
Самые шустрые сервисы почемуто рест, с чего бы это ?

>Кроме того, в своем примере кода
Автор: Tanker
Дата: 16.01.13
ты говоришь как о серверной инфраструктуре так и о клиентской. Ну и еще, серверная инфраструктура не в пример сложнее инфраструктуры клиентской, поэтому я слабо представляю себе ситуацию отсутствия инфраструктуры у клиента при наличии оной для серверной части. Это уже какие то выдумки пошли.


Инфраструктура какая то будет, а вот full-blown как для SOA совсем необязательно.

H>И давно рест сузился до wcf data services? Что-то тебя потянуло обсуждать существующий фреймвок, хотя разговор начался с обсуждения подходов


Это как пример обработки ошибок и других плюшек. Все что нужно от сервиса, это сообщение об ошибке, а не стандарты на эту ошибку.

T>> Твой ник у меня в черном списке как раз по такому же вопросу — не хотел пример приводить

H>Раз ты все записываешь, не мог бы привести ссылочку на меня или цитату?

Я записываю ники и причины, очень кратко. Вобщем если нечего
The animals went in two by two, hurrah, hurrah...
Re[29]: SOA vs REST
От: hattab  
Дата: 18.01.13 09:01
Оценка:
Здравствуйте, Tanker, Вы писали:

T> H>То есть модель таки не АПИ. Договорились.


T> АПИ.


Нет не АПИ. В АПИ входят соглашения о взаимодействии. Модель вообще не в курсе ни каких соглашений. Если твоя в курсе, значит у тебя проблема с дизайном.

T> H>Речь не шла о разделении на клиентскую часть и серверную, более того, слова о перформансе
Автор: Tanker
Дата: 16.01.13
вообще мало соотносятся с клиентской частью т.к. она (производительность), по большому счету, определяется стороной сервера.


T> Вот так новость, пропускная способность каналов связи стала ничтожной ! Ты веб с десктопом случайно не перепутал ?


Ты уж определелись, о чем ты говоришь (а говорил ты о влиянии отсутствия инфраструктуры на производительность):

Очевидно, в равных условиях, при отсутствии поддержки SOA инфраструктурой придется убить немеряно времени на реализацию и забить на многие аспекты вроде перформанса


Как бы там ни было, рпц не на много сильнее утилизирует канал.

T> Самые шустрые сервисы почемуто рест, с чего бы это ?


Цифры, ссылки, методики измерений?

T> >Кроме того, в своем примере кода
Автор: Tanker
Дата: 16.01.13
ты говоришь как о серверной инфраструктуре так и о клиентской. Ну и еще, серверная инфраструктура не в пример сложнее инфраструктуры клиентской, поэтому я слабо представляю себе ситуацию отсутствия инфраструктуры у клиента при наличии оной для серверной части. Это уже какие то выдумки пошли.


T> Инфраструктура какая то будет, а вот full-blown как для SOA совсем необязательно.


И какие же трудности возникнут при реализации клиента рпц руками по сравнению с рест в такой ситуации?

T> H>И давно рест сузился до wcf data services? Что-то тебя потянуло обсуждать существующий фреймвок, хотя разговор начался с обсуждения подходов


T> Это как пример обработки ошибок и других плюшек. Все что нужно от сервиса, это сообщение об ошибке, а не стандарты на эту ошибку.


И как же клиент поймет, что это ошибка, а главное, в чем её суть, без стандартов на данное действо (статус коды хттп проблему не решают)? Как сможет корректно на нее отреагировать? Или предлагается вываливать xml/json/html юзеру нехай разбирается?

T> H>Раз ты все записываешь, не мог бы привести ссылочку на меня или цитату?


T> Я записываю ники и причины, очень кратко. Вобщем если нечего


avalon 1.0rc3 build 432, zlib 1.2.5
Re[30]: SOA vs REST
От: Tanker  
Дата: 18.01.13 14:48
Оценка:
Здравствуйте, hattab, Вы писали:

Надоело. Жду примера.
The animals went in two by two, hurrah, hurrah...
Re[31]: SOA vs REST
От: hattab  
Дата: 18.01.13 18:20
Оценка:
Здравствуйте, Tanker, Вы писали:

T> Надоело. Жду примера.


После твоего рест-примера.

avalon 1.0rc3 build 432, zlib 1.2.5
Re[5]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 20.01.13 18:59
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD>Автор упоминаемой книги приводил пример, что при ориентации корпоративных систем на веб-службы оказывается очень сложным поиск нужной информации. А в REST это легко.

Полный бред. Возможно имелось ввиду, что _потенциально_ в случае REST можно писать произвольные запросы по данным, тогда как в SOAP все жестко ограничено контрактом, но в реальной жизни такие сценарии не встречаются.

TYD>И еще говорил, что системы на веб-службах очень сложные получаются, запутанные, трудно отлаживаются.

Обычно наоборот. веб-сервисы очень конкретные и отлаживаются очень просто, тут хорошо помогает наличие жесткого контракта.

TYD> Мне казалось, что веб-службы очень строго описывают свои интерфейсы, которые отслеживаются в автоматическом режиме. Это же благо, которое должно бы упростить разработку. В чем я ошибаюсь?

Ни в чем.
Мы уже победили, просто это еще не так заметно...
Re: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 20.01.13 19:15
Оценка: 15 (2)
Здравствуйте, TYuD, Вы писали:

TYD>Буду благодарен, если в двух словах поможете объяснить плюсы/минусы обоих архитектур.

Ключевых отличия два.
1. В SOAP есть жесткий контракт и никуда от него не деться, в REST этого контракта нет. Это может быть и плюсом и минусом, смотря с какой стороны смотреть.
2. SOAP "из каропки", может обеспечить поддержку транзакционности, гарантию доставки, отсутствие дубликатов и кучу другой обвязки типа аутентификации и прочего. REST же ничего подобного не умеет.

В силу этих особенностей, REST существенно проще, у него существенно ниже порог вхождения и шире поддержка на различных платформах, не смотря на то что он младше. SOAP наоборот — существенно богаче по возможностям, но тяжелее в освоении, что в конечном итоге и ограничило его развитие.

На практике мы применяем очень простое правило большего пальца: если и сервер и клиентов разрабатываем только мы и/или потенциально может потребоваться поддержка транзакций, состояний и прочего, то это SOAP, если же клиента потенциально можем разрабатывать не мы или он на той платформе где SOAP не очень прижился, то это REST.

P. S.
RPC и "операционная модель" не имеет никакого отношения к SOAP. В этом смысле и SOAP и REST не имеют никаких отличий.
Мы уже победили, просто это еще не так заметно...
Re[32]: SOA vs REST
От: Tanker  
Дата: 20.01.13 20:20
Оценка: -1
Здравствуйте, hattab, Вы писали:

T>> Надоело. Жду примера.


H>

После твоего рест-примера.

H>

Ты уже один раз отделался общими словами про json-rpc, больше такой фокус не пройдет.
The animals went in two by two, hurrah, hurrah...
Re[6]: SOA vs REST
От: TYuD  
Дата: 21.01.13 19:24
Оценка:
Здравствуйте, IB, Вы писали:

TYD>>Автор упоминаемой книги приводил пример, что при ориентации корпоративных систем на веб-службы оказывается очень сложным поиск нужной информации. А в REST это легко.

IB>Полный бред. Возможно имелось ввиду, что _потенциально_ в случае REST можно писать произвольные запросы по данным, тогда как в SOAP все жестко ограничено контрактом, но в реальной жизни такие сценарии не встречаются.

Мы тут на этой ветке размышляли и предположили, что возможно для REST-та существуют какие-то поисковые машины или утилиты, которые упрощают поиск информации. Не так? Может просто автор имел ввиду гиперссылки и поиск вручную?

И еще он говорил про преимущество кеширования в REST. Предполагаю на уровне HTTP.
Re[2]: SOA vs REST
От: TYuD  
Дата: 21.01.13 19:35
Оценка:
Здравствуйте, IB, Вы писали:

IB>В силу этих особенностей, REST существенно проще, у него существенно ниже порог вхождения и шире поддержка на различных платформах, не смотря на то что он младше.


Почему REST младше? По времени появления? Я думал наоборот: HTTP раньше появился, чем SOAP, поэтому REST старше.

IB>RPC и "операционная модель" не имеет никакого отношения к SOAP. В этом смысле и SOAP и REST не имеют никаких отличий.


Слышал про два варианта использования SOAP: 1) в виде RPC; 2) в виде документов (подозреваю асинхронный обмен сообщениями). Т.е. SOAP может использоваться и в качестве RPC. Не так? Да и SOAP тут ни при чем, наверное. Это настройкой клиента определяется. Да?
Re[7]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 22.01.13 09:50
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD> Не так? Может просто автор имел ввиду гиперссылки и поиск вручную?

Нет никаких поисковых машин. просто REST позволяет строить произвольные запросы по набору данных, примерно как SQL.
см. OData, например. Но в реальной жизни это довольно бесполезная особенность.

TYD>И еще он говорил про преимущество кеширования в REST. Предполагаю на уровне HTTP.

Нет там никакого преимущества, у SOAP точно такие же возможности, даже больше. Для SOAP HTTP один из возможных транспортов вместе со всем что этот транспорт предлагает, в том числе и кеширование.
Мы уже победили, просто это еще не так заметно...
Re[3]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 22.01.13 09:55
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD>Почему REST младше? По времени появления? Я думал наоборот: HTTP раньше появился, чем SOAP, поэтому REST старше.

HTTP конечно раньше, но как самостоятельная концепция REST появился позже SOAP.

TYD>Слышал про два варианта использования SOAP: 1) в виде RPC; 2) в виде документов (подозреваю асинхронный обмен сообщениями). Т.е. SOAP может использоваться и в качестве RPC. Не так?

Как RPC можно использовать все что угодно (пытаться) с разной степенью успешности, в том числе и REST. Другое дело, что идеологически SOAP никогда не предполагалось использовать в качестве RPC и никогда под такие сценарии он не затачивался.
Изначально и SOAP и REST предполагалось использовать для одних и тех же целей. Ровно по этой причине сейчас все каждый раз и ломают голову, а что же брать.

TYD> Да и SOAP тут ни при чем, наверное. Это настройкой клиента определяется. Да?

Это настройками в голове разработчика определяется.
Мы уже победили, просто это еще не так заметно...
Re[4]: SOA vs REST
От: Sharov Россия  
Дата: 22.01.13 10:18
Оценка:
Здравствуйте, IB, Вы писали:

IB>Как RPC можно использовать все что угодно (пытаться) с разной степенью успешности, в том числе и REST. Другое дело, что идеологически SOAP никогда не предполагалось использовать в качестве RPC и никогда под такие сценарии он не затачивался.


А можно поподробнее? Для чего тогда разрабатывался soap?
Кодом людям нужно помогать!
Re[5]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 22.01.13 12:29
Оценка: 4 (1)
Здравствуйте, Sharov, Вы писали:

S>А можно поподробнее? Для чего тогда разрабатывался soap?

Ровно для того же для чего и REST — передача данных. Более того, SOAP был альтернативой RPC, первым ответом DCOM-ам и CORBA-м (вот они-то как раз и есть RPC), когда выяснилось, что RPC мало приспособлено к реальной жизни, особенно на слабых каналах.
Мы уже победили, просто это еще не так заметно...
Re[6]: SOA vs REST
От: Sharov Россия  
Дата: 22.01.13 12:51
Оценка:
Здравствуйте, IB, Вы писали:

IB>Ровно для того же для чего и REST — передача данных. Более того, SOAP был альтернативой RPC, первым ответом DCOM-ам и CORBA-м (вот они-то как раз и есть RPC), когда выяснилось, что RPC мало приспособлено к реальной жизни, особенно на слабых каналах.


Не очень понятно как SOAP может выступать альтернативой RPC? Грубо говоря, как прикладной уровень может выступать альтернативой
транспортному уровню? SOAP же работает поверх RPC ...
Кодом людям нужно помогать!
Re[4]: SOA vs REST
От: hattab  
Дата: 22.01.13 19:49
Оценка:
Здравствуйте, IB, Вы писали:

IB> Как RPC можно использовать все что угодно (пытаться) с разной степенью успешности, в том числе и REST. Другое дело, что идеологически SOAP никогда не предполагалось использовать в качестве RPC и никогда под такие сценарии он не затачивался.


Очень даже предполагалось. В спеку (2.2.2 Remote Procedure Calls) загляни.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[7]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 23.01.13 10:59
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Не очень понятно как SOAP может выступать альтернативой RPC? Грубо говоря, как прикладной уровень может выступать альтернативой

S>транспортному уровню? SOAP же работает поверх RPC ...
RPC — это не транспорт, а идеология коммуникации удаленных подсистем.
Мы уже победили, просто это еще не так заметно...
Re[5]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 23.01.13 11:01
Оценка:
Здравствуйте, hattab, Вы писали:

H>Очень даже предполагалось. В спеку (2.2.2 Remote Procedure Calls) загляни.

Упс, my bad.. Тем не менее, это не значит, что SOAP следует использовать таким образом. И опять таки, в первую очередь это именно stateless протокол удаленной передачи данных, все остальное уже наворочено сверху.
Мы уже победили, просто это еще не так заметно...
Re[6]: SOA vs REST
От: Sharov Россия  
Дата: 23.01.13 11:36
Оценка:
Здравствуйте, IB, Вы писали:

IB>Тем не менее, это не значит, что SOAP следует использовать таким образом.


А каким образом его следует использовать? И для чего, на Ваш взгляд, он все-таки был разработан?
Кодом людям нужно помогать!
Re[6]: SOA vs REST
От: hattab  
Дата: 23.01.13 13:39
Оценка: 1 (1)
Здравствуйте, IB, Вы писали:

IB> H>Очень даже предполагалось. В спеку (2.2.2 Remote Procedure Calls) загляни.


IB> Упс, my bad.. Тем не менее, это не значит, что SOAP следует использовать таким образом. И опять таки, в первую очередь это именно stateless протокол удаленной передачи данных, все остальное уже наворочено сверху.


Конечно не следует, RPC лишь одна из ипостасей SOAP. SOAP это вообще, по идее, формат обмена сообщениями, а уж их интерпретация дело договорившихся сторон. Ну и по поводу stateless. В аббревиатуре SOAP наличие Object уже намекает на инкапсуляцию, что очень даже stateful (хотя, разумеется, возможны и варианты, поэтому я бы не взялся однозначно все трактовать). В тоже время RPC совсем не означает, что сервис будет выполнен как stateful. Ну а вообще, конечно, SOAP был сделан гигантами для того, чтоб небыло ни одной человеческой реализации, дабы породить vendor lock-in
avalon 1.0rc3 build 432, zlib 1.2.5
Re[7]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 23.01.13 18:50
Оценка:
Здравствуйте, Sharov, Вы писали:

S>А каким образом его следует использовать?

Таким же каким и REST

S>И для чего, на Ваш взгляд, он все-таки был разработан?

Для передачи данных между приложениями.
Мы уже победили, просто это еще не так заметно...
Re[7]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 23.01.13 18:50
Оценка:
Здравствуйте, hattab, Вы писали:

H> В аббревиатуре SOAP наличие Object уже намекает на инкапсуляцию,

Object — не намекает ни на что, кроме Object. Хотя бы в силу того, что термин Object на столько перегружен, что каждый понимает его по своему, а формальное определение отсутствует.

H>В тоже время RPC совсем не означает, что сервис будет выполнен как stateful.

Давай с терминологией разберемся. Формально RPC — это просто передача сообщения другому приложению. Однако, обычно, когда говорят RPC — подразумевают работу с удаленным кодом в стиле CORBA или DCOM, когда вызывающий код делает вид, что все выполняется локально. В этом месте и появляется состояние.

H>Ну а вообще, конечно, SOAP был сделан гигантами для того, чтоб небыло ни одной человеческой реализации, дабы породить vendor lock-in

Это уже вообще какая-то теория заговора. SOAP как раз совершенно вендоронезависимая конструкция и делался в первую очередь для того, чтобы быть кроссвендорным, ровно по этому в качестве формата сообщений брался XML, а транспорта HTTP. И получилось, надо сказать, весьма не плохо. Недостаток ровно один — очень высокий порог вхождения, и это губит всю идею.
Мы уже победили, просто это еще не так заметно...
Re[8]: SOA vs REST
От: hattab  
Дата: 23.01.13 20:57
Оценка: 3 (1) +1
Здравствуйте, IB, Вы писали:

IB> H> В аббревиатуре SOAP наличие Object уже намекает на инкапсуляцию,


IB> Object — не намекает ни на что, кроме Object. Хотя бы в силу того, что термин Object на столько перегружен, что каждый понимает его по своему, а формальное определение отсутствует.


Если опять же почитать спеку, понятно о каких объектах идет речь. Это можно почитать в спеке SOAP 1.1 (Design Goals) и в спеке SOAP 1.2 (4.1.3 Web Architecture Compatible SOAP Usage) которую я даже процитирую:

There are many instances when SOAP messages are designed for uses which are purely for information retrieval, such as when the state of some resource (or object, in programming terms) is requested, as opposed to uses that perform resource manipulation. In such instances, the use of a SOAP body to carry the request for the state, with an element of the body representing the object in question, is seen as counter to the spirit of the Web because the resource is not identified by the Request-URI of the HTTP GET. (In some SOAP/RPC implementations, the HTTP Request-URI is often not the identifier of the resource itself but some intermediate entity which has to evaluate the SOAP message to identify the resource.)


Что в общем не удивительно, коль скоро мы говорим о программных системах

IB> H>В тоже время RPC совсем не означает, что сервис будет выполнен как stateful.


IB> Давай с терминологией разберемся. Формально RPC — это просто передача сообщения другому приложению. Однако, обычно, когда говорят RPC — подразумевают работу с удаленным кодом в стиле CORBA или DCOM, когда вызывающий код делает вид, что все выполняется локально. В этом месте и появляется состояние.


Говоря об RPC обычно имеют ввиду именно RPC и ничего больше А CORBA и DCOM это распределенные системы для работы, опять же, с компонентами-объектами (о чем на и говорят их аббревиатуры), которые могут быть построены поверх RPC (в случае DCOM так оно и есть), но тождественными ему не являются.

IB> H>Ну а вообще, конечно, SOAP был сделан гигантами для того, чтоб небыло ни одной человеческой реализации, дабы породить vendor lock-in


IB> Это уже вообще какая-то теория заговора. SOAP как раз совершенно вендоронезависимая конструкция и делался в первую очередь для того, чтобы быть кроссвендорным, ровно по этому в качестве формата сообщений брался XML, а транспорта HTTP. И получилось, надо сказать, весьма не плохо. Недостаток ровно один — очень высокий порог вхождения, и это губит всю идею.


На то и намек. SOAP настолько всеобъемлющ (типичный пример overdesign), что качественно реализовать его под силу только гигантам. Я сам не раз видел на форумах вопросы о совместимости т.к. реализации разных вендоров не могли нормально взаимодействовать. Об этом же говорит и википедия:

Хотя SOAP является стандартом, некоторые программы часто генерируют сообщения в несовместимом формате. Например, запрос, сгенерированный AXIS-клиентом, не будет понят сервером WebLogic.

avalon 1.0rc3 build 432, zlib 1.2.5
Re[9]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 24.01.13 10:27
Оценка:
Здравствуйте, hattab, Вы писали:

H>Если опять же почитать спеку, понятно о каких объектах идет речь. Это можно почитать в спеке

В спеке ровно это и написано, "мы говорим про объекты, которые объекты", то есть масло маслянное.
Не существует определения object, in programming terms. В этом смысле state of some resource гораздо конкретнее дает понять о чем идет речь.

H>Говоря об RPC обычно имеют ввиду именно RPC и ничего больше

Ок. Я имел ввиду CORBA и DCOM и понял как CORBA и DCOM.

H>На то и намек.

Давай без намеков.

H>SOAP настолько всеобъемлющ (типичный пример overdesign), что качественно реализовать его под силу только гигантам.

Вот это не правда. Он очень качественно порезан на кусочки, так что объемлить только то что нужно проблем не составляет.

H> Я сам не раз видел на форумах вопросы о совместимости т.к. реализации разных вендоров не могли нормально взаимодействовать.

Базовые версии типа httpBasic прекрасно взаимодействуют, тем более что альтернативы все равно нет.
Мы уже победили, просто это еще не так заметно...
Re[10]: SOA vs REST
От: hattab  
Дата: 24.01.13 12:46
Оценка:
Здравствуйте, IB, Вы писали:

IB> Не существует определения object, in programming terms.


Ну как же не существует, когда даже спека сразу поясняет, в скобочках, что за state of some resource имеется ввиду Object in programming term это те самые объекты из ООП. Понятнее некуда, кмк.

IB> В этом смысле state of some resource гораздо конкретнее дает понять о чем идет речь.


Вот-вот. Stateful в полный рост

IB> H>SOAP настолько всеобъемлющ (типичный пример overdesign), что качественно реализовать его под силу только гигантам.


IB> Вот это не правда. Он очень качественно порезан на кусочки, так что объемлить только то что нужно проблем не составляет.


Конечно правда. У меня после чтения спецификации создалось впечатление, что они пытаются решить вообще все существующие проблемы. И, как показывает практика, в такой фрагментации SOAP ничего хорошего нет т.к. частичная реализация приводит к частичной совместимости (что в деле решения проблемы взаимодействия гетерогенных систем кажется немного странным).

IB> H> Я сам не раз видел на форумах вопросы о совместимости т.к. реализации разных вендоров не могли нормально взаимодействовать.


IB> Базовые версии типа httpBasic прекрасно взаимодействуют, тем более что альтернативы все равно нет.


Альтернативы всемогущности SOAP? А кому она нужна? Универсальные решения одинаково плохо решают задачи, решение которых, вроде бы, универсализируют В области межплатформенного взаимодействия и интеграции гетерогенных систем альтернативы есть А всяческая заумь, типа каталога сервисов (будто бы даже взаимозаменяемых) и value-added посредников, нужна только астронавтам архитектуры
avalon 1.0rc3 build 432, zlib 1.2.5
Re[8]: SOA vs REST
От: TYuD  
Дата: 24.01.13 14:37
Оценка:
Здравствуйте, IB, Вы писали:

IB>SOAP как раз совершенно вендоронезависимая конструкция и делался в первую очередь для того, чтобы быть кроссвендорным, ровно по этому в качестве формата сообщений брался XML, а транспорта HTTP. И получилось, надо сказать, весьма не плохо. Недостаток ровно один — очень высокий порог вхождения, и это губит всю идею.


А что значит термин "порог вхлждения"?
Re[9]: SOA vs REST
От: Sharov Россия  
Дата: 24.01.13 15:40
Оценка:
Здравствуйте, TYuD, Вы писали:

TYD>А что значит термин "порог вхлждения"?


Рискну предположить, что нужно немало знать, чтобы правильно использовать или применять.
Кодом людям нужно помогать!
Re[9]: SOA vs REST
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.01.13 11:39
Оценка:
Здравствуйте, TYuD, Вы писали:

IB>>SOAP как раз совершенно вендоронезависимая конструкция и делался в первую очередь для того, чтобы быть кроссвендорным, ровно по этому в качестве формата сообщений брался XML, а транспорта HTTP. И получилось, надо сказать, весьма не плохо. Недостаток ровно один — очень высокий порог вхождения, и это губит всю идею.


TYD>А что значит термин "порог вхлждения"?


Что бы быть специлистом по SOAP надо сначала стать специалистом по SOAP
Re[10]: SOA vs REST
От: TYuD  
Дата: 25.01.13 16:39
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Что бы быть специлистом по SOAP надо сначала стать специалистом по SOAP


Тут, наверное, мудрость какая-то написана, но я не въехал.

Повторюсь, что не собираюсь быть специалистом по SOAP, но по определенным причинам меня интересуют ее плюсы и минусы, перспективы.
Re[11]: SOA vs REST
От: hattab  
Дата: 25.01.13 18:18
Оценка: +1
Здравствуйте, TYuD, Вы писали:

TYD> Повторюсь, что не собираюсь быть специалистом по SOAP, но по определенным причинам меня интересуют ее плюсы и минусы, перспективы.


Небольшое уточнение: SOAP ≠ SOA. То есть, и SOAP, и REST, и всевозможные RPC — это все SOA.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[14]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.01.13 13:59
Оценка:
Здравствуйте, hattab, Вы писали:

H>Ага. Только тот пример, что ты показал, рестом не является Это некий гибридный вариант реста и рпц. Операции реста ограничены методами хттп, а у тебя операция есть ресурс. Это от попытки натянуть идеологию на задачу.

Ага. В тру-ресте там было бы PUT на адрес конкретной pipe, где состояние = stopped и reason = maintenance.
А список операций бы формировался неявно, триггером на запись в pipe.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[25]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.01.13 14:07
Оценка:
Здравствуйте, Tanker, Вы писали:
T>Ты наверное не в курсе, что wcf data services это рест и не в курсе, что там есть обработка ошибок "искаропки". Загляни на досуге.
T>А вообще скажем кеширование гораздо более важно нежели информация об ошибках.
Не, ну если мы так начнём рассуждать, то в WCF есть и SOAP из коробки, со всеми плюшками типа секурити, WSDL, и прочего.
Ты же предлагал соревноваться в равных условиях, т.е. без готовой инфраструктуры.
Внезапно окажется, что если оставить разработчика один-на-один с вебсервером — ну, например, Apache+PHP, то для среднестатистического сервиса что SOAP, что REST API выставить будет примерно одинаково тяжело.
SOAP потребует чуточку больше приседаний для поддержки "начального набора" (ибо есть стандарты), REST — чуточку больше затрат на проектирование (ибо стандартов нет).

Ещё пять лет назад по имеющейся инфраструктуре SOAP уделывал всех в лоскуты — тупо благодаря чудовищному объёму ресурсов, вваленых в его развитие монстрами рынка (типа Microsoft, IBM, и прочими).

Сейчас, судя по твоим постам, REST уже вырос из состояния "чистой идеи", и обзавёлся прикольными инструментами.
Но если хочется сранивать — тогда в честных условиях, WCF против WCF, или LAMP против LAMP. А не LAMP против WCF.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[28]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.01.13 14:17
Оценка: 12 (1)
Здравствуйте, hattab, Вы писали:


H>Речь не шла о разделении на клиентскую часть и серверную, более того, слова о перформансе
Автор: Tanker
Дата: 16.01.13
вообще мало соотносятся с клиентской частью т.к. она (производительность), по большому счету, определяется стороной сервера.

Она, в частности, определяется структурой выставленного API. В вебе перформанс = кэширование. Надёжность = предсказуемость.
Одно реализуется путём концепции safe methods, второе — idempotent methods.
То, что SOAP простандартил вдоль и поперёк всё, кроме концепции этих метаданных о глаголах, наглядно демонстрирует то, что оба требования не входили в top-10 list у его авторов.
Понятно, что вооружённый пониманием концепции идемпотентности разработчик может придумать свой SOAP сервис чуть более надёжным, чем в среднем.
Но если мы говорим о готовом сервисе, то к нему прикрутить идемпотентность без смены интерфейса невозможно.
Вооружённый концепцией safe methods разработчик может попробовать прикрутить кэширование к SOAP, но это будет либо копец, либо копец-копец в зависимости от того, насколько серьёзную задачу он себе поставит. А в HTTP есть коробочная концепция conditional get и куча механизмов по управлению кэшированием, и всё из этого опционально как для сервера, так и для клиента. У меня есть гарантия, что я могу запустить сервис без единой мысли о кэшировании, и через прикрутить его. При этом мне не придётся судорожно синхронизовывать обновления на клиентах и на серверах.

И все остальные плюшки SOAP я могу заретрофиттить в REST-сервис задним числом, сохраняя 100% обратную совместимость.
Для SOAP такая гибкость остаётся недостижимой мечтой.

И именно в этом — основное преимущество REST-архитектуры.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[30]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.01.13 14:34
Оценка: +1
Здравствуйте, hattab, Вы писали:


H>Нет не АПИ. В АПИ входят соглашения о взаимодействии. Модель вообще не в курсе ни каких соглашений. Если твоя в курсе, значит у тебя проблема с дизайном.

Налицо путаница "внутренней модели" и той моделью, которая показывается на публику. В SOAP вся внешняя сторона модели — это набор методов с некоторыми аргументами. Модель там присутствует неявно; например, из наличия методов OrderInfo GetOrder(GUID orderID) и GUID PlaceOrder(OrderInfo order) можно сделать некоторый вывод о существовании в модели понятия Order, с не очень понятными пока взаимосвязями с другими объектами модели. Конечно же, это не означает, что внутри сервиса всё так и устроено — он может быть тонкой обёрткой над тупой SQL-таблицей.
В REST наружу выставляется модель каких-то ресурсов, с прозрачной иерархией и навигационным доступом. Даже без метаданных мы можем делать некоторые предположения о возможных способах взаимодействия — скажем, из наличия ссылки типа http://domain.tld/service/orders/12312312312312312.xml, по которой мы достали объект ордера, мы можем предположить, что PUT на этот адрес аналогично сформированного XML даст нам возможность подправить ордер. Получив код ошибки мы быстро поймём, что происходит — например, 405 method not allowed сразу скажет нам, что должен быть какой-то другой способ редактировать ордера.
Из общих соглашений мы знаем, что POST на адрес http://domain.tld/service/orders/ должен дать нам разместить новый order и получить его адрес. Получив в ответ 403 forbidden мы поймём, что не всем можно размещать ордера, и так далее.

В общем оказывается, что 95% т.н. RPC в среднестатистическом сервисе — это тупой CRUD. Тогда можно обойтись минимумом соглашений.
Ещё 4% — это CRUD, который приводит к интересным изменениям в других частях системы — типа заплейсив Payment можно внезапно обнаружить изменение статуса связанного Order.
И ещё 1% — это всякие сложные сценарии с поддержкой составных транзакций.

В REST первые 95% проектируются вчетверо быстрее, чем в SOAP, т.к. каждый ресурс, будучи описан, сразу даёт 4 глагола.
Дополнительные метасоглашения, типа GData, позволяют свести ещё заметную часть SOAP-кунсткамеры к одному пункту типа "standard query syntax is also supported".

H>Как бы там ни было, рпц не на много сильнее утилизирует канал.

Для того, чтобы это стало правдой, RPC придётся научить делать partial get и conditional get.

H>И какие же трудности возникнут при реализации клиента рпц руками по сравнению с рест в такой ситуации?

Например, 90% типичного "клиента REST" встроено в браузер, что позволяет веб-страничке напрямую потреблять данные из веб-сервиса.
Для вызовов SOAP лично я JS-библиотек не встречал.


H>И как же клиент поймет, что это ошибка, а главное, в чем её суть, без стандартов на данное действо (статус коды хттп проблему не решают)? Как сможет корректно на нее отреагировать? Или предлагается вываливать xml/json/html юзеру нехай разбирается?

Статус коды — прекрасно решают. Чтобы корректно отреагировать на проблему в первом приближении, достаточно вообще анализировать только первую цифру статуса.
Потому, что "корректных реакций" всего три:
— зафейлить операцию с комментарием "мы пытаемся делать фигню, надо что-то исправить на нашей стороне"
— попробовать повторить операцию с теми же параметрами через некоторое время
— попробовать повторить операцию с теми же параметрами по другому адресу.
Это как раз в SOAP надо каждый раз изобретать заново всю стандартную семантику. Скажем, банальный редирект для балансировки или в связи с переездом сервиса в SOAP недостижим как космос для блохи.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.01.13 14:36
Оценка:
Здравствуйте, IB, Вы писали:

TYD>>И еще он говорил про преимущество кеширования в REST. Предполагаю на уровне HTTP.

IB>Нет там никакого преимущества, у SOAP точно такие же возможности, даже больше. Для SOAP HTTP один из возможных транспортов вместе со всем что этот транспорт предлагает, в том числе и кеширование.
Иван, ты не ткнёш меня носом в кэширование для SOAP? Я что-то не в курсе, каким образом его можно туда прикрутить.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.01.13 14:40
Оценка: +1
Здравствуйте, IB, Вы писали:
H>>В тоже время RPC совсем не означает, что сервис будет выполнен как stateful.
IB>Давай с терминологией разберемся. Формально RPC — это просто передача сообщения другому приложению.
Не соглашусь. RPC — это Remote Procedure Call, т.е. подразумевается стандартная императивная семантика.
Вместе со всеми её недостатками, типа зависимости результата от порядка вызовов, и фокусирования на параметрах собственно "процедуры".
Идея RPC — изолировать программиста от факта удалённости вызова. Т.е. я как бы делаю Procedure Call, а инфраструктура делает его удалённым.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[31]: SOA vs REST
От: hattab  
Дата: 26.01.13 18:14
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> H>Как бы там ни было, рпц не на много сильнее утилизирует канал.


S> Для того, чтобы это стало правдой, RPC придётся научить делать partial get и conditional get.


rpc.get(obj_id, date1, date2); // conditional
rpc.get(obj_id, offset, count); // partial

Все решается на прикладном уровне. Равно как и в REST, за исключением того, что в REST прикладным уровнем является транспортный.

S> H>И какие же трудности возникнут при реализации клиента рпц руками по сравнению с рест в такой ситуации?


S> Например, 90% типичного "клиента REST" встроено в браузер, что позволяет веб-страничке напрямую потреблять данные из веб-сервиса.

S> Для вызовов SOAP лично я JS-библиотек не встречал.

Я не совсем понял почему SOAP, когда я все это время говорил о XML-RPC/JSON-RPC. И для того и для другого есть реализации на JS.

S> H>И как же клиент поймет, что это ошибка, а главное, в чем её суть, без стандартов на данное действо (статус коды хттп проблему не решают)? Как сможет корректно на нее отреагировать? Или предлагается вываливать xml/json/html юзеру нехай разбирается?


S> Статус коды — прекрасно решают. Чтобы корректно отреагировать на проблему в первом приближении, достаточно вообще анализировать только первую цифру статуса.

S> Потому, что "корректных реакций" всего три:
S> — зафейлить операцию с комментарием "мы пытаемся делать фигню, надо что-то исправить на нашей стороне"
S> — попробовать повторить операцию с теми же параметрами через некоторое время
S> — попробовать повторить операцию с теми же параметрами по другому адресу.

Предположим сервис конвертирования картинок. Параметры: картинка, её content-type и content-type результирующей картинки. Результат — конвертированная в указанный тип картинка. В RPC вся работа будет заключаться в вызове единственного метода, и в случае неудачи анализе причины. 1. Неизвестный тип исходной картинки. 2. Неизвестный тип результирующей картинки. 3. Ошибка чтения картинки (как вариант несоответствие картинки указанному типу). В REST, по идее, сервер должен выругаться 415 кодом, а клиент гадать, к какому content-type у сервера претензии.

S> Это как раз в SOAP надо каждый раз изобретать заново всю стандартную семантику. Скажем, банальный редирект для балансировки или в связи с переездом сервиса в SOAP недостижим как космос для блохи.


Я, как и ранее, скажу за XML-RPC. Так вот, клиенту XML-RPC ничто не мешает (и даже вменяется в обязанность) реагировать на статус коды транспорта соответствующим образом.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[9]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 27.01.13 08:07
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Не соглашусь. RPC — это Remote Procedure Call, т.е. подразумевается стандартная императивная семантика.

S>Вместе со всеми её недостатками, типа зависимости результата от порядка вызовов, и фокусирования на параметрах собственно "процедуры".
S>Идея RPC — изолировать программиста от факта удалённости вызова. Т.е. я как бы делаю Procedure Call, а инфраструктура делает его удалённым.
Совершенно верно, это то как это обычно понимают, о чем я уже и писал. Но _формально_ это просто передача данных удаленному методу.
Мы уже победили, просто это еще не так заметно...
Re[11]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 27.01.13 08:36
Оценка:
Здравствуйте, hattab, Вы писали:

H>Ну как же не существует,

Вот так и не существует. Нету формального определения объекта in programming term.

H>Object in programming term это те самые объекты из ООП. Понятнее некуда, кмк.

Так в ООП или в programming term? можешь еще, кстати, определение ООП попробовать найти, тоже много забавного.
Еще раз, сказать "object in programming term" — это значит ни сказать ничего, так как в programming term под object-ом каждый понимает свое в зависимости от контекста. Формальное определение отсутствует.

H>Вот-вот. Stateful в полный рост

Ты хорошо понимаешь значение слова stateful? В этом случае и REST stateful, так как буковка S в этой аббревиатуре означает state.
На всякий случай, под stateful понимает сохранение состояния между вызовами, а не передача состояния удаленной стороны.
Вот тебе идеология SOAP из того же документа: "SOAP is fundamentally a stateless, one-way message exchange paradigm"

К слову об идеологической общности SOAP (... the state of some resource) REST (Representation State Transfer) — найдите десять отличий.

Как я уже говорил, разница лишь в том, что вокруг SOAP навернули дофига готовых Фреймворков разной степени совместимости, а REST, по факту, лишь набор весьма условных соглашений, по которым каждый должен все выпиливать в ручную.

H>Конечно правда.

Ну, я не в состоянии помешать тебе пребывать в этом заблуждении )

H>Альтернативы всемогущности SOAP? А кому она нужна?

Причем тут всемогущность? SOAP на отлично решает вполне конкретные прикладные задачи. Их класс не на столько широк, как изначально было задумано, но тем не менее, альтернативой SOAP-у в этих сценариях, является изнурительное ручное выпиливание с неизвестным результатом. Выбор очевиден.
Мы уже победили, просто это еще не так заметно...
Re[9]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 27.01.13 08:49
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Иван, ты не ткнёш меня носом в кэширование для SOAP? Я что-то не в курсе, каким образом его можно туда прикрутить.

Вот отличная статья, прекрасно подтвержающая твою точку зрения:
http://weblogs.asp.net/cibrax/archive/2011/05/18/caching-strategies-for-soap-and-rest-services.aspx
=))
Мы уже победили, просто это еще не так заметно...
Re[12]: SOA vs REST
От: hattab  
Дата: 27.01.13 09:10
Оценка:
Здравствуйте, IB, Вы писали:

IB> Вот так и не существует. Нету формального определения объекта in programming term.


IB> H>Object in programming term это те самые объекты из ООП. Понятнее некуда, кмк.


IB> Так в ООП или в programming term? можешь еще, кстати, определение ООП попробовать найти, тоже много забавного.

IB> Еще раз, сказать "object in programming term" — это значит ни сказать ничего, так как в programming term под object-ом каждый понимает свое в зависимости от контекста. Формальное определение отсутствует.

Еще как существует

IB> H>Вот-вот. Stateful в полный рост


IB> Ты хорошо понимаешь значение слова stateful? В этом случае и REST stateful, так как буковка S в этой аббревиатуре означает state.

IB> На всякий случай, под stateful понимает сохранение состояния между вызовами, а не передача состояния удаленной стороны.

Именно так и понимаю.

IB> Вот тебе идеология SOAP из того же документа: "SOAP is fundamentally a stateless, one-way message exchange paradigm"


А дальше, что не цитируешь:

but applications can create more complex interaction patterns (e.g., request/response, request/multiple responses, etc.) by combining such one-way exchanges with features provided by an underlying protocol and/or application-specific information. SOAP is silent on the semantics of any application-specific data it conveys, as it is on issues such as the routing of SOAP messages, reliable data transfer, firewall traversal, etc. However, SOAP provides the framework by which application-specific information may be conveyed in an extensible manner. Also, SOAP provides a full description of the required actions taken by a SOAP node on receiving a SOAP message.


IB> Как я уже говорил, разница лишь в том, что вокруг SOAP навернули дофига готовых Фреймворков разной степени совместимости, а REST, по факту, лишь набор весьма условных соглашений, по которым каждый должен все выпиливать в ручную.


Так ты хочешь говорить о таком примитиве, как обмен сообщениями, и только его называть SOAP? Я предпочитаю говорить о SOAP, в той мере, в которой говорит о нем спецификация.

IB> H>Конечно правда.


IB> Ну, я не в состоянии помешать тебе пребывать в этом заблуждении )


Когда клиент и сервер оба работающие, вроде бы, по SOAP, не могут договориться, это не заблуждение. Это суровая реальность.

IB> H>Альтернативы всемогущности SOAP? А кому она нужна?


IB> Причем тут всемогущность? SOAP на отлично решает вполне конкретные прикладные задачи. Их класс не на столько широк, как изначально было задумано, но тем не менее, альтернативой SOAP-у в этих сценариях, является изнурительное ручное выпиливание с неизвестным результатом. Выбор очевиден.


Вполне конкретные прикладные задачи на отлично решаются и другими, более специализированными, средствами Зачем нужно связываться с монстром с многотонной спецификацией...
avalon 1.0rc3 build 432, zlib 1.2.5
Re[13]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 27.01.13 10:11
Оценка: +1
Здравствуйте, hattab, Вы писали:

H>Еще как существует

Ага, и еще сотня точно таких же, но других. В каждой книжке дается свое собственное уникальное определение объекта и ООП. Так что нет — никак не существует.
Особенно там хорош пассаж про объект в ООП...

H>Именно так и понимаю.

что-то не похоже, иначе бы к state в определении не примотался.

H>А дальше, что не цитируешь:

А дальше и не надо. Если внимательно прочтешь, то что сам же и процитировал, то увидишь, что там речь идет не про идеологию SOAP, а про то, что дальше _приложения_ могут с этим делать. Ровно то же самое они могут и с REST, было бы желание.

H>Так ты хочешь говорить о таком примитиве, как обмен сообщениями, и только его называть SOAP? Я предпочитаю говорить о SOAP, в той мере, в которой говорит о нем спецификация.

Спецификация только об обмене сообщениями и говорит.

H>Когда клиент и сервер оба работающие, вроде бы, по SOAP, не могут договориться, это не заблуждение. Это суровая реальность.

Ты сам-то это видел или только на википедии вычитал? Еще раз — SOAP очень грамотно порезан за части. Начальные уровни — прекрасно между собой совместимы, как правило в реальной жизни этого достаточно.

H>Вполне конкретные прикладные задачи на отлично решаются и другими, более специализированными, средствами

Не решаются. Как я уже говорил, единственное специализированное средство — фигурная резьба зубочисткой по коду.

H> Зачем нужно связываться с монстром с многотонной спецификацией...

Затем что ты берешь готовый Фреймворк и у тебя вообще не болит голова ни о какой спецификации, равно как и о тоннах низкоуровневых ошибок, которые уже давно решены.
Мы уже победили, просто это еще не так заметно...
Re[32]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.01.13 15:37
Оценка:
Здравствуйте, hattab, Вы писали:

H>rpc.get(obj_id, date1, date2); // conditional

H>rpc.get(obj_id, offset, count); // partial
О, как интересно. И что, неужели у меня промежуточный HTTP-прокси поймёт такой запрос и внезапно вернёт результат без обращения к серверу, из своего локального кэша?
А можно мне теперь совместить оба сразу?
Ок, я так и думал — в RPC вы получаете четыре метода там, где я имел один.
Теперь можно садиться за проектирование механизма согласования уровней реализации между клиентом и сервером — чтобы клиент мог определить, что из этих опциональных методов поддерживается данным сервером, а что — нет.
H>Я не совсем понял почему SOAP, когда я все это время говорил о XML-RPC/JSON-RPC. И для того и для другого есть реализации на JS.
А, ну для XML-RPC да. Но там мы сразу теряем все инфраструктурные плюшки SOAP, получая сочетание всех недостатков RPC и REST.

H>Предположим сервис конвертирования картинок. Параметры: картинка, её content-type и content-type результирующей картинки. Результат — конвертированная в указанный тип картинка. В RPC вся работа будет заключаться в вызове единственного метода, и в случае неудачи анализе причины. 1. Неизвестный тип исходной картинки. 2. Неизвестный тип результирующей картинки. 3. Ошибка чтения картинки (как вариант несоответствие картинки указанному типу). В REST, по идее, сервер должен выругаться 415 кодом, а клиент гадать, к какому content-type у сервера претензии.

В REST, по идее, 415 код означает, что не поддерживается тип, переданный в request. Если не поддерживается запрошенный тип результирующей картинки, то нужно возвращать 406. Ну, а "ошибка чтения" — это по любому 400 Bad Request.
Я надеюсь, то, что упомянутые параметры будут передаваться в хидерах Content-Type и Accept, дополнительно пояснять не нужно?

H>Я, как и ранее, скажу за XML-RPC. Так вот, клиенту XML-RPC ничто не мешает (и даже вменяется в обязанность) реагировать на статус коды транспорта соответствующим образом.

Ну, ещё немного, и мы получим из вашего XML-RPC полноценный REST. Чо уж там — если статус коды стали поддерживать, то надо идти
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.01.13 16:06
Оценка:
Здравствуйте, IB, Вы писали:
IB>Как RPC можно использовать все что угодно (пытаться) с разной степенью успешности, в том числе и REST. Другое дело, что идеологически SOAP никогда не предполагалось использовать в качестве RPC и никогда под такие сценарии он не затачивался.
Извини, но я не могу с этим согласиться. Спецификация SOAP 1.1 явно пишет:

One of the design goals of SOAP is to encapsulate and exchange RPC calls using the extensibility and flexibility of XML

Это в 1.2 было решено порвать с позорным прошлым, и сделать вид, что RPC тут ни при чём. Но, как известно, текилу легко выпустить из бутылки, загнать её обратно — вот это проблема.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: SOA vs REST
От: IB Австрия http://rsdn.ru
Дата: 27.01.13 18:08
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Извини, но я не могу с этим согласиться. Спецификация SOAP 1.1 явно пишет:

А спецификация 1.0? Я как бы исхожу из здравого предположения, что "SOAP is fundamentally a stateless, one-way message exchange paradigm...", как гласит нам все та же спецификация.
Мы уже победили, просто это еще не так заметно...
Re[12]: SOA vs REST
От: TYuD  
Дата: 27.01.13 18:54
Оценка:
Здравствуйте, hattab, Вы писали:

H>Небольшое уточнение: SOAP ≠ SOA. То есть, и SOAP, и REST, и всевозможные RPC — это все SOA.


Да. Мы это уже уточнили выше.
Re[14]: SOA vs REST
От: hattab  
Дата: 27.01.13 19:55
Оценка:
Здравствуйте, IB, Вы писали:

IB> H>Еще как существует


IB> Ага, и еще сотня точно таких же, но других. В каждой книжке дается свое собственное уникальное определение объекта и ООП. Так что нет — никак не существует.

IB> Особенно там хорош пассаж про объект в ООП...

Важна-то суть. Объект есть набор данных и объединенных с ними методов обработки. Все. Большего и не нужно. У SOAP в Design goals что написано?

A major design goal for SOAP is simplicity and extensibility. This means that there are several features from traditional messaging systems and distributed object systems that are not part of the core SOAP specification. Such features include
Distributed garbage collection
Boxcarring or batching of messages
Objects-by-reference (which requires distributed garbage collection)
Activation (which requires objects-by-reference)


Отличная демонстрация наличия stateful механики

IB> H>Именно так и понимаю.


IB> что-то не похоже, иначе бы к state в определении не примотался.


А ты бы почитал о каком state я говорил. Еще раз обращаю твое внимание на design goals, где значатся objects by reference.

IB> H>А дальше, что не цитируешь:


IB> А дальше и не надо. Если внимательно прочтешь, то что сам же и процитировал, то увидишь, что там речь идет не про идеологию SOAP, а про то, что дальше _приложения_ могут с этим делать. Ровно то же самое они могут и с REST, было бы желание.


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

IB> H>Так ты хочешь говорить о таком примитиве, как обмен сообщениями, и только его называть SOAP? Я предпочитаю говорить о SOAP, в той мере, в которой говорит о нем спецификация.


IB> Спецификация только об обмене сообщениями и говорит.


Все можно назвать обменом сообщениями, но важно за деревьями видеть лес. Спека говорит и об RPC, и о сервисах обработки сообщений и многом другом.

IB> H>Когда клиент и сервер оба работающие, вроде бы, по SOAP, не могут договориться, это не заблуждение. Это суровая реальность.


IB> Ты сам-то это видел или только на википедии вычитал? Еще раз — SOAP очень грамотно порезан за части. Начальные уровни — прекрасно между собой совместимы, как правило в реальной жизни этого достаточно.


Я, слава Яхве, очень мало работал с SOAP, буквально пару раз. Но в интернете полно обсуждений несовместимости SOAP, а дыма без огня не бывает. Навскидку мнение1, мнение2. 1С vs. Java Даже тут на сайте были вопросы по совместимости SOAP
Автор:
Дата: 08.11.10


IB> H>Вполне конкретные прикладные задачи на отлично решаются и другими, более специализированными, средствами


IB> Не решаются. Как я уже говорил, единственное специализированное средство — фигурная резьба зубочисткой по коду.


Ох, ё... Серебрянная пуля наконец-то отлита

IB> H> Зачем нужно связываться с монстром с многотонной спецификацией...


IB> Затем что ты берешь готовый Фреймворк и у тебя вообще не болит голова ни о какой спецификации, равно как и о тоннах низкоуровневых ошибок, которые уже давно решены.


Ага, до первого рифа Да и вообще, ты так говоришь, будто ни для чего другого, окромя SOAP, фреймвоков и тулкитов не существует
avalon 1.0rc3 build 432, zlib 1.2.5
Re[33]: SOA vs REST
От: hattab  
Дата: 27.01.13 19:55
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> H>rpc.get(obj_id, date1, date2); // conditional

S> H>rpc.get(obj_id, offset, count); // partial

S> О, как интересно. И что, неужели у меня промежуточный HTTP-прокси поймёт такой запрос и внезапно вернёт результат без обращения к серверу, из своего локального кэша?


Нет конечно, как и не будет проблем с чрезмерно активно кеширующим прокси. Да-да, не в идеальном мире живем.

S> А можно мне теперь совместить оба сразу?


Конечно можно. Если это вообще требуется в решаемой задаче

S> Ок, я так и думал — в RPC вы получаете четыре метода там, где я имел один.

S> Теперь можно садиться за проектирование механизма согласования уровней реализации между клиентом и сервером — чтобы клиент мог определить, что из этих опциональных методов поддерживается данным сервером, а что — нет.

Отчего-же опциональных? Внешний интерфейс он есть штука целостная (на то он и интерфейс, контракт т.е.), как спроектировал так и будет.

S> H>Я не совсем понял почему SOAP, когда я все это время говорил о XML-RPC/JSON-RPC. И для того и для другого есть реализации на JS.


S> А, ну для XML-RPC да. Но там мы сразу теряем все инфраструктурные плюшки SOAP, получая сочетание всех недостатков RPC и REST.


Какие это плюшки мы теряем? У XML-RPC есть интроспекция, вполне себе аналог WSDL. А тулкиты умели генерировать код еще в бородатых девяностых. Другое дело, что интроспекция не является частью протокола, а реализуется по желанию, как один из сервисов. Но она вполне себе стандартизирована сообществом, что важнее стандартизации неким комитетом.

S> H>Предположим сервис конвертирования картинок. Параметры: картинка, её content-type и content-type результирующей картинки. Результат — конвертированная в указанный тип картинка. В RPC вся работа будет заключаться в вызове единственного метода, и в случае неудачи анализе причины. 1. Неизвестный тип исходной картинки. 2. Неизвестный тип результирующей картинки. 3. Ошибка чтения картинки (как вариант несоответствие картинки указанному типу). В REST, по идее, сервер должен выругаться 415 кодом, а клиент гадать, к какому content-type у сервера претензии.


S> В REST, по идее, 415 код означает, что не поддерживается тип, переданный в request. Если не поддерживается запрошенный тип результирующей картинки, то нужно возвращать 406. Ну, а "ошибка чтения" — это по любому 400 Bad Request.

S> Я надеюсь, то, что упомянутые параметры будут передаваться в хидерах Content-Type и Accept, дополнительно пояснять не нужно?

Отлично я подмастил с медиа-типами Ну да ладно. Усложним задачу. Сервер предъявляет к картинке следующие требования: она не должна быть больше 800x600 и не должна быть монохромной. Какие коды ошибок будут для каждого из этих случаев. И кстати, 400 Bad Request совсем не однозначен. Как знать, может я там с синтаксисом запроса ошибся, а не с форматом параметра

S> H>Я, как и ранее, скажу за XML-RPC. Так вот, клиенту XML-RPC ничто не мешает (и даже вменяется в обязанность) реагировать на статус коды транспорта соответствующим образом.


S> Ну, ещё немного, и мы получим из вашего XML-RPC полноценный REST. Чо уж там — если статус коды стали поддерживать, то надо идти


Стали? Да они поддерживаются изначально
avalon 1.0rc3 build 432, zlib 1.2.5
Re[14]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.01.13 04:10
Оценка: 3 (1)
Здравствуйте, IB, Вы писали:

H>>Именно так и понимаю.

IB>что-то не похоже, иначе бы к state в определении не примотался.
Не, давайте раскроем карты и поймём, о каком state идёт речь.
С моей точки зрения, настоящие stateless — сервисы в жизни практически не встречаются. Ну, вот по соседству приводился пример "сервиса конверсии картинок" — в нём, вроде бы, state отсутствует, т.к. всё необходимое для конверсии приезжает в самом реквесте.
Интуитивно понятно, что во-первых, это синтетический пример, а во-вторых, такие примеры в реальных приложениях встречаются редко.
Грубо говоря — потому, что в таком случае проще скачать код конвертера картинок локально, и избегать дорогого взаимодействия по сети.

Мой поинт — в том, что в первом приближении stateless-сервисами можно пренебречь, и рассматривать только те сервисы, в которых присутствует некое состояние.

Вопрос — в том, какая модель взаимодействия лучше описывает эти особенности.
Исторически, RPC как концепция появился в попытках изолировать программиста от подробностей распределённой природы приложения, эмулируя знакомые ему термины — вызов, возврат результата, исключение.
При этом основное, что пытается получить RPC — инкапсуляция. Типа, благодаря чернокоробочности сервера мы можем легко подменять реализацию, а также писать клиентов, способных работать с широким набором серверов.

Вопросы надёжности и производительности, неизбежно возникающие из-за распределённости, не поднимаются вообще.
И зря.

Концепция REST состоит в признании того факта, что у нас есть состояние, и оно распределено — т.е. манипуляции этим состоянием дороги и ненадёжны.

Из этой концепции проистекают два основных вывода:
1. Для обеспечения высокой производительности нам важно уметь динамически перераспределять или реплицировать состояние. То есть, вместо обязательного раундтрипа до Самого Главного Сервера мы можем обойтись обращением к посреднику; при этом посредник по-прежнему ничего не знает о подробностях реализации сервера.
2. Для обеспечения надёжности нам нужно уметь выражать намерения в манипуляции состоянием. Не в виде вызова blackbox — процедур, которые непредсказуемым образом меняют состояние, а в виде "я хочу получить вот такое целевое состояние". Принципиальная разница — в том, что мы решаем "проблему двух генералов", хотя и вероятностным способом. Если я получил таймаут, то в случае как RPC, так и REST я не знаю, в каком состоянии оказалась моя система. (Именно это незнание кардинально отличает сетевые приложения от локальных — "дома" у меня гарантирован либо успех, либо исключение, и основное внимание уделяется сохранению инвариантов при вылете исключений). Различия между REST и RPC начинаются при "втором" вызове — в RPC мне страшно делать второй вызов, т.к. его результат зависит от состояния, а я его теперь не знаю. В REST методы манипуляции идемпотентны, поэтому я могу спокойно долбить одно и то же, пока не получу один из двух результатов — "успех" либо "неудача". В обоих случаях целостность распределённого состояния автоматически восстанавливается: моё локальное представление о том, что там сейчас делается на сервере, становится корректным.

А то, что SOAP декларируется как stateless, никакого отношения к надёжности или производительности не имеет.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.01.13 04:17
Оценка:
Здравствуйте, IB, Вы писали:
IB>А спецификация 1.0? Я как бы исхожу из здравого предположения, что "SOAP is fundamentally a stateless, one-way message exchange paradigm...", как гласит нам все та же спецификация.
А её не было никогда. То, что в народе называют "1.0" — это 1.1. Её писала Майкрософт — Дон Бокс и прочие хорошо известные нам люди.
А SOAP 2 — это 1.2, разработанная, вроде бы, w3c (и угробищная, как практически всё из этой шарашки).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[34]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.01.13 04:23
Оценка:
Здравствуйте, hattab, Вы писали:

H>Нет конечно, как и не будет проблем с чрезмерно активно кеширующим прокси. Да-да, не в идеальном мире живем.

Мы — в идеальном. Проблемы от "чрезмерно активных" прокси обычно возникают у тех, кто плохо читает спецификацию и втыкает хидеры от балды.
Зато возможность поднять производительность сервера в десяток раз путём тупого втыкания перед ним nginx или ISA в режиме reverse proxy для RPC отсутствует как класс.

H>Отчего-же опциональных? Внешний интерфейс он есть штука целостная (на то он и интерфейс, контракт т.е.), как спроектировал так и будет.

Оттого опциональных, что я не хочу обязывать клиента быть cache-aware. Я хочу иметь низкий порог вхождения, чтобы конформную реализацию что клиента, что сервера было сделать легко и дёшево.

H>Какие это плюшки мы теряем? У XML-RPC есть интроспекция, вполне себе аналог WSDL. А тулкиты умели генерировать код еще в бородатых девяностых.

С учётом отсутствия стандарта на XML-RPC, я не понимаю о каких тулкитах идёт речь.
Для SOAP наработан огромный стек технологий.

H>Отлично я подмастил с медиа-типами Ну да ладно. Усложним задачу. Сервер предъявляет к картинке следующие требования: она не должна быть больше 800x600 и не должна быть монохромной. Какие коды ошибок будут для каждого из этих случаев. И кстати, 400 Bad Request совсем не однозначен. Как знать, может я там с синтаксисом запроса ошибся, а не с форматом параметра

Заранее предупреждаю: чем сильнее мы будем усложнять задачу, тем сильнее будет сосать RPC.
В данном конкретном примере я спрошу внезапно: а какую логику обработки ошибок вы хотите реализовать в клиенте вашего протокола?

H>Стали? Да они поддерживаются изначально

Беседа становится интересной — давайте поскипаем побочные ветки, и сосредоточимся на примерах, где наглядно увидим всю убогость RPC по сравнению с современными подходами.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[35]: SOA vs REST
От: hattab  
Дата: 28.01.13 06:40
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> H>Нет конечно, как и не будет проблем с чрезмерно активно кеширующим прокси. Да-да, не в идеальном мире живем.


S> Мы — в идеальном. Проблемы от "чрезмерно активных" прокси обычно возникают у тех, кто плохо читает спецификацию и втыкает хидеры от балды.


Вот потому и не в идеальном. Не так давно пришлось ручками сбрасывать проксёвый кеш для пары сайтов (rutracker.ru, nix.ru), потому как работать перестали начисто (первый не давал скачать торренты + не работал поиск, второй не отображал позиции прайса)

S> Зато возможность поднять производительность сервера в десяток раз путём тупого втыкания перед ним nginx или ISA в режиме reverse proxy для RPC отсутствует как класс.


Вообще-то не отсутствует. Можно реализовать специализированный прокси.

S> H>Отчего-же опциональных? Внешний интерфейс он есть штука целостная (на то он и интерфейс, контракт т.е.), как спроектировал так и будет.


S> Оттого опциональных, что я не хочу обязывать клиента быть cache-aware. Я хочу иметь низкий порог вхождения, чтобы конформную реализацию что клиента, что сервера было сделать легко и дёшево.


У нас есть контракт и всякий решивший его реализовать должен делать это в полной мере. Впрочем, это не лишает возможности клиента дергать методы без опциональных параметров. Даже больше того, реализовать опциональные методы конечно же можно, а клиент может проверять их наличие методами интроспекции (таким как system.listMethods). Правда ни к чему кроме путаницы это не приведет, проще работать с целостным контрактом.

S> С учётом отсутствия стандарта на XML-RPC, я не понимаю о каких тулкитах идёт речь.

S> Для SOAP наработан огромный стек технологий.

У XML-RPC есть официальная спецификация. Так же есть выработанная сообществом спецификация на интерфейс интроспекции. Все нормальные тулкиты её поддерживают.

S> H>Отлично я подмастил с медиа-типами Ну да ладно. Усложним задачу. Сервер предъявляет к картинке следующие требования: она не должна быть больше 800x600 и не должна быть монохромной. Какие коды ошибок будут для каждого из этих случаев. И кстати, 400 Bad Request совсем не однозначен. Как знать, может я там с синтаксисом запроса ошибся, а не с форматом параметра


S> Заранее предупреждаю: чем сильнее мы будем усложнять задачу, тем сильнее будет сосать RPC.

S> В данном конкретном примере я спрошу внезапно: а какую логику обработки ошибок вы хотите реализовать в клиенте вашего протокола?

Хотя бы просто внятно объяснить юзеру чем именно серверу не нравится картинка. В протоколах предусматривающих специальный формат сообщения об ошибке это не проблема, т.к. такие сообщения автоматически конвертируются на клиенте в исключительные ситуации.

S> H>Стали? Да они поддерживаются изначально


S> Беседа становится интересной — давайте поскипаем побочные ветки, и сосредоточимся на примерах, где наглядно увидим всю убогость RPC по сравнению с современными подходами.


Ага, я тебе сразу напомню ветку, где ты предлагал пихать в URI фрагмент мелодии в base64
avalon 1.0rc3 build 432, zlib 1.2.5
Re[36]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.01.13 08:11
Оценка:
Здравствуйте, hattab, Вы писали:
H>Вот потому и не в идеальном. Не так давно пришлось ручками сбрасывать проксёвый кеш для пары сайтов (rutracker.ru, nix.ru), потому как работать перестали начисто (первый не давал скачать торренты + не работал поиск, второй не отображал позиции прайса)
А вы уверены, что тут виноват прокси, а не сервер, который, скажем, забыл отдать content-length, из-за чего прокси при обрыве закачки результата с 200 Ok решил, что всё в порядке, и закешировал респонс?
Поймите, что видов прокси-серверов — единицы. Они вылизаны так, как вашему апп-серверу не приснится и во влажном сне.

H>Вообще-то не отсутствует. Можно реализовать специализированный прокси.

Знаете, я буду считать, что отсутствует. Во-первых, реализация "специализированного прокси" удвоит стоимость вашего проекта на ровном месте. Потому что строчек в нём будет примерно столько же, сколько и в вашем основном сервисе.
Во-вторых, вам придётся постоянно заниматься синхронизацией апдейтов — потому что вам придётся аккуратно декорировать каждый метод, и несоответствие версий прокси и аппсервера сломает всю систему. В третьих, сделать так, чтобы ваш "специализированный прокси" не тормозил, а ускорял работу — это ещё одно довольно-таки интересное упражнение. Вы в курсе, как внутри устроен nginx? Уверены, что сможете сделать так же?
В четвёртых, в HTTP проксей может быть сколько угодно. Помимо reverse proxy на серверной стороне, у нас может стоять локальный прокси у кого-то из крупных клиентов, что обеспечивает консолидацию трафика и рост производительности. В вашем случае вы вряд ли продадите ваш "консолидированный прокси" для установки на стороне клиента, особенно с учётом "во-вторых".
В-пятых, один из частоиспользуемых "прокси" — это локальный кэш браузера. Ваше решение гарантирует его неиспользование — а тем временем, его hit ratio может быть очень большим. Так что если мы говорим о веб-приложении, т.е. о коде исполняемом внутри браузера, то XML-RPC мало что может предложить, даже при условии написания этого вашего гипотетического "специализированного прокси".

H>У нас есть контракт и всякий решивший его реализовать должен делать это в полной мере. Впрочем, это не лишает возможности клиента дергать методы без опциональных параметров. Даже больше того, реализовать опциональные методы конечно же можно, а клиент может проверять их наличие методами интроспекции (таким как system.listMethods). Правда ни к чему кроме путаницы это не приведет, проще работать с целостным контрактом.

Это в вашем "неидеальном мире" это не приводит ни к чему, кроме путаницы и навязанных "должен делать это в полной мере".
В идеальном мире REST я могу реализовать сервис вообще без учёта кэширования, анонсировав его наличие у клиентов.
(Кстати, внутрибраузерные клиенты и прокси-сервера автоматически выполняют conditional get при соблюдении простых условий.)
А потом, посмотрев на статистику, могу прикрутить кэширование в конкретных узких местах — с сохранением backward и forward совместимости. И мои клиенты — те, что поумнее, автоматически подхватят эти изменения.
Вы же с вашим XML-RPC вынуждены с самого начала тратить ресурсы на предсказание узких мест и реализацию методов кэширования, которые могут никогда не понадобиться.

H>У XML-RPC есть официальная спецификация. Так же есть выработанная сообществом спецификация на интерфейс интроспекции. Все нормальные тулкиты её поддерживают.

Например? У меня уже есть в Visual Studio кнопочка "заимпортировать определение XML-RPC сервиса", которая создаст мне клиентскую часть соединения, зарегистрирует классы DTO и контракты сервисов?


H>Хотя бы просто внятно объяснить юзеру чем именно серверу не нравится картинка. В протоколах предусматривающих специальный формат сообщения об ошибке это не проблема, т.к. такие сообщения автоматически конвертируются на клиенте в исключительные ситуации.

Отлично. В REST из коробки есть возможность передавать тело сообщения вместе с не-200 статус кодами. Я просто в дополнение к 400 Bad Request отправляю тело, в котором на нужном языке написано, чем именно серверу не нравится картинка.
Клиент показывает это пользователю, все довольны. Никаких специальных форматов сообщения об ошибке, автоматической конвертации на клиенте в исключения, и обратной конвертации в текст тут не надо. Не занимайтесь овердизайном

H>Ага, я тебе сразу напомню ветку, где ты предлагал пихать в URI фрагмент мелодии в base64

И это, кстати, вовсе не такой плохой вариант, как хочется представить. В том смысле, что когда мы начнём предъявлять требования к масштабированию или надёжности, внезапно может оказаться, что это решение выиграет у кондового RPC.
Ну и если будут причины, то можно и обойтись без дружественности к кэшированию и прочих плюшек, не выходя за пределы REST — он же не запрещает делать POST вместо GET. REST просто объясняет, почему это неэффективно.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[15]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.01.13 08:16
Оценка: +1
Здравствуйте, hattab, Вы писали:

H>Важна-то суть. Объект есть набор данных и объединенных с ними методов обработки. Все. Большего и не нужно. У SOAP в Design goals что написано?

H>

A major design goal for SOAP is simplicity and extensibility. This means that there are several features from traditional messaging systems and distributed object systems that are not part of the core SOAP specification. Such features include
H>Distributed garbage collection
H>Boxcarring or batching of messages
H>Objects-by-reference (which requires distributed garbage collection)
H>Activation (which requires objects-by-reference)


H>Отличная демонстрация наличия stateful механики

Вообще-то это демонстрация техники невнимательного чтения.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[37]: SOA vs REST
От: hattab  
Дата: 28.01.13 10:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> H>Вот потому и не в идеальном. Не так давно пришлось ручками сбрасывать проксёвый кеш для пары сайтов (rutracker.ru, nix.ru), потому как работать перестали начисто (первый не давал скачать торренты + не работал поиск, второй не отображал позиции прайса)


S> А вы уверены, что тут виноват прокси, а не сервер, который, скажем, забыл отдать content-length, из-за чего прокси при обрыве закачки результата с 200 Ok решил, что всё в порядке, и закешировал респонс?


Я не в курсе, кто там был виноват, но факт остается фактом. Проблемы с кешированием это не сказочные мифы, а вполне себе суровая реальность. И хорошо еще если такая проблема очевидна (ломает приложение), а если гадит втихую...

S> Поймите, что видов прокси-серверов — единицы. Они вылизаны так, как вашему апп-серверу не приснится и во влажном сне.


Ну-да, ну-да... И пишут их не люди, а эльфы. Еще пример траблы с кешированием, уже не проксёй. Лично у меня, была проблема с кешированием в IE, когда эта сука единожды получив .cab с активиксом ни в какую не хотела качать его новую версию (несмотря на то, что все условия для обновления выполнялись, в *.inf все было прописано правильно). Мне тогда было совсем не весело.

S> Знаете, я буду считать, что отсутствует. Во-первых, реализация "специализированного прокси" удвоит стоимость вашего проекта на ровном месте. Потому что строчек в нём будет примерно столько же, сколько и в вашем основном сервисе.

S> Во-вторых, вам придётся постоянно заниматься синхронизацией апдейтов — потому что вам придётся аккуратно декорировать каждый метод, и несоответствие версий прокси и аппсервера сломает всю систему. В третьих, сделать так, чтобы ваш "специализированный прокси" не тормозил, а ускорял работу — это ещё одно довольно-таки интересное упражнение. Вы в курсе, как внутри устроен nginx? Уверены, что сможете сделать так же?
S> В четвёртых, в HTTP проксей может быть сколько угодно. Помимо reverse proxy на серверной стороне, у нас может стоять локальный прокси у кого-то из крупных клиентов, что обеспечивает консолидацию трафика и рост производительности. В вашем случае вы вряд ли продадите ваш "консолидированный прокси" для установки на стороне клиента, особенно с учётом "во-вторых".
S> В-пятых, один из частоиспользуемых "прокси" — это локальный кэш браузера. Ваше решение гарантирует его неиспользование — а тем временем, его hit ratio может быть очень большим. Так что если мы говорим о веб-приложении, т.е. о коде исполняемом внутри браузера, то XML-RPC мало что может предложить, даже при условии написания этого вашего гипотетического "специализированного прокси".

А почему мы должны говорить о приложении внутри браузера (Flex морду я внутрибраузерной прилагой не считаю)? У меня таких приложений нет вообще, везде используем десктопных клиентов, и что-то проблем с RPC не отгребали ни разу Специализированный прокси разработать ничуть не сложно, и ни какой синхронизации с сервисом делать не нужно т.к. ему достаточно уметь обрабатывать несколько "специальных" методов, а для остальных работать в режиме моста. И это при условии, что оно вообще когда нибудь понадобится.

S> H>У нас есть контракт и всякий решивший его реализовать должен делать это в полной мере. Впрочем, это не лишает возможности клиента дергать методы без опциональных параметров. Даже больше того, реализовать опциональные методы конечно же можно, а клиент может проверять их наличие методами интроспекции (таким как system.listMethods). Правда ни к чему кроме путаницы это не приведет, проще работать с целостным контрактом.


S> Это в вашем "неидеальном мире" это не приводит ни к чему, кроме путаницы и навязанных "должен делать это в полной мере".

S> В идеальном мире REST я могу реализовать сервис вообще без учёта кэширования, анонсировав его наличие у клиентов.
S> (Кстати, внутрибраузерные клиенты и прокси-сервера автоматически выполняют conditional get при соблюдении простых условий.)
S> А потом, посмотрев на статистику, могу прикрутить кэширование в конкретных узких местах — с сохранением backward и forward совместимости. И мои клиенты — те, что поумнее, автоматически подхватят эти изменения.
S> Вы же с вашим XML-RPC вынуждены с самого начала тратить ресурсы на предсказание узких мест и реализацию методов кэширования, которые могут никогда не понадобиться.

Ну да, мы прежде предпочитаем проектировать, а потом уже код писать

S> H>У XML-RPC есть официальная спецификация. Так же есть выработанная сообществом спецификация на интерфейс интроспекции. Все нормальные тулкиты её поддерживают.


S> Например? У меня уже есть в Visual Studio кнопочка "заимпортировать определение XML-RPC сервиса", которая создаст мне клиентскую часть соединения, зарегистрирует классы DTO и контракты сервисов?


Не знаю на счет студии (хотя для дотнета есть неплохая библиотека xml-rpc.net с генерацией прокси-классов для xml-rpc сервисов), но, например, сишный тулкит xml-rpc.c имеет утиль для формирования с-апи по сигнатурам xml-rpc методов.

S> H>Хотя бы просто внятно объяснить юзеру чем именно серверу не нравится картинка. В протоколах предусматривающих специальный формат сообщения об ошибке это не проблема, т.к. такие сообщения автоматически конвертируются на клиенте в исключительные ситуации.


S> Отлично. В REST из коробки есть возможность передавать тело сообщения вместе с не-200 статус кодами. Я просто в дополнение к 400 Bad Request отправляю тело, в котором на нужном языке написано, чем именно серверу не нравится картинка.

S> Клиент показывает это пользователю, все довольны. Никаких специальных форматов сообщения об ошибке, автоматической конвертации на клиенте в исключения, и обратной конвертации в текст тут не надо. Не занимайтесь овердизайном

Но если на ошибку нужно реагировать приложению... то как я и говорил
Автор: hattab
Дата: 17.01.13
, задача сообщить подробную ошибку приводит к велосипеду.

S> H>Ага, я тебе сразу напомню ветку, где ты предлагал пихать в URI фрагмент мелодии в base64


S> И это, кстати, вовсе не такой плохой вариант, как хочется представить. В том смысле, что когда мы начнём предъявлять требования к масштабированию или надёжности, внезапно может оказаться, что это решение выиграет у кондового RPC.

S> Ну и если будут причины, то можно и обойтись без дружественности к кэшированию и прочих плюшек, не выходя за пределы REST — он же не запрещает делать POST вместо GET. REST просто объясняет, почему это неэффективно.

Ну да, не плохой, если забить на ограничения дефолтных реализаций Да и о кэшировании, в даном случае, говорить довольно странно т.к. вероятность получить идентичный URI если не нулевая, то стремящаяся к нему. Касаемо масштабируемости. Когда говорят о масштабируемости, почему-то считается, что RPC обрабатывается одним узлом. Вот с чего бы вдруг Решение можно масштабировать как угодно, в этом плане оно от REST мало чем отличается (в смысле, формой запроса только и отличается).
avalon 1.0rc3 build 432, zlib 1.2.5
Re[16]: SOA vs REST
От: hattab  
Дата: 28.01.13 10:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> Вообще-то это демонстрация техники невнимательного чтения.


Посыпался пеплом
avalon 1.0rc3 build 432, zlib 1.2.5
Re[38]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.01.13 04:47
Оценка:
Здравствуйте, hattab, Вы писали:

H>Я не в курсе, кто там был виноват, но факт остается фактом. Проблемы с кешированием это не сказочные мифы, а вполне себе суровая реальность. И хорошо еще если такая проблема очевидна (ломает приложение), а если гадит втихую...

О, ну давайте теперь откажемся от кэширования потому, что не понимаем, как оно работает.
H>Ну-да, ну-да... И пишут их не люди, а эльфы.
При чём тут эльфы? Речь о том, что у любого из топовых прокси-серверов как минимум сотни тысяч инсталляций. А у вашего самописанного — одна. Если вам не очевидно, как это влияет на тестовое покрытие, то я даже не знаю, что сказать.

H>Еще пример траблы с кешированием, уже не проксёй. Лично у меня, была проблема с кешированием в IE, когда эта сука единожды получив .cab с активиксом ни в какую не хотела качать его новую версию (несмотря на то, что все условия для обновления выполнялись, в *.inf все было прописано правильно). Мне тогда было совсем не весело.

При чём тут .inf? Какие хидеры были отданы с этим .cab?

H>А почему мы должны говорить о приложении внутри браузера (Flex морду я внутрибраузерной прилагой не считаю)?

Например потому, что есть большой рынок таких приложений. Невозможность потреблять сервис из тонкого клиента — этот вовсе не преимущество. Кроме того, "внутрибраузерный кэш" — это не только IE, но и весь WinInet. То есть ваш десктопный клиент может воспользоваться преимуществами HTTP кэширования прозрачно для вас и забесплатно.

H>Специализированный прокси разработать ничуть не сложно, и ни какой синхронизации с сервисом делать не нужно т.к. ему достаточно уметь обрабатывать несколько "специальных" методов, а для остальных работать в режиме моста. И это при условии, что оно вообще когда нибудь понадобится.

У вас есть реальный опыт разработки специализированного прокси для XML-RPC или JSON-RPC?

H>Ну да, мы прежде предпочитаем проектировать, а потом уже код писать

И сколько раз вы успели реально спроектировать в ваших многочисленных XML-RPC реализациях поддержку кэширования?

H>Но если на ошибку нужно реагировать приложению... то как я и говорил
Автор: hattab
Дата: 17.01.13
, задача сообщить подробную ошибку приводит к велосипеду.

Вы сначала придумайте, как именно приложению нужно реагировать на ошибку. То, что вы называете "велосипедом" — отличный пример того, как правильно строить обработку ошибок в вебе. Нужно просто понять, что ваша "обработка ошибок" в XML-RPC — это точно такой же велосипед. То есть как только я выберу конкретный REST-фреймворк, у меня сразу появятся соглашения о конкретном устройстве body в респонсах с ошибкой. И я по-прежнему буду иметь возможность писать тупого клиента, который вообще не знаком с концепцией exceptions, а смотрит только в хидеры, и по-прежнему все промежуточные прокси-сервера будут в курсе, что можно кэшировать, а что нет.

H>Ну да, не плохой, если забить на ограничения дефолтных реализаций

Какие именно ограничения дефолтных реализаций вы имеете в виду?
H>Да и о кэшировании, в даном случае, говорить довольно странно т.к. вероятность получить идентичный URI если не нулевая, то стремящаяся к нему.
В данном случае — да. Поэтому можно и не стремиться упаковать всё в URL и пользоваться Get-ом. Можно и сделать POST, с тем же примерно успехом. Ну, только разве что в отличие от XML-RPC можно передавать данные в теле бинарно, а не енкодить в base64.


H>Касаемо масштабируемости. Когда говорят о масштабируемости, почему-то считается, что RPC обрабатывается одним узлом. Вот с чего бы вдруг

С того бы вдруг, что во всех RPC реализациях URL у ендпоинта ровно один, и его hostname резолвится в фиксированный список IP адресов. Поэтому RPC-сервер неспособен управлять балансировкой; для масштабирования вам придётся поставить перед ним Load Balancer, а это недёшево и всё ещё имеет ограничения по масштабу. REST работает с пространством URL, которые вовсе не обязаны сидеть за одним и тем же hostname, поэтому со стороны сервера я могу балансировать нагрузку так, как мне удобно. Ваш К.О.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[39]: SOA vs REST
От: hattab  
Дата: 29.01.13 08:32
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> О, ну давайте теперь откажемся от кэширования потому, что не понимаем, как оно работает.


Зачем же, просто не нужно молиться на эту священную корову.

S> H>Ну-да, ну-да... И пишут их не люди, а эльфы.


S> При чём тут эльфы? Речь о том, что у любого из топовых прокси-серверов как минимум сотни тысяч инсталляций. А у вашего самописанного — одна. Если вам не очевидно, как это влияет на тестовое покрытие, то я даже не знаю, что сказать.


Ну, во первых, у нашего далеко не одна. Но, конечно, с количеством инсталлей сквида не сравнить. Вот только проксями, в нашем не идеальном мире живых людей, пользуются очень и очень разными, а не из топ 3.

S> H>Еще пример траблы с кешированием, уже не проксёй. Лично у меня, была проблема с кешированием в IE, когда эта сука единожды получив .cab с активиксом ни в какую не хотела качать его новую версию (несмотря на то, что все условия для обновления выполнялись, в *.inf все было прописано правильно). Мне тогда было совсем не весело.


S> При чём тут .inf? Какие хидеры были отданы с этим .cab?


При том, что в codebase активикса указывается ссылка на *.inf, а уже в нем прописывается версия файла и прочие детали. Ну а хидеры... Да не вспомню я сейчас, что там в 2001 году было. Помню, хостилось оно все под IIS, и сношались мы с этой радостью очень долго. Кстати, потом в инете, я где-то находил подтверждение этой проблемы.

S> H>А почему мы должны говорить о приложении внутри браузера (Flex морду я внутрибраузерной прилагой не считаю)?


S> Например потому, что есть большой рынок таких приложений. Невозможность потреблять сервис из тонкого клиента — этот вовсе не преимущество. Кроме того, "внутрибраузерный кэш" — это не только IE, но и весь WinInet. То есть ваш десктопный клиент может воспользоваться преимуществами HTTP кэширования прозрачно для вас и забесплатно.


Откуда вдруг взялась невозможность потребления сервиса из тонкого клиента? Не нужно выдумывать. Я уже сказал, что для XML-RPC есть JS-реализации. Просто мы таких клиентов не делаем. И, кстати, WinInet'ом не пользуемся тоже.

S> H>Специализированный прокси разработать ничуть не сложно, и ни какой синхронизации с сервисом делать не нужно т.к. ему достаточно уметь обрабатывать несколько "специальных" методов, а для остальных работать в режиме моста. И это при условии, что оно вообще когда нибудь понадобится.


S> У вас есть реальный опыт разработки специализированного прокси для XML-RPC или JSON-RPC?


У меня есть опыт разработки веб-сервера с нуля, т.е. с уровня сокетов и пула потоков. Прокси для XML-RPC делается на его основе элементарно

S> H>Ну да, мы прежде предпочитаем проектировать, а потом уже код писать


S> И сколько раз вы успели реально спроектировать в ваших многочисленных XML-RPC реализациях поддержку кэширования?


У нас такие приложения, что кэширование практически неприменимо Но это не отрицает возможности его реализации в RPC.

S> H>Но если на ошибку нужно реагировать приложению... то как я и говорил
Автор: hattab
Дата: 17.01.13
, задача сообщить подробную ошибку приводит к велосипеду.


S> Вы сначала придумайте, как именно приложению нужно реагировать на ошибку. То, что вы называете "велосипедом" — отличный пример того, как правильно строить обработку ошибок в вебе. Нужно просто понять, что ваша "обработка ошибок" в XML-RPC — это точно такой же велосипед. То есть как только я выберу конкретный REST-фреймворк, у меня сразу появятся соглашения о конкретном устройстве body в респонсах с ошибкой. И я по-прежнему буду иметь возможность писать тупого клиента, который вообще не знаком с концепцией exceptions, а смотрит только в хидеры, и по-прежнему все промежуточные прокси-сервера будут в курсе, что можно кэшировать, а что нет.


Вот так всегда, как только речь заходит о конкретике, сторонники REST вспоминают о каком-то одном, конкретном, REST-фреймвоке А что делать юзерам проповедующим другой конкретный REST-фреймвок для повзаимодействовать с вашим сервисом? Правильно, выкинуть свой конкретный REST-фреймвок и принять ваше вИдение. Нужно ли говорить о том, что в протоколах решающих эту задачу на уровне именно протокола, таких проблем нет и двое человек говорящих об обработке ошибок или формате сериализации понимают, что говорят об одном и том же. И таки да, их никто не обязывает юзать фреймвок, можно так же тупо ручками.

S> H>Ну да, не плохой, если забить на ограничения дефолтных реализаций


S> Какие именно ограничения дефолтных реализаций вы имеете в виду?


На размер URI разумеется.

S> H>Да и о кэшировании, в даном случае, говорить довольно странно т.к. вероятность получить идентичный URI если не нулевая, то стремящаяся к нему.


S> В данном случае — да. Поэтому можно и не стремиться упаковать всё в URL и пользоваться Get-ом. Можно и сделать POST, с тем же примерно успехом. Ну, только разве что в отличие от XML-RPC можно передавать данные в теле бинарно, а не енкодить в base64.


Я тебе уже как-то показывал, насколько хорошо решает сжатие, как раз таки на примере с base64.

S> H>Касаемо масштабируемости. Когда говорят о масштабируемости, почему-то считается, что RPC обрабатывается одним узлом. Вот с чего бы вдруг


S> С того бы вдруг, что во всех RPC реализациях URL у ендпоинта ровно один, и его hostname резолвится в фиксированный список IP адресов. Поэтому RPC-сервер неспособен управлять балансировкой; для масштабирования вам придётся поставить перед ним Load Balancer, а это недёшево и всё ещё имеет ограничения по масштабу. REST работает с пространством URL, которые вовсе не обязаны сидеть за одним и тем же hostname, поэтому со стороны сервера я могу балансировать нагрузку так, как мне удобно. Ваш К.О.


Это заблуждение. Клиент XML-RPC или JSON-RPC сервиса получив вместо 200 OK, 301 или 307 преспокойно сменит endpoint на указанный в location. Никакой драмы и трагедии нет.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[40]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.01.13 09:45
Оценка:
Здравствуйте, hattab, Вы писали:
H>Зачем же, просто не нужно молиться на эту священную корову.
Нужно. Нужно, потому что это единственный способ скомпенсировать распределённую природу приложения.
Вы понимаете, что как вы ни оптимизируйте свой RPC сервис, а раундтрип к нему всё равно занимает столько, сколько занимает?
Кэш позволяет снизить латентность вообще до нулевых цифр. Впрочем, я понимаю, что вам наплевать — вы же выбрали "стандартный" XML-RPC, который сам по себе вчетверо избыточнее даже тупого SOAP, который неспособен сэкономить походы на сервер.
А тем, кому не наплевать, желательно понимать, как достигается хорошая производительность.

H>Ну, во первых, у нашего далеко не одна. Но, конечно, с количеством инсталлей сквида не сравнить. Вот только проксями, в нашем не идеальном мире живых людей, пользуются очень и очень разными, а не из топ 3.

Да ладно. Ну расскажите мне, каковы шансы встретить экзотику, при наличии полностью бесплатных lighttpd и nginx.

H>При том, что в codebase активикса указывается ссылка на *.inf, а уже в нем прописывается версия файла и прочие детали. Ну а хидеры... Да не вспомню я сейчас, что там в 2001 году было. Помню, хостилось оно все под IIS, и сношались мы с этой радостью очень долго. Кстати, потом в инете, я где-то находил подтверждение этой проблемы.

Ну да, проблемы 12летней давности, конечно же, актуальны при принятии архитектурных решений.
У меня в то время тоже были постоянные проблемы с кэшами. В основном потому, что сайтом ietf.org я тогда не владел, и протокол HTTP понимал очень приблизительно. Тем более, что средств отладки типа fiddlertool.com тогда ещё не было, и мы реально гадали о состоянии кэша по визуальному поведению браузера (незамутнённые идиоты, да).

H>Откуда вдруг взялась невозможность потребления сервиса из тонкого клиента?

Не невозможность потребления сервиса, а невозможность пользования вашим велосипедным кэшированием.
H>Не нужно выдумывать. Я уже сказал, что для XML-RPC есть JS-реализации. Просто мы таких клиентов не делаем. И, кстати, WinInet'ом не пользуемся тоже.
Да я прекрасно понял уже ваше стремление к пессимизации приложений.

H>У меня есть опыт разработки веб-сервера с нуля, т.е. с уровня сокетов и пула потоков. Прокси для XML-RPC делается на его основе элементарно

То есть вот реально вы думаете, что авторы тупых HTTP-проксей неспособны сделать безглючную реализацию, а ваш умный прокси для XML-RPC легко сделать безошибочным? А, ну удачи.

H>У нас такие приложения, что кэширование практически неприменимо Но это не отрицает возможности его реализации в RPC.

Все так говорят. В прошлый раз, когда мне пытались привести пример приложения, где кэширование неприменимо, получилось смешно.
У вас не кэширование неприменимо, у вас потребности в высокой производительности нет.

H>Вот так всегда, как только речь заходит о конкретике, сторонники REST вспоминают о каком-то одном, конкретном, REST-фреймвоке А что делать юзерам проповедующим другой конкретный REST-фреймвок для повзаимодействовать с вашим сервисом? Правильно, выкинуть свой конкретный REST-фреймвок и принять ваше вИдение. Нужно ли говорить о том, что в протоколах решающих эту задачу на уровне именно протокола, таких проблем нет и двое человек говорящих об обработке ошибок или формате сериализации понимают, что говорят об одном и том же. И таки да, их никто не обязывает юзать фреймвок, можно так же тупо ручками.

Знаете, если этот "один и тот же" формат — это XML-RPC, то я лучше пешком постою.

H>На размер URI разумеется.

Ссылочку на ограничение размера URI в дефолтных реализациях не затруднит?
H>Я тебе уже как-то показывал, насколько хорошо решает сжатие, как раз таки на примере с base64.
На примере с реальными данными сжатие работает ещё лучше.

H>Это заблуждение. Клиент XML-RPC или JSON-RPC сервиса получив вместо 200 OK, 301 или 307 преспокойно сменит endpoint на указанный в location. Никакой драмы и трагедии нет.

Сначала нужно чтобы кто-то отдал этот 301 или 307. Я же говорю — вам нужен Load Balancer, а он не бесплатен.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[41]: SOA vs REST
От: hattab  
Дата: 29.01.13 18:06
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> H>Зачем же, просто не нужно молиться на эту священную корову.


S> Нужно. Нужно, потому что это единственный способ скомпенсировать распределённую природу приложения.

S> Вы понимаете, что как вы ни оптимизируйте свой RPC сервис, а раундтрип к нему всё равно занимает столько, сколько занимает?
S> Кэш позволяет снизить латентность вообще до нулевых цифр. Впрочем, я понимаю, что вам наплевать — вы же выбрали "стандартный" XML-RPC, который сам по себе вчетверо избыточнее даже тупого SOAP, который неспособен сэкономить походы на сервер.
S> А тем, кому не наплевать, желательно понимать, как достигается хорошая производительность.

Когда ты говоришь о нулевой латентности, ты имеешь ввиду кэш основанный на временнЫх метках. Но в случае с кэшированием ориентированным на ETag (те случаи, когда актуализация данных на клиенте критична) от полного раундтрипа ты не избавлен. Ну и о якобы избыточности XML-RPC. Вот живой пример использования гуглового сервиса:

SOAP (582 байта, без индентинга 549):
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
  <SOAP-ENV:Body>
    <ns1:doSpellingSuggestion xmlns:ns1="urn:GoogleSearch"
        SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <key xsi:type="xsd:string">00000000000000000000000000000000</key>
      <phrase xsi:type="xsd:string">britney speers</phrase>
    </ns1:doSpellingSuggestion>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


А так выглядел бы вариант для XML-RPC (294 байт, без индентинга 260):
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
  <methodName>google.doSpellingSuggestion</methodName>
  <params>
    <param>
      <value>00000000000000000000000000000000</value>
    </param>
    <param>
      <value>britney speers</value>
    </param>
  </params>
</methodCall>


или еще XML-RPC с именованными параметрами (492 байта, без индентинга 362):
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
  <methodName>google.doSpellingSuggestion</methodName>
  <params>
    <param>
      <value>
        <struct>
          <member>
            <name>key</name>
            <value>00000000000000000000000000000000</value>
          </member>
          <member>
            <name>phrase</name>
            <value>britney speers</value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodCall>


Что-то избыточности, по сравнению с SOAP, да еще и четырехкратной, не видно даже в микроскоп

S> H>Ну, во первых, у нашего далеко не одна. Но, конечно, с количеством инсталлей сквида не сравнить. Вот только проксями, в нашем не идеальном мире живых людей, пользуются очень и очень разными, а не из топ 3.


S> Да ладно. Ну расскажите мне, каковы шансы встретить экзотику, при наличии полностью бесплатных lighttpd и nginx.


О-о-о, на бескрайних просторах Российского энтерпрайза столько зверья встречается...

S> H>При том, что в codebase активикса указывается ссылка на *.inf, а уже в нем прописывается версия файла и прочие детали. Ну а хидеры... Да не вспомню я сейчас, что там в 2001 году было. Помню, хостилось оно все под IIS, и сношались мы с этой радостью очень долго. Кстати, потом в инете, я где-то находил подтверждение этой проблемы.


S> Ну да, проблемы 12летней давности, конечно же, актуальны при принятии архитектурных решений.


Предпочитаю думать заранее о том, где можно схлопотать по уху, а не испытывать удачу.

S> H>Откуда вдруг взялась невозможность потребления сервиса из тонкого клиента?


S> Не невозможность потребления сервиса, а невозможность пользования вашим велосипедным кэшированием.


А с чего вдруг? Интерфейс сервисов обычно описывается в документации, соответственно и механизм использования кэша будет описан.

S> H>Не нужно выдумывать. Я уже сказал, что для XML-RPC есть JS-реализации. Просто мы таких клиентов не делаем. И, кстати, WinInet'ом не пользуемся тоже.


S> Да я прекрасно понял уже ваше стремление к пессимизации приложений.


Просто наши интересы не ограничиваются рамками дефолт ОС, а потому WinInet ну ваще ни как

S> H>У меня есть опыт разработки веб-сервера с нуля, т.е. с уровня сокетов и пула потоков. Прокси для XML-RPC делается на его основе элементарно


S> То есть вот реально вы думаете, что авторы тупых HTTP-проксей неспособны сделать безглючную реализацию, а ваш умный прокси для XML-RPC легко сделать безошибочным? А, ну удачи.


Я этого не говорил. Я сказал, что в нашем не идеальном мире живых людей, уповать на непогрешимость сторонних и неизвестно каких продуктов я не решаюсь.

S> H>У нас такие приложения, что кэширование практически неприменимо Но это не отрицает возможности его реализации в RPC.


S> Все так говорят. В прошлый раз, когда мне пытались привести пример приложения, где кэширование неприменимо, получилось смешно.

S> У вас не кэширование неприменимо, у вас потребности в высокой производительности нет.

Производительность у нас на первом месте. А еще конфиденциальность, с которой кэширование в контрах.

S> H>Вот так всегда, как только речь заходит о конкретике, сторонники REST вспоминают о каком-то одном, конкретном, REST-фреймвоке А что делать юзерам проповедующим другой конкретный REST-фреймвок для повзаимодействовать с вашим сервисом? Правильно, выкинуть свой конкретный REST-фреймвок и принять ваше вИдение. Нужно ли говорить о том, что в протоколах решающих эту задачу на уровне именно протокола, таких проблем нет и двое человек говорящих об обработке ошибок или формате сериализации понимают, что говорят об одном и том же. И таки да, их никто не обязывает юзать фреймвок, можно так же тупо ручками.


S> Знаете, если этот "один и тот же" формат — это XML-RPC, то я лучше пешком постою.


Для XML-аллергиков есть JSON-RPC. Хотя можете и пешком, вам, REST-проповедникам оно привычно

S> H>На размер URI разумеется.


S> Ссылочку на ограничение размера URI в дефолтных реализациях не затруднит?


Ссылка на вики:

Браузеры имеют ограничения по длине URL, что определяет максимальный размер данных. Например, URI в Опере имели предел 4 КБ, а в Internet Explorer около 2 КБ.


Естественно, что, и прокси, и веб-серверы могут иметь свои ограничения (414 Request-URI to long).

S> H>Я тебе уже как-то показывал, насколько хорошо решает сжатие, как раз таки на примере с base64.


S> На примере с реальными данными сжатие работает ещё лучше.


А там и был пример с реальными данными
Автор: hattab
Дата: 20.03.09
.

S> H>Это заблуждение. Клиент XML-RPC или JSON-RPC сервиса получив вместо 200 OK, 301 или 307 преспокойно сменит endpoint на указанный в location. Никакой драмы и трагедии нет.


S> Сначала нужно чтобы кто-то отдал этот 301 или 307. Я же говорю — вам нужен Load Balancer, а он не бесплатен.


Умные ноды с синхронизацией состояния по нагрузке далеко не рокетсайнсовая штука.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[42]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 30.01.13 06:27
Оценка:
Здравствуйте, hattab, Вы писали:
H>Когда ты говоришь о нулевой латентности, ты имеешь ввиду кэш основанный на временнЫх метках.
Отож.
H>в случае с кэшированием ориентированным на ETag (те случаи, когда актуализация данных на клиенте критична) от полного раундтрипа ты не избавлен.
Но как минимум я имею экономию на body.
H>Ну и о якобы избыточности XML-RPC. Вот живой пример использования гуглового сервиса:

H>SOAP (582 байта, без индентинга 549):

H>
H><?xml version='1.0' encoding='UTF-8'?>
H><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
H>  <SOAP-ENV:Body>
H>    <ns1:doSpellingSuggestion xmlns:ns1="urn:GoogleSearch"
H>        SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
H>      <key xsi:type="xsd:string">00000000000000000000000000000000</key>
H>      <phrase xsi:type="xsd:string">britney speers</phrase>
H>    </ns1:doSpellingSuggestion>
H>  </SOAP-ENV:Body>
H></SOAP-ENV:Envelope>
H>


H>А так выглядел бы вариант для XML-RPC (294 байт, без индентинга 260):

H>
H><?xml version="1.0" encoding="utf-8"?>
H><methodCall>
H>  <methodName>google.doSpellingSuggestion</methodName>
H>  <params>
H>    <param>
H>      <value>00000000000000000000000000000000</value>
H>    </param>
H>    <param>
H>      <value>britney speers</value>
H>    </param>
H>  </params>
H></methodCall>
H>

Это вам повезло, что оба параметра оказались строковыми. Как только начнёте передавать не-строки, всё станет интереснее.

H>Что-то избыточности, по сравнению с SOAP, да еще и четырехкратной, не видно даже в микроскоп

Простите, перепутал. Не с SOAP, а с plain XML. Посыпаю голову пеплом.
Ну давайте заодно сравним с REST. Вот body нужного нам реквеста:

0 байт против ваших 260.
Ну, то есть понятно, что у нас удлинится URL. В предположении, что адрес точки входа один и тот же, мы дополнительно потратим 69 байт (/doSpellingSuggestion/00000000000000000000000000000000/britney+speers).Из них — 3 байта на разметку, остальное — пользовательские данные.

Итого имеем 260/69 ~ четырёхкратную избыточность XML-RPC по сравнению с REST.
И это вам повезло, что оба параметра — строки. Если действовать строго по стандарту, не опуская необязательные type tags, то получится
<methodCall>
  <methodName>google.doSpellingSuggestion</methodName>
  <params>
    <param>
      <value><string>00000000000000000000000000000000</string></value>
    </param>
    <param>
      <value><string>britney speers</string></value>
    </param>
  </params>
</methodCall>

т.е. 294 байта без индентинга.
H>О-о-о, на бескрайних просторах Российского энтерпрайза столько зверья встречается...
И оно прямо-таки нарушает устаканенные RFC? Можно зоть какой-то пруф в студию? Я сходу не нашёл известных багов в прокси-серверах.
Зато по "proxy serves stale data" легко находятся топики типа http://stackoverflow.com/questions/3091056/how-to-bypass-a-proxy-server-when-needed. Обратите внимание на ответ.

H>Предпочитаю думать заранее о том, где можно схлопотать по уху, а не испытывать удачу.

Думать надо не о том, где можно схлопотать по уху, а о том, как increase stakeholder value. Ваше отношение к прокси ("там живут драконы") не выглядит профессиональным.

H>А с чего вдруг? Интерфейс сервисов обычно описывается в документации, соответственно и механизм использования кэша будет описан.

С того вдруг, что в тонком клиенте доступ к local storage пока что очень ограничен, и нарисовать на нём полноценный кэш — дело тяжёлое. Одной "документации" тут недостаточно. Если не стараться пессимизировать сервис, а пользоваться изкоробочными возможностями, то тупой Get через XmlHttpRequest или JsHttpRequest проходит сквозь штатный кэш и выигрывает от наличия серверной реализации — на практически всех версиях браузеров, выпущенных за последние 10 лет.

H>Просто наши интересы не ограничиваются рамками дефолт ОС, а потому WinInet ну ваще ни как

Ну, это аргумент. Не глядя в хрустальный шар, сходу задумываюсь над двумя ответами: "Java" и "тонкий клиент". Про второй мы уже поговорили.

H>Я этого не говорил. Я сказал, что в нашем не идеальном мире живых людей, уповать на непогрешимость сторонних и неизвестно каких продуктов я не решаюсь.

Вы не готовы уповать на непогрешимость industry-proven продуктов, зато готовы уповать на свою. Это я уже понял.
H>Производительность у нас на первом месте. А еще конфиденциальность, с которой кэширование в контрах.
Нет никаких контров. Нужно просто понимать scope кэширования. Конфиденциальность "мешает" только при кэшировании на server side, зато она прекрасно применима на client side.

H>Для XML-аллергиков есть JSON-RPC. Хотя можете и пешком, вам, REST-проповедникам оно привычно

Он не намного лучше. В том смысле, что предлагает совершенно надуманные ограничения в обмен на наличие "стандартных" инструментов, которые при их отсутствии (в отличие от кэширующего сервера) пишутся на коленке за час. Вы серьёзно полагаете, что парсинг XML или JSON, содержащих машинночитаемую инфу об ошибке, сколь-нибудь затруднит разработчика клиента?

H>Ссылка на вики:

H>

Браузеры имеют ограничения по длине URL, что определяет максимальный размер данных. Например, URI в Опере имели предел 4 КБ, а в Internet Explorer около 2 КБ.

Вы же мне только что рассказывали, что не пишете браузерные приложения. Почему вас тогда беспокоят проблемы IE, неспособного к обработке длинных URL?

H>Естественно, что, и прокси, и веб-серверы могут иметь свои ограничения (414 Request-URI to long).

Ссылочку на реальные ограничения реальных прокси и веб серверов в студию не затруднит?
Потому что если рассуждать в терминах 414, то есть и 413.

S>> На примере с реальными данными сжатие работает ещё лучше.


H>А там и был пример с реальными данными
Автор: hattab
Дата: 20.03.09
.

Угу. А я бы ещё посмотрел, сколько этот "отфонарный скриншот" занимает в .png. Чисто чтобы показать, что выбор адекватного формата представления данных рулит не так слабо, как кажется.

H>Умные ноды с синхронизацией состояния по нагрузке далеко не рокетсайнсовая штука.

Опять мы говорим про отказ от industry-proven и straightforward решений в пользу жутких костылей лишь на том основании, что "потенциально это можно написать".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[43]: SOA vs REST
От: hattab  
Дата: 30.01.13 11:24
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S> H>Когда ты говоришь о нулевой латентности, ты имеешь ввиду кэш основанный на временнЫх метках.


S> Отож.


Оно мало где применимо вообще В многопользовательской системе ориентированной не на одну лишь перлюстрацию данных этот тип кэширования будет просто не востребован.

S> H>в случае с кэшированием ориентированным на ETag (те случаи, когда актуализация данных на клиенте критична) от полного раундтрипа ты не избавлен.


S> Но как минимум я имею экономию на body.


Обычно, тело запросов на получение данных не является большим, так что экономии там чуть

S> Это вам повезло, что оба параметра оказались строковыми. Как только начнёте передавать не-строки, всё станет интереснее.


Спецификаторы типов там короткие, разве что у даты длинноват. Но мы же понимаем, что сжатие все эти повторяющиеся паттерны нивелирует, а без сжатия текстовые протоколы используются крайне редко.

S> Ну давайте заодно сравним с REST. Вот body нужного нам реквеста:

S> 0 байт против ваших 260.
S> Ну, то есть понятно, что у нас удлинится URL. В предположении, что адрес точки входа один и тот же, мы дополнительно потратим 69 байт (/doSpellingSuggestion/00000000000000000000000000000000/britney+speers).Из них — 3 байта на разметку, остальное — пользовательские данные.

S> Итого имеем 260/69 ~ четырёхкратную избыточность XML-RPC по сравнению с REST.


Если учесть, что мы используем сжатие, то в gzip этот запрос будет весить всего 149 байт (запрос сериализован одной строкой + отсутствует ненужная декларация кодировки). Итого: 149/69, всего в два раза. Да и что вообще такое дополнительные 80 байт

S> И это вам повезло, что оба параметра — строки. Если действовать строго по стандарту, не опуская необязательные type tags, то получится

S>
S> <methodCall>
S>   <methodName>google.doSpellingSuggestion</methodName>
S>   <params>
S>     <param>
S>       <value><string>00000000000000000000000000000000</string></value>
S>     </param>
S>     <param>
S>       <value><string>britney speers</string></value>
S>     </param>
S>   </params>
S> </methodCall>
S>

S> т.е. 294 байта без индентинга.

Действуя строго по стандарту, указывать тип для строк мы не обязаны. Тут ни каких нарушений нет.

S> H>О-о-о, на бескрайних просторах Российского энтерпрайза столько зверья встречается...


S> И оно прямо-таки нарушает устаканенные RFC? Можно зоть какой-то пруф в студию? Я сходу не нашёл известных багов в прокси-серверах.

S> Зато по "proxy serves stale data" легко находятся топики типа http://stackoverflow.com/questions/3091056/how-to-bypass-a-proxy-server-when-needed. Обратите внимание на ответ.

Не, претензий к конкретным проксям у меня нет. Но есть прокси позволяющие регулировать механизм кэширования, и админы склонны этим пользоваться. Пример (! только, как пример) такого прокси HandyCache, там все так зарегулировать можно...

S> H>Предпочитаю думать заранее о том, где можно схлопотать по уху, а не испытывать удачу.


S> Думать надо не о том, где можно схлопотать по уху, а о том, как increase stakeholder value. Ваше отношение к прокси ("там живут драконы") не выглядит профессиональным.


Огрести проблемы можно не только с проксями, некоторые фаеры режут незнакомые/запрещенные/подозрительные для них заголовки HTTP (легко гуглится). Так что, и там тоже драконы живут. У-у-у-у

S> H>А с чего вдруг? Интерфейс сервисов обычно описывается в документации, соответственно и механизм использования кэша будет описан.


S> С того вдруг, что в тонком клиенте доступ к local storage пока что очень ограничен, и нарисовать на нём полноценный кэш — дело тяжёлое. Одной "документации" тут недостаточно. Если не стараться пессимизировать сервис, а пользоваться изкоробочными возможностями, то тупой Get через XmlHttpRequest или JsHttpRequest проходит сквозь штатный кэш и выигрывает от наличия серверной реализации — на практически всех версиях браузеров, выпущенных за последние 10 лет.


Вот я и не понимаю, нафига страдать с тонкими (браузерными) клиентами, когда можно взять, что потолще У нас таких клиентов нет, кроме админки на флексе, но там, насколько мне известно (не моя тема), с локальным стореджем проблем нет.

S> H>Просто наши интересы не ограничиваются рамками дефолт ОС, а потому WinInet ну ваще ни как


S> Ну, это аргумент. Не глядя в хрустальный шар, сходу задумываюсь над двумя ответами: "Java" и "тонкий клиент". Про второй мы уже поговорили.


Java слишком много хотеть кушать. У нас Delphi + FPC + Flex, пока все устраивает.

S> H>Я этого не говорил. Я сказал, что в нашем не идеальном мире живых людей, уповать на непогрешимость сторонних и неизвестно каких продуктов я не решаюсь.


S> Вы не готовы уповать на непогрешимость industry-proven продуктов, зато готовы уповать на свою. Это я уже понял.


С проблемами своих мы как нибудь разберемся, с проблемами сторонних увы. Даже если это проблемы излишнего конфигурирования (мир то не идеальный) огребать от них все равно не хочется.

S> H>Производительность у нас на первом месте. А еще конфиденциальность, с которой кэширование в контрах.


S> Нет никаких контров. Нужно просто понимать scope кэширования. Конфиденциальность "мешает" только при кэшировании на server side, зато она прекрасно применима на client side.


Если где-то на проксях осядет интересный документ это будет нехорошо.

S> H>Для XML-аллергиков есть JSON-RPC. Хотя можете и пешком, вам, REST-проповедникам оно привычно


S> Он не намного лучше. В том смысле, что предлагает совершенно надуманные ограничения в обмен на наличие "стандартных" инструментов, которые при их отсутствии (в отличие от кэширующего сервера) пишутся на коленке за час. Вы серьёзно полагаете, что парсинг XML или JSON, содержащих машинночитаемую инфу об ошибке, сколь-нибудь затруднит разработчика клиента?


Я считаю, что формат обмена должен быть стандартизирован, и чем проще он будет тем лучше. XML-RPC и JSON-RPC этот вопрос закрывают и давно уже вышли за рамки взаимодействия веб-сервисов, сейчас они применяются и в качестве IPC.

S> H>Ссылка на вики:

S> H>

Браузеры имеют ограничения по длине URL, что определяет максимальный размер данных. Например, URI в Опере имели предел 4 КБ, а в Internet Explorer около 2 КБ.


S> Вы же мне только что рассказывали, что не пишете браузерные приложения. Почему вас тогда беспокоят проблемы IE, неспособного к обработке длинных URL?


Да, мы таких клиентов не пишем. Но я же на твой вопрос отвечаю.

S> H>Естественно, что, и прокси, и веб-серверы могут иметь свои ограничения (414 Request-URI to long).


S> Ссылочку на реальные ограничения реальных прокси и веб серверов в студию не затруднит?


Я вопрос не изучал специально, но гуглится легко.

S> Потому что если рассуждать в терминах 414, то есть и 413.


Определенно, проблема большого тела запроса существует. Но, по всем здравым размышлениями, размер тела запроса будет несоизмеримо больше, нежели размер идентификатора ресурса, который не предназначен для передачи данных.

S> H>А там и был пример с реальными данными
Автор: hattab
Дата: 20.03.09
.


S> Угу. А я бы ещё посмотрел, сколько этот "отфонарный скриншот" занимает в .png. Чисто чтобы показать, что выбор адекватного формата представления данных рулит не так слабо, как кажется.


Я знал, что ты это попросишь Остался у меня и тот скриншот и весь тестовый проектик В общем, дело обстоит так. Тот самый скриншот:

Отфонарный скриншот моего десктопа ужатый до 320x200x24, в формате BMP

пожатый в png (безо всякой дополнительной меты, с максимальным сжатием) занимает 49443 байта, респонзовый пакет XML-RPC с этим же png и пожатый gzip'ом занимает 49878. Итого, разница аж в 435 байтов. Как видим, вывод, по ссылке, актуальности не потерял

S> H>Умные ноды с синхронизацией состояния по нагрузке далеко не рокетсайнсовая штука.


S> Опять мы говорим про отказ от industry-proven и straightforward решений в пользу жутких костылей лишь на том основании, что "потенциально это можно написать".


Да нет, мы просто не повторяем чужие мантры о плохой масштабируемости решений основанных на RPC.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[44]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.01.13 07:45
Оценка:
Здравствуйте, hattab, Вы писали:

H>Оно мало где применимо вообще В многопользовательской системе ориентированной не на одну лишь перлюстрацию данных этот тип кэширования будет просто не востребован.

Оно очень много где применимо. Вы просто плохо ищете.

H>Обычно, тело запросов на получение данных не является большим, так что экономии там чуть

При чём тут запрос на получение? Я говорю про тело response, которое вообще не приезжает в случае 304.

H>Если учесть, что мы используем сжатие, то в gzip этот запрос будет весить всего 149 байт (запрос сериализован одной строкой + отсутствует ненужная декларация кодировки). Итого: 149/69, всего в два раза. Да и что вообще такое дополнительные 80 байт

Это двукратный рост трафика на ровном месте. Мы всё ещё про утилизацию канала, не забыли?

H>Действуя строго по стандарту, указывать тип для строк мы не обязаны. Тут ни каких нарушений нет.

Это я не про нарушения, а про то, что менее строковые API резко станут более избыточными. Можно ознакомиться с примерами "нашего" XML-RPC API. Вот, скажем, как выглядит целый orderID для ордера, добавленного в PBA:
<?xml version="1.0"?>
 <methodResponse>
  <params>
   <param>
    <value>
     <struct>
      <member>
       <name>Result</name>
        <value>
         <array>
          <data>
           <value>
            <array>
             <data>
              <!--Placed order ID -->
              <value><i4>22</i4></value>
            </data>
           </array>
          </value>
         </data>
        </array>
       </value>
      </member>
     </struct>
    </value>
   </param>
  </params>
 </methodResponse>



S>> H>О-о-о, на бескрайних просторах Российского энтерпрайза столько зверья встречается...


S>> И оно прямо-таки нарушает устаканенные RFC? Можно зоть какой-то пруф в студию? Я сходу не нашёл известных багов в прокси-серверах.

S>> Зато по "proxy serves stale data" легко находятся топики типа http://stackoverflow.com/questions/3091056/how-to-bypass-a-proxy-server-when-needed. Обратите внимание на ответ.

H>Не, претензий к конкретным проксям у меня нет. Но есть прокси позволяющие регулировать механизм кэширования, и админы склонны этим пользоваться. Пример (! только, как пример) такого прокси HandyCache, там все так зарегулировать можно...


S>> H>Предпочитаю думать заранее о том, где можно схлопотать по уху, а не испытывать удачу.


S>> Думать надо не о том, где можно схлопотать по уху, а о том, как increase stakeholder value. Ваше отношение к прокси ("там живут драконы") не выглядит профессиональным.


H>Огрести проблемы можно не только с проксями, некоторые фаеры режут незнакомые/запрещенные/подозрительные для них заголовки HTTP (легко гуглится). Так что, и там тоже драконы живут. У-у-у-у


S>> H>А с чего вдруг? Интерфейс сервисов обычно описывается в документации, соответственно и механизм использования кэша будет описан.


S>> С того вдруг, что в тонком клиенте доступ к local storage пока что очень ограничен, и нарисовать на нём полноценный кэш — дело тяжёлое. Одной "документации" тут недостаточно. Если не стараться пессимизировать сервис, а пользоваться изкоробочными возможностями, то тупой Get через XmlHttpRequest или JsHttpRequest проходит сквозь штатный кэш и выигрывает от наличия серверной реализации — на практически всех версиях браузеров, выпущенных за последние 10 лет.


H>Вот я и не понимаю, нафига страдать с тонкими (браузерными) клиентами, когда можно взять, что потолще У нас таких клиентов нет, кроме админки на флексе, но там, насколько мне известно (не моя тема), с локальным стореджем проблем нет.


S>> H>Просто наши интересы не ограничиваются рамками дефолт ОС, а потому WinInet ну ваще ни как


S>> Ну, это аргумент. Не глядя в хрустальный шар, сходу задумываюсь над двумя ответами: "Java" и "тонкий клиент". Про второй мы уже поговорили.


H>Java слишком много хотеть кушать. У нас Delphi + FPC + Flex, пока все устраивает.


S>> H>Я этого не говорил. Я сказал, что в нашем не идеальном мире живых людей, уповать на непогрешимость сторонних и неизвестно каких продуктов я не решаюсь.


S>> Вы не готовы уповать на непогрешимость industry-proven продуктов, зато готовы уповать на свою. Это я уже понял.


H>С проблемами своих мы как нибудь разберемся, с проблемами сторонних увы. Даже если это проблемы излишнего конфигурирования (мир то не идеальный) огребать от них все равно не хочется.


S>> H>Производительность у нас на первом месте. А еще конфиденциальность, с которой кэширование в контрах.


S>> Нет никаких контров. Нужно просто понимать scope кэширования. Конфиденциальность "мешает" только при кэшировании на server side, зато она прекрасно применима на client side.


H>Если где-то на проксях осядет интересный документ это будет нехорошо.


S>> H>Для XML-аллергиков есть JSON-RPC. Хотя можете и пешком, вам, REST-проповедникам оно привычно


S>> Он не намного лучше. В том смысле, что предлагает совершенно надуманные ограничения в обмен на наличие "стандартных" инструментов, которые при их отсутствии (в отличие от кэширующего сервера) пишутся на коленке за час. Вы серьёзно полагаете, что парсинг XML или JSON, содержащих машинночитаемую инфу об ошибке, сколь-нибудь затруднит разработчика клиента?


H>Я считаю, что формат обмена должен быть стандартизирован, и чем проще он будет тем лучше. XML-RPC и JSON-RPC этот вопрос закрывают и давно уже вышли за рамки взаимодействия веб-сервисов, сейчас они применяются и в качестве IPC.


S>> H>Ссылка на вики:

S>> H>

Браузеры имеют ограничения по длине URL, что определяет максимальный размер данных. Например, URI в Опере имели предел 4 КБ, а в Internet Explorer около 2 КБ.


H>Я вопрос не изучал специально, но гуглится легко.

Отлично. Эта страница наглядно показывает, что можно спокойно использовать URL, достаточно длинные for any practical purpose.
В частности, Апач и IIS конфигурируются, и успешно жуют урлы длиной свыше 100KB.
Это уж если вам так хочется порассуждать о статус коде 414.
И уж во всяком случае принимать архитектурные решения на основе "я не знаю, но где-то слышал про какие-то проблемы" — моветон.

H>Определенно, проблема большого тела запроса существует. Но, по всем здравым размышлениями, размер тела запроса будет несоизмеримо больше, нежели размер идентификатора ресурса, который не предназначен для передачи данных.

Я не понимаю, о каких "здравых размышлениях" вы говорите. Есть стандарт, есть реализации, наблюдаемые в поле. Есть подвластная вам конфигурация, есть неподвластная. Есть конкретная задача, есть конкретные требования к интеропу. Только под это имеет смысл проектировать.
А принимать решения на основе "наверное, боди можно считать безлимитным, а URL — коротким" — простите, моветон. И к тому же противоречит вашему "мы сначала проектируем, а потом делаем".

H>Я знал, что ты это попросишь Остался у меня и тот скриншот и весь тестовый проектик В общем, дело обстоит так. Тот самый скриншот:

H>

Отфонарный скриншот моего десктопа ужатый до 320x200x24, в формате BMP

пожатый в png (безо всякой дополнительной меты, с максимальным сжатием) занимает 49443 байта, респонзовый пакет XML-RPC с этим же png и пожатый gzip'ом занимает 49878. Итого, разница аж в 435 байтов. Как видим, вывод, по ссылке, актуальности не потерял

Ок, отлично. Снимаю свой аргумент с утилизацией канала за счёт многословности — она всего лишь будет жрать память на клиенте и на сервере.

H>Да нет, мы просто не повторяем чужие мантры о плохой масштабируемости решений основанных на RPC.

Давайте отступим на шаг назад. Весь спор сводится к тому, что XML-RPC предлагает "из коробки" одни фичи, а REST — другие фичи.
Понятно, что в обоих случаях недостающие фичи можно дописать.
Мой поинт — в том, что "недостающие" фичи в REST вообще не стоят упоминания — парсинг и генерация контента в XML или JSON на современных Фреймворках практически бесплатен в терминах девелоперских ресурсов. Поэтому упрёки типа "ооо, мне придётся руками разбирать информацию об ошибке" мне смешны. Ну, то есть сами по себе они нормальны, полчаса работы это полчаса работы, но по сравнению с тем, что отсутствует в XML-RPC — это просто детский лепет.
Вы смело берётесь дописывать кэширование и load balancing. По моему опыту, эти вещи очень сложны в реализации. Вон, в Java 1.5 попытались прикрутить кэширование веб-респонсов. И не смогли: в официальной реализации — блокерная бага.
Сделать так, чтобы ваш кэш-сервер переживал отключение питания, и всё ещё после этого отдавал консистетные результаты — рокет сайнс. Учёт всех нюансов того, кому что можно кэшировать — рокет сайнс. И так далее.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[45]: SOA vs REST
От: hattab  
Дата: 31.01.13 10:48
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> H>Обычно, тело запросов на получение данных не является большим, так что экономии там чуть


S> При чём тут запрос на получение? Я говорю про тело response, которое вообще не приезжает в случае 304.


А, ну да. Ну так в XML-RPC возвращение нулевого результата 107 байт. Не велика беда

S> H>Если учесть, что мы используем сжатие, то в gzip этот запрос будет весить всего 149 байт (запрос сериализован одной строкой + отсутствует ненужная декларация кодировки). Итого: 149/69, всего в два раза. Да и что вообще такое дополнительные 80 байт


S> Это двукратный рост трафика на ровном месте. Мы всё ещё про утилизацию канала, не забыли?


Не забыли. А теперь скажи, что будет если искомая фраза будет не "britney speers", а "бритни спирс"? На сколько увеличится размер URI благодаря эскейпингу? (риторический вопрос). В случае с XML-RPC, нам достаточно будет указать национальную кодировку документа.

S> H>Действуя строго по стандарту, указывать тип для строк мы не обязаны. Тут ни каких нарушений нет.


S> Это я не про нарушения, а про то, что менее строковые API резко станут более избыточными. Можно ознакомиться с примерами "нашего" XML-RPC API. Вот, скажем, как выглядит целый orderID для ордера, добавленного в PBA:

S>
S> <?xml version="1.0"?>
S>  <methodResponse>
S>   <params>
S>    <param>
S>     <value>
S>      <struct>
S>       <member>
S>        <name>Result</name>
S>         <value>
S>          <array>
S>           <data>
S>            <value>
S>             <array>
S>              <data>
S>               <!--Placed order ID -->
S>               <value><i4>22</i4></value>
S>             </data>
S>            </array>
S>           </value>
S>          </data>
S>         </array>
S>        </value>
S>       </member>
S>      </struct>
S>     </value>
S>    </param>
S>   </params>
S>  </methodResponse>

S>


Ящитаю вложенность нужно увеличить для пущего эффекта Не, ну, что за фигня, структура с единственным членом массивом и у того единственный элемент массив содержащий фактическое значение. Ладно, как бы там нибыло, после причесывания (однострочной сериализации и выкидывания комментария) и gzip'а ответ весит 155 байт. Прям ужас, какой-то

[оверквотинг скипед]

S> H>Я вопрос не изучал специально, но гуглится легко.


S> Отлично. Эта страница наглядно показывает, что можно спокойно использовать URL, достаточно длинные for any practical purpose.

S> В частности, Апач и IIS конфигурируются, и успешно жуют урлы длиной свыше 100KB.
S> Это уж если вам так хочется порассуждать о статус коде 414.

Это ты всем клиентам будешь рекомендовать переконфигурировать свои серверы? А что с прокси, вообще не понятно (я бы не исключал проблем в этом месте). Сейчас вот сделал GET на http://www.google.com/q(65536) и получил 413 Request Entity Too Large, а потом сделал GET на твой http://www.ietf.org/q(65536) и получил 414 Request-URI Too Large Ну и потом, длинный URI это потенциальные двери для DDOS (погугли long url dos).

S> И уж во всяком случае принимать архитектурные решения на основе "я не знаю, но где-то слышал про какие-то проблемы" — моветон.


Речь не о принятии архитектурных решений (XML-RPC был выбран совсем не из-за обсуждаемых ограничений REST) а о том, что с такой проблемой столкнуться можно легко. Немного отойдя от темы, напомню, что тут, на rsdn, была веселая история
Автор: Lloyd
Дата: 27.07.04
с блокированием януса. Теперь прикинь, какова вероятность налететь на один из блокируемых паттернов при использовании base64 в URI. Сильно не нулевая. Так что это не просто страхи, а такой вот не идеальный мир.

S> H>Определенно, проблема большого тела запроса существует. Но, по всем здравым размышлениями, размер тела запроса будет несоизмеримо больше, нежели размер идентификатора ресурса, который не предназначен для передачи данных.


S> А принимать решения на основе "наверное, боди можно считать безлимитным, а URL — коротким" — простите, моветон. И к тому же противоречит вашему "мы сначала проектируем, а потом делаем".


Мы потому и не паримся ограничениями, что наши сервисы работают под нашим сервером, ну и подходим разумно к объемам запросов. Это, однако, не значит, что все XML-RPC сервисы могут этой темой не заморачиваться. Я только говорю, что у REST тут дела ни чуть не лучше.

S> Ок, отлично. Снимаю свой аргумент с утилизацией канала за счёт многословности — она всего лишь будет жрать память на клиенте и на сервере.


Если использовать тупой парсер построенный на DOM. Мы используем умный на SAX. Ну и гигабайты одним пакетом не передаем.

S> H>Да нет, мы просто не повторяем чужие мантры о плохой масштабируемости решений основанных на RPC.


S> Давайте отступим на шаг назад. Весь спор сводится к тому, что XML-RPC предлагает "из коробки" одни фичи, а REST — другие фичи.

S> Понятно, что в обоих случаях недостающие фичи можно дописать.
S> Мой поинт — в том, что "недостающие" фичи в REST вообще не стоят упоминания — парсинг и генерация контента в XML или JSON на современных Фреймворках практически бесплатен в терминах девелоперских ресурсов. Поэтому упрёки типа "ооо, мне придётся руками разбирать информацию об ошибке" мне смешны. Ну, то есть сами по себе они нормальны, полчаса работы это полчаса работы, но по сравнению с тем, что отсутствует в XML-RPC — это просто детский лепет.
S> Вы смело берётесь дописывать кэширование и load balancing. По моему опыту, эти вещи очень сложны в реализации. Вон, в Java 1.5 попытались прикрутить кэширование веб-респонсов. И не смогли: в официальной реализации — блокерная бага.
S> Сделать так, чтобы ваш кэш-сервер переживал отключение питания, и всё ещё после этого отдавал консистетные результаты — рокет сайнс. Учёт всех нюансов того, кому что можно кэшировать — рокет сайнс. И так далее.

Не-не. Все мои слова о возможности реализовать собственный механизм кэширования и балансировке не более чем примеры, на тезисы о невозможности реализации, или отсутствии оного в RPC. Мне не приходилось делать собственный механизм кэширования т.к. в наших задачах я не вижу ему места. С балансировкой опыт есть, но там все и правда просто, динамическое разделение пользователей по обслуживаемым нодам и миграция их профилей (будто для REST этого делать не нужно ). Ну и единый и простой стандарт на формат данных это такой очевидный рулез снижающий порог вхождения, что я даже не заню, как с этим можно спорить.
avalon 1.0rc3 build 432, zlib 1.2.5
Re[46]: SOA vs REST
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.01.13 11:47
Оценка:
Здравствуйте, hattab, Вы писали:

H>А, ну да. Ну так в XML-RPC возвращение нулевого результата 107 байт. Не велика беда

Ну как же "нулевого". С 304 могут приехать дополнительные хидеры. Это если вы хотите реализовать полноценное кэширование, сравнимое со взрослыми реализациями.

H>Не забыли. А теперь скажи, что будет если искомая фраза будет не "britney speers", а "бритни спирс"? На сколько увеличится размер URI благодаря эскейпингу? (риторический вопрос). В случае с XML-RPC, нам достаточно будет указать национальную кодировку документа.

В данном конкретном случае "указание национальной кодировки документа" сожрёт ровно столько же байт, сколько и лишние байты в заенкоженном УРле.

S>> H>Действуя строго по стандарту, указывать тип для строк мы не обязаны. Тут ни каких нарушений нет.


H>Ящитаю вложенность нужно увеличить для пущего эффекта Не, ну, что за фигня, структура с единственным членом массивом и у того единственный элемент массив содержащий фактическое значение. Ладно, как бы там нибыло, после причесывания (однострочной сериализации и выкидывания комментария) и gzip'а ответ весит 155 байт. Прям ужас, какой-то

По сравнению с 6 байтами — да, ужоснах.

H>[оверквотинг скипед]

Это я нечаянно не на всё ответил.
По поводу фаерволлов — жду в студию пример фаерволла, режущего "опасные" хидеры ETag, If-modified-since, if-none-match, Cache-Control и Expires.
Вы поймите, что боитесь пользоваться функциональностью, на которой работает 95% интернета. Просто традиционно эти функции прикручены к статике, а не к динамике. Потому что статику отдают сервера, написанные профессионалами и хорошо отлаженные. Те же content delivery networks напропалую используют продвинутые фишки протокола. И если кто-то где-то у себя открутит это дело, то уверяю вас — заметят и починят это очень быстро. Потому что навернётся повседневный експириенс, а не какие-то редкоиспользуемые приложения.
В итоге браузеры и сервера прекрасно работают друг с другом. А разработчики промежуточных слоёв боятся открыть спецификацию и прочитать — а вдруг оно не заработает! Вон доклад 1999 года...

H>Это ты всем клиентам будешь рекомендовать переконфигурировать свои серверы?

Кого мы в данном случае называем клиентами? Клиенты API обойдутся без серверов. А свой сервер я уж как-нибудь один раз переконфигурирую, делов-то.

H>А что с прокси, вообще не понятно (я бы не исключал проблем в этом месте). Сейчас вот сделал GET на http://www.google.com/q(65536) и получил 413 Request Entity Too Large, а потом сделал GET на твой http://www.ietf.org/q(65536) и получил 414 Request-URI Too Large Ну и потом, длинный URI это потенциальные двери для DDOS (погугли long url dos).

Не смешите мои тапочки. Любой HTTP — это потенциальные двери для DDOS. Чем тут URI отличается от Body — в упор не понятно.

Да, ietf в своём сервере заранее знает, какие URL они собираются сёрвить. Они не давали обязательства обрабатывать любой URL, который придёт вам в голову. Поэтому они отдают 414, не пытаясь идти на диск в поисках документа с именем q(65536).
Мой сервер, реализующий REST-протокол, будет брать на себя другие обязательства. Ровно те, которые я на него возложу.
Если мне нужно уметь искать по картинке весом в 100MB, то независимо от выбора надстройки над HTTP мне нужно решить вопрос доставки такого объёма с клиента на сервер.

H>Речь не о принятии архитектурных решений (XML-RPC был выбран совсем не из-за обсуждаемых ограничений REST) а о том, что с такой проблемой столкнуться можно легко. Немного отойдя от темы, напомню, что тут, на rsdn, была веселая история
Автор: Lloyd
Дата: 27.07.04
с блокированием януса. Теперь прикинь, какова вероятность налететь на один из блокируемых паттернов при использовании base64 в URI. Сильно не нулевая. Так что это не просто страхи, а такой вот не идеальный мир.

Всяко ниже, чем при использовании обычных URL. Впрочем, я уже сказал, что не настаиваю на base64 в URL.

H>Мы потому и не паримся ограничениями, что наши сервисы работают под нашим сервером, ну и подходим разумно к объемам запросов. Это, однако, не значит, что все XML-RPC сервисы могут этой темой не заморачиваться. Я только говорю, что у REST тут дела ни чуть не лучше.

Конечно. У него дела лучше в других областях.

H>Не-не. Все мои слова о возможности реализовать собственный механизм кэширования и балансировке не более чем примеры, на тезисы о невозможности реализации, или отсутствии оного в RPC. Мне не приходилось делать собственный механизм кэширования т.к. в наших задачах я не вижу ему места. С балансировкой опыт есть, но там все и правда просто, динамическое разделение пользователей по обслуживаемым нодам и миграция их профилей (будто для REST этого делать не нужно ).

Для REST это делать тоже можно. Но там есть ещё и возможность тупо порезать object space на столько нод, сколько захочется. И в том числе делать это и динамически, т.к. вместо непрозрачных "object ID" в REST принято возвращать URI. И этот URI будет показывать туда, куда нам надо.

H>Ну и единый и простой стандарт на формат данных это такой очевидный рулез снижающий порог вхождения, что я даже не заню, как с этим можно спорить.

Очень просто. У REST порог вхождения существенно ниже, чем у XML-RPC. За счёт того, что браузер может работать вполне годным клиентом REST-сервиса, так что его можно поэксплорить не написав ни единой строчки кода.
Велкам в http://apscatalog.com/1.2/.
Формат данных — это пренебрежимо мелкий рулез. Потому что для реального сервиса важно понимать его модель, и ожидаемые от клиента действия.
Попробуйте понять, какой запрос нужно отправить клиентскому приложению этому сервису чтобы проверить, есть ли новые обновления для локально установленного конкретного пакета. Каковы шансы, что вы не сможете разобраться с этим безо всякой документации?
А каковы шансы на то, что вы, найдя нужный запрос, не сможете разобраться со стандартом atom?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[47]: SOA vs REST
От: hattab  
Дата: 31.01.13 14:19
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> H>А, ну да. Ну так в XML-RPC возвращение нулевого результата 107 байт. Не велика беда


S> Ну как же "нулевого". С 304 могут приехать дополнительные хидеры. Это если вы хотите реализовать полноценное кэширование, сравнимое со взрослыми реализациями.


Не, я о том, что XML-RPC по любому должен ответить нормальным респонзом, и если делать аналог 304 то сервер может возвращать значение nil. Такой пакет будет весить 107 байт.

S> H>Не забыли. А теперь скажи, что будет если искомая фраза будет не "britney speers", а "бритни спирс"? На сколько увеличится размер URI благодаря эскейпингу? (риторический вопрос). В случае с XML-RPC, нам достаточно будет указать национальную кодировку документа.


S> В данном конкретном случае "указание национальной кодировки документа" сожрёт ровно столько же байт, сколько и лишние байты в заенкоженном УРле.


??? Для URL национальные символы будут преобразованы в UTF-8 (нам же нужен универсальный механизм кодирования), а затем каждый байт заенкодится в шестнадцатиричное представление. В результате, "бритни спирс" превратится в "%D0%B1%D1%80%D0%B8%D1%82%D0%BD%D0%B8+%D1%81%D0%BF%D0%B8%D1%80%D1%81" (67 байт). Добавление encoding="windows-1251" увеличит размер пакета на 24 байта (при этом, русского текста там может содержаться сколь угодно много).

S> H>Ящитаю вложенность нужно увеличить для пущего эффекта Не, ну, что за фигня, структура с единственным членом массивом и у того единственный элемент массив содержащий фактическое значение. Ладно, как бы там нибыло, после причесывания (однострочной сериализации и выкидывания комментария) и gzip'а ответ весит 155 байт. Прям ужас, какой-то


S> По сравнению с 6 байтами — да, ужоснах.


Ужоснах это приводить, в качестве примера, значение в тройной обертке

S> H>[оверквотинг скипед]


S> Это я нечаянно не на всё ответил.

S> По поводу фаерволлов — жду в студию пример фаерволла, режущего "опасные" хидеры ETag, If-modified-since, if-none-match, Cache-Control и Expires.

Так это может зависеть от настроек разной степени параноидальности Я где-то читал, что аутпост резал кастомные хидеры использовавшиеся в SOAP. Помнишь, я приводил тут пример ответа амазоновского REST-сервиса? Там было два кастомных заголовка, и я не уверен, что с ними однажды не возникнет проблем. А погуглив, нашел и про Outpost кое что
Автор: AndrewVK
Дата: 26.01.05
(и еще
Автор: mezon
Дата: 19.01.07
). Не идеальный мир такой не идеальный

S> Вы поймите, что боитесь пользоваться функциональностью, на которой работает 95% интернета. Просто традиционно эти функции прикручены к статике, а не к динамике. Потому что статику отдают сервера, написанные профессионалами и хорошо отлаженные. Те же content delivery networks напропалую используют продвинутые фишки протокола. И если кто-то где-то у себя открутит это дело, то уверяю вас — заметят и починят это очень быстро. Потому что навернётся повседневный експириенс, а не какие-то редкоиспользуемые приложения.

S> В итоге браузеры и сервера прекрасно работают друг с другом. А разработчики промежуточных слоёв боятся открыть спецификацию и прочитать — а вдруг оно не заработает! Вон доклад 1999 года...

Да мы не боимся, я же сказал, что выбрали RPC совсем по другим причинам, а об этих траблах я говорю, коли уж разговор сюда зашел.

S> H>Это ты всем клиентам будешь рекомендовать переконфигурировать свои серверы?


S> Кого мы в данном случае называем клиентами? Клиенты API обойдутся без серверов. А свой сервер я уж как-нибудь один раз переконфигурирую, делов-то.


Ну вот у наших клиентов (заказчиков) работают наши сервисы, на нашем же сервере (не в смысле расположения). А раз уж ты говоришь об industry-proven получается, что вместо своего сервера нам бы стоило взять что-то из этого самого (возможно имеющегося у заказчика). Cледовательно им свои серверы переконфигурять?

S> H>А что с прокси, вообще не понятно (я бы не исключал проблем в этом месте). Сейчас вот сделал GET на http://www.google.com/q(65536) и получил 413 Request Entity Too Large, а потом сделал GET на твой http://www.ietf.org/q(65536) и получил 414 Request-URI Too Large Ну и потом, длинный URI это потенциальные двери для DDOS (погугли long url dos).


S> Не смешите мои тапочки. Любой HTTP — это потенциальные двери для DDOS. Чем тут URI отличается от Body — в упор не понятно.


Дело может быть в обработке методов. Например, сервер ограничивает URI до 100 символов, а получив POST может предполагать, что сейчас будет большое тело запроса и изменить механизм чтения из сокета (например писать его сразу на диск или по достижении порогового значения). В случае, когда предполагается использование длинных URI серверу просто нечем защищаться и он может стать легкой мишенью.

S> Да, ietf в своём сервере заранее знает, какие URL они собираются сёрвить. Они не давали обязательства обрабатывать любой URL, который придёт вам в голову. Поэтому они отдают 414, не пытаясь идти на диск в поисках документа с именем q(65536).

S> Мой сервер, реализующий REST-протокол, будет брать на себя другие обязательства. Ровно те, которые я на него возложу.

Ты сейчас говоришь о своем сервере или таки industry-proven?

S> Если мне нужно уметь искать по картинке весом в 100MB, то независимо от выбора надстройки над HTTP мне нужно решить вопрос доставки такого объёма с клиента на сервер.


Угу. У нас это решается блочным доступом

S> H>Речь не о принятии архитектурных решений (XML-RPC был выбран совсем не из-за обсуждаемых ограничений REST) а о том, что с такой проблемой столкнуться можно легко. Немного отойдя от темы, напомню, что тут, на rsdn, была веселая история
Автор: Lloyd
Дата: 27.07.04
с блокированием януса. Теперь прикинь, какова вероятность налететь на один из блокируемых паттернов при использовании base64 в URI. Сильно не нулевая. Так что это не просто страхи, а такой вот не идеальный мир.


S> Всяко ниже, чем при использовании обычных URL. Впрочем, я уже сказал, что не настаиваю на base64 в URL.


Я бы не был так уверен У меня тут была задача генерировать по некоторому алгоритму ключи для софта (ну, эти привычные XXXX-XXXXX-XXXXXX-XXXX). Алфавит, понятное дело, ограничен заглавной латиницей. Ну и чтобы не получилось некрасиво, каждый ключ проверялся на вхождение всяких там F#CK, A#AL, #EX и тому подобного... Ты не поверишь, на сотню ключей пара-тройка да попадала под фильтр

S> H>Не-не. Все мои слова о возможности реализовать собственный механизм кэширования и балансировке не более чем примеры, на тезисы о невозможности реализации, или отсутствии оного в RPC. Мне не приходилось делать собственный механизм кэширования т.к. в наших задачах я не вижу ему места. С балансировкой опыт есть, но там все и правда просто, динамическое разделение пользователей по обслуживаемым нодам и миграция их профилей (будто для REST этого делать не нужно ).


S> Для REST это делать тоже можно. Но там есть ещё и возможность тупо порезать object space на столько нод, сколько захочется. И в том числе делать это и динамически, т.к. вместо непрозрачных "object ID" в REST принято возвращать URI. И этот URI будет показывать туда, куда нам надо.


Как будто, кто-то мешает вернуть URI из RPC

S> H>Ну и единый и простой стандарт на формат данных это такой очевидный рулез снижающий порог вхождения, что я даже не заню, как с этим можно спорить.


S> Очень просто. У REST порог вхождения существенно ниже, чем у XML-RPC. За счёт того, что браузер может работать вполне годным клиентом REST-сервиса, так что его можно поэксплорить не написав ни единой строчки кода.

S> Велкам в http://apscatalog.com/1.2/.
S> Формат данных — это пренебрежимо мелкий рулез. Потому что для реального сервиса важно понимать его модель, и ожидаемые от клиента действия.
S> Попробуйте понять, какой запрос нужно отправить клиентскому приложению этому сервису чтобы проверить, есть ли новые обновления для локально установленного конкретного пакета. Каковы шансы, что вы не сможете разобраться с этим безо всякой документации?
S> А каковы шансы на то, что вы, найдя нужный запрос, не сможете разобраться со стандартом atom?

Стандартный формат позволяет документации на сервис говорить с разработчиком клиента на понятном им обоим языке. Если документация говорит:

RPC endpoint: http://foxrate.org/rpc/

Method name: foxrate.currencyConvert

Parameters:
from currency (eg: USD) = string
to currency (eg: GBP) = string
amount to convert (eg:100.0) = float


У разработчика на XML-RPC не возникает ни каких вопросов по тому, каким образом нужно передать имя метода, как передавать параметры, как указать тип параметров и нужно ли вообще это делать. Он знает, что такое структура в терминах протокола. Он знает, что такое массив и бинарные данные. Он знает, как форматируются числа с плавающей точкой. Он знает, как будет выглядеть этот вызов в XML. Он знает, что может сделать:
 XmlRpcServer('http://foxrate.org/rpc/').foxrate.currencyConvert('USD', 'RUB', 1.0)
и получит результат. Все. Никакого информационного шума о форматах и способах передачи. Либо же он просто собирает любым доступным способ XML-пакет в едином формате и так же доступным способом отправляет на сервер. Аллилуйя!
avalon 1.0rc3 build 432, zlib 1.2.5
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.