Почему мы должны использовать отдых?


Почему я должен использовать REST, если я могу выполнить свою работу только с помощью post и get requests?

8 53

8 ответов:

Рой Филдинг написал в блоге с некоторым разочарованием о RPC маскируется под REST.

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

все это резко контрастирует с различными схемами удаленного вызова процедур (RPC), в которых клиент и сервер должны согласовать подробный протокол, который обычно должен быть скомпилирован в оба конца (например, URI определенной формы, доступ к которым осуществляется в определенном порядке на одном конце, SOAP/WSDL/WS* на другом). Этот подход является хрупким, потому что любые изменения должны осуществляться как на стороне сервера, так и на стороне клиента одновременно. Это быстро становится несостоятельным, поскольку число серверов и/или клиентов растет. В частности, серверы страдают из-за того, что эволюция опубликованного API становится все более сложной по мере роста популярности.

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

но как насчет части "когда это возможно"? Отдых работает лучше всего, когда есть человек в петле. В конце концов, у человека есть хороший шанс сделать рациональный выбор, когда ему предоставляется ранее неизвестный набор вариантов. Машин там еще нет. Протоколы Web RPC были рождены именно для того, чтобы приковать обе стороны к фиксированному протоколу. Это делает его более легким для автоматизированных процессов связывать когда человек извлекается из изображения. RPC является допустимым выбор дизайна, когда чисто автоматизированная работа более важна, чем эволюция и масштабируемость (в интернет-времени и в интернет-масштабе).

масштаб и соединения?

"масштаб" здесь подразумевается в широком смысле. Он включает в себя количество пользователей и сеансов, да, но также размер приложения и процесс разработки. Плотное соединение представляет строгое препятствие к размеру применения. Трудно представить себе существование самого большого известного приложения, Всемирная паутина, без весьма свободного соединения позволенного архитектурой остальных. Миллионы разработчиков по всему миру сотрудничают, чтобы построить это приложение, которое поддерживает миллиарды пользователей. Тем не менее разработчики делают это, оставаясь в блаженном неведении друг о друге (или, по крайней мере, они не знали бы друг о друге, если бы не StackOverflow ;).

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

правильное использование REST может помочь вашим системным компонентам оставаться правильно разъединенными и может быть легче развито в будущем, чем если бы вы связали их непосредственно вместе типичным способом RPC. Это архитектурный выбор, который вы должны сделать на основе потребностей вашего приложения. Другие отметили некоторые технические преимущества, и они должны быть приняты во внимание.

REST позволяет легко эволюционировать дизайн API. И это ключ с REST-вы создаете API. Некоторые из комментариев касались аспектов этой мысли, но фактически не воплотили в жизнь основную проблему. Когда вы имеете дело с REST, вы создаете API, который будет использоваться клиентами (или самим собой). Действия HTTP на ресурсах дают четкое представление клиентам о дизайне и функциональности API. Поэтому, когда мы правильно используем правильные http-глаголы, мы объявляют API, который стандартизирован и понятен с точки зрения клиента.

если GET запросы не идемпотентных тогда кэширование HTTP между вашим сервером и клиентами будет перерыв приложение. POST запросы по определению не являются идемпотентными, поэтому HTTP-кэши не будут кэшировать эти запросы и результаты: вы все равно получаете преимущества кэширования GET запросы, не нарушая протокол вашего приложения. Большой успех.

и, если вам когда-нибудь понадобится удалить объекты, DELETE будет гораздо легче читать на провод и журналы, чем POST запрос, который делает удаление. Но веб-браузеры не могут легко делать HTTP-запросы с помощью DELETE глагол, так что это действительно больше для клиентов, вы запрограммировали себя.

Открытие гораздо проще в покое. У нас есть документы WADL (похожие на WSDL в традиционных веб-сервисах), которые помогут вам рекламировать свой сервис по всему миру. Можно использовать также открытий одних и тех же процедур. С традиционным HTTP POST и GET люди могут не знать ваши схемы запроса и ответа на сообщение, чтобы позвонить вам.

Почему вы думаете, что только с помощью POST и GET означает, что это не отдых?

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

  • GET - это get
  • сообщение-это обновление
  • PUT-это create
  • удалить-это удалить.

Если вы не делаете некоторые из этих вещей-например, PUT - это редкость и потенциальная дыра в безопасности-тогда а ты нет.

вы должны использовать REST, потому что он действительно охватывает все потенциальные действия, которые вы хотите сделать на ресурсе/объекте.

  • GET-получить ресурс на основе заданных условий
  • пост - создать ресурс
  • поставить - обновление ресурса с учетом обновленных атрибутов
  • удалить - удалить ресурс

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

вы должны использовать отдых из-за ниже особенностей и преимуществ:

особенности

  1. протокол без состояния клиент/сервер: каждый HTTP содержит всю необходимую информацию для его запуска, что означает, что ни клиент, ни сервер не должны помнить любое предыдущее состояние, чтобы удовлетворить его. Как бы то ни было, некоторые HTTP-приложения включают в себя кэш-память. Это настраивает то, что известно как клиент-кэш-сервер без состояния протокол: некоторые ответы на определенные HTTP-запросы можно определить как cachable, поэтому клиент может запускать один и тот же ответ для идентичных запросов в будущем. Однако тот факт, что опция существует, не означает, что она является наиболее рекомендуемой.
  2. есть четыре очень важные данные сделки в любой системе отдыха и спецификации HTTP: пост (создать), сделать (прочитать и проконсультироваться), ставить (редактировать) и удалять.
  3. объекты в состоянии покоя всегда управляются из URI-код. Это URI и никакой другой элемент, который является единственным идентификатором каждого ресурса в этой системе REST. URI позволяет нам получить доступ к информации, чтобы изменить или удалить ее, или, например, поделиться своим точным местоположением с третьими лицами.
  4. единый интерфейс: для передачи данных система REST применяет определенные действия (POST, GET, PUT и DELETE) к ресурсам при условии, что они идентифицированы с URI. Это делает его легче получить единый интерфейс, который систематизирует процесс с информацией.
  5. система слой: иерархическая архитектура между компонентами. Каждый слой имеет функциональность в системе REST.
  6. использование гипермедиа: гипермедиа-термин, введенный Тедом Нельсоном в 1965 году и является продолжением концепции гипертекста. Эта концепция, взятая для разработки веб-страниц, позволяет пользователю просматривать набор объектов через HTML-ссылки. В в случае REST API концепция гипермедиа объясняет способность интерфейса разработки приложений предоставлять клиенту и пользователю адекватные ссылки для выполнения конкретных действий над данными.

преимущества

  1. разделение между клиентом и сервером: протокол REST полностью отделяет пользовательский интерфейс от сервера и хранилища данных. Это имеет некоторые преимущества при создании разработок. Для например, он улучшает переносимость интерфейса на другие типы платформ, повышает масштабируемость проектов и позволяет независимо разрабатывать различные компоненты разработок.
  2. видимость, надежность и масштабируемость. Разделение между клиентом и сервером имеет одно очевидное преимущество, и это то, что каждая команда разработчиков может масштабировать продукт без особых проблем. Они могут мигрировать на другие серверы или делать все виды изменения в базе данных, при условии, что данные из каждого запроса правильно. Разделение делает его легче иметь спереди и сзади на разных серверах, и это делает приложения более гибкими для работы.
  3. REST API всегда не зависит от типа платформы или языков: REST API всегда адаптируется к типу используемого синтаксиса или платформ, что дает значительную свободу при изменении или тестировании новых сред в рамках разработки. С помощью REST API вы можете иметь PHP, Java, Python или Node.серверы js. Единственное, что необходимо, чтобы ответы на запросы всегда происходили на языке, используемом для обмена информацией, обычно XML или JSON.

источник