Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Объяснения к этому: «если структура сообщений поменяется (или мы в ней сделали ошибку), мы 100 лет будет искать ошибку» так и не было ;)
А теперь про ошибку, если я беру данные с какого-либо REST-сервиса, то по-хорошему нужно проверять, а правильно ли я их беру. Эту проверку осуществляет клиент, а не сервер.
Для REST вам придется писать её руками, или не писать, но при этом придется больше внимания уделить тестированию (никто не даст гарантии, что при очередном рефакторинге у вас чего-нибудь не отвалится)
Плюс в том, что отдаются данные в каком-нибудь стандартном формате. Например, XML. Добавляем сюда весь богатый инструментарий по валидации этих данных — и всё в шоколаде.
отдаются данные в каком-нибудь стандартном формате. Например, XML. Добавляем сюда весь богатый инструментарий по валидации этих данных — и всё в шоколаде.
А почему оно должно отвалиться, и почему оно не отвалится при неREST'е?
Открою страшную тайну: данные надо проверять ВСЕГДА, даже если мы берем их по SOAP'у
Что вы имеете в виду по «прокси для REST»?
Они хорошо подумали, как лучше реализовать задачу, и решили делать это с помощью вручную написанных классов с расставленными аттрибутами сериализации. Запросы посылают через HttpClient, ответ десериализуют каким-то json-сериалайзером. Вроде бы достаточно просто и красиво, но все же полная автоматизация.
GET http://site/entity/doc
<entity>
<fields>
<id>
<type>integer</type>
</id>
<roles>
<rel>http://site/schemas/roles</rel>
<href>/entity/roles</href>
</roles>
</fields>
</entity>
....
% [{имя наружу, имя в базе данных}, нзвание конвертирующей функции]
[{role, role_id}, link_to_role]
link_to_role(Value) ->
[{rel, "http://site/schemas/role"}, {href, "http://site/role/" ++ Value}]
если на сокетах — смакота: установил соединение, когда нужно клиент прислал запрос серверу, а когда нужно сервер прислал кленту событие даже без запроса на этоА сколько вы сокетов-то откроете одновременно? 100 запросов в секунду и прощай пул и здравствуй Service is out of its capacity
REST не отменяет сессий
Сервер может быть с состоянием (The server can be stateful)
Взаимодействие клиент-сервер ограничивается далее отсутствием сохранения контекста клиента на сервере между запросами.
Взаимодействие клиент-сервер ограничивается далее отсутствием сохранения контекста клиента на сервере между запросами.
подавляющее большинство высоконагруженных проектов всеми силами стараются избавиться от сессий на сервере или как можно сильнее уменьшать зависимость от них…
Твиттер тоже сидит на REST'е. В частности, его веб-морда является клиентом к его же API…
подавляющее большинство высоконагруженных проектов всеми силами стараются избавиться от сессий на сервере или как можно сильнее уменьшать зависимость от них…
Если на пальцах:
— есть какие-то ресурсы, связанные с каим-либо человеком X
— при попытке получить/изменить эти ресурсы другим человеком Y выдаем 503 Not Authorized
— при авторизации человека X сохраняем на клиенте информацию, необходимую для идентификации этого пользователя (например, в виде Secure Cookie)
— при попытке получить/изменить ресурс, связанный с человеком X, получаем с клиента необходимую информацию, идентифицируем человека, выдаем/изменяем требуемый ресурс…
Единственное ограничение: сервер не должен хранить контекст клиента между запросами. Это значит, что:
— запрос 1, shopping_cart/add может обработать сервер 1
— запрос 2, shopping_cart/view может обработать сервер 2
— запрос 3, shopping_cart_item/update может обработать сервер 3
— запрос 4, shopping_cart/checkout может обработать, например, опять сервер 1
При этом они все будут независимы друг от друга и не зависить от контекста сессий или пользователей друг у друга…
REST vs SOAP. Часть 2. Как проще и эффективнее организовать общение платформ?