Перевод (подробности здесь) статьи REST 101: Part 1 – Understanding Resources, автором которой является Jeff Cohen.

Лично мне стоило больших усилий понять, что такое REST. Может быть, потому что большую часть жизни я разрабатывал клиент-серверные приложеня, а не WEB-сайты, или, потому что в момент знакоства с REST я изучал принципы WEB программирования, Ruby, и Rails одновременно. Когда я поехал на первую конференцию, посвященную Rails, там все говорили только о REST, и я, чтобы не казаться придурком, улыбался и делал вид, что в курсе дела, хотя совершенно не понимал о чем речь.

Если Вы, как и я когда-то, пытаетесь понять что же такое REST и как применить эту концепцию в Rails, то эта серия статей для Вас.

Эксперты в HTTP, HTML и REST обязательно будут придираться к тому, насколько я упрощаю терминологию чтобы сфокусироваться на самой теме, но я не желаю этого слышать, потому как эта серия написана не для экспертов :)

Часть 1.

Итак, начнем с самого начала. Как работает браузер? Прежде чем я начал создавать сайты на Rails, я думал что это происходит примерно так:

  1. Я набираю URL в адресной строке, либо нажимаю на ссылку.
  2. Браузер выполняет “HTTP запрос” (чтобы это не значило) и получает HTML в ответ.
  3. Браузер отображает HTML на экране.

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

На самом деле, протокол HTTP содержит точные указания о том, как браузер должен отправлять запросы серверу. HTTP принципиально отличается от HTML, который являясь языком разметки предназначен для отображения содержимого страницы. В то время как HTTP помимо банального получения HTML страницы и отправки данных формы позволяет выполнять и другие действия, а именно он поддерживает 8 типов запросов. Наиболее известными являются 2:

  1. Запрос “GET”: используется для получения содержимого какого-либо ресурса в сети. Ресурс обладает уникальным идентификатором – URL.
  2. Запрос “POST”: используется для отправки данных на URL для создания нового ресурса.

Часть 2.

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

Вчера я отправился на amazon.com и просмотрел несколько товаров, которые мне было бы интересно купить. Еще я прочитал несколько статей из Wikipedia и заголовки свежих новостей на сайте CNN. Потом я познакомился с текущим положением хоккейной команды Чикаго в турнирной таблице NHL.

Чтобы понять REST Вам придется перестать думать обо всех этих вещах как о WEB-страницах. Например, статья в Wikipedia. Это не просто страница, это ресурс (в моем случае – краткая биография Архимеда). Я использовал браузер чтобы получить доступ к этому ресурсу, и он запросил представление ресурса в формате HTML, потому что это та форма, в которой браузеры отображают ресурсы.

Но разве статья про Архимеда не является WEB-страницей? Нет. Я запросил представление ресурса из Wikipedia в формате HTML, ресурса который может быть идентифицирован по URL ”//en.wikipedia.org/wiki/Archimedes”. Wikipedia могла бы отобразить ресурс в любом другом виде – в качестве PDF документа, или возможно JPG изображения, или даже предложить несколько форматов на выбор. Но Firefox отправил GET запрос на получение этого ресурса в формате HTML и ответ был соответствующим.

Другой пример: бронь авиабилета – это ресурс, предоставляемый компанией United Airlines. Они позволяют мне обратиться к этому ресурсу разными способами: как к HTML странице на их сайте, либо они могут отправить информацию о брони в качестве текстового сообщения на мобильный телефон, также они могут отправить мне эту информацию на email, а еще я могу позвонить им по телефону. Один и тот же ресурс, но разные представления.

Надеюсь, теперь это очевидно: моя бронь – не просто WEB-страница. Это реальный ресурс, который может быть отображен при помощи HTML и поэтому я могу воспользоваться браузером и просмотреть информацию о моей брони.

Часть 3.

Теперь, когда я убедил Вас, что WEB – это на самом деле огромное хранилище ресурсов, которые могут быть отображены различными способами, и HTML – это всего лишь один из этих способов, я хотел бы предоставить Вашему вниманию еще одну концепцию. Ресурс – это не обязательно единичный элемент, как, например, биографическая статья или турнирная таблица. Некоторые ресурсы представляют собой совокупность других ресурсов. Ресурсом может быть список праздников, список друзей или несколько постов в блоге.

В следующей статье я собираюсь описать, как HTTP позволяет создавать, читать, обновлять и удалять ресурсы.

Leave a Reply