вторник, 26 ноября 2013 г.

Будущее может быть за RESTful

Крис Чжэн недавно опубликовал статью “Why the future is NOT RESTful”. Она наделал немного шума, но, по-моему мнению, она основана на ложных предположениях и достаточно ошибочна. Вот почему.

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



Сервер никогда не будет простой интерфейсной частью для базы данных, за исключением классических CRUD-приложений. Если в системе больше одного пользователя, которые работают параллельно с одним и тем же компонентом, вам необходима некоторая координация на серверной стороне. Если у вас есть хоть какая-нибудь бизнес-логика, она так-же должна находиться на стороне сервера.
Согласен, клиент становится «толще». Он может обладать даже базой данных (часть стандарта HTML5), состоянием (которое позволит реализовать поддержку оффлайн) и большим количеством логики.

Но это не значит, что сервер теряет свою «толщину». Мы просто переносим представление, совершенствуя её и, возможно, дублируем логику предметной области. Однако, в конечном счёте, мы ничего не можем доверить клиенту. Все в руках пользователей, которые подвержены атакам, реверс инжинирингу, всевозможным подделкам и т.д. Используя CURL можно отправить серверу все, что угодно.

Следующий пункт: REST не гарантирует безопасность. Действительно ли REST предполагает отсутствие авторизации и фильтрации результатов для каждого пользователя? Если Алексей видит в системе одни “учётные записи”, а Елена - другие, делает ли это невозможным возвращение разных результатов для команды GET /account в зависимости от контекста?

Пойдём дальше: мы не говорим о монолитном подходе, не так ли? REST не значит, что можно иметь лишь одно представление “учетной записи” и лишь один метод GET/POST/PUT. Представлений может быть намного больше - каждое специально предназначенное для конкретного сценария использования. Точно определённые ресурсы, представляющие каждый элемент, кажутся мне неплохой идеей. Пожалуй, это идеальное отделение интерфейса и персональный ответственности?

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

Источник

Комментариев нет:

Отправить комментарий