Жена: Кто такой Рой Филдинг?
Райан: Какой-то парень. Он умный.
Жена: а ? Что он сделал?
Райан: Он помог написать первые веб-серверы, а затем провел массу исследований, объясняющих, почему сеть работает так, как она работает. Его имя указано в спецификации протокола, который используется для передачи страниц с серверов в ваш браузер.
Жена: Как это работает?
Райан: Интернет?
Жена: Да.
Райан: Хм. Ну, это все довольно удивительно на самом деле. И самое смешное, что все это очень недооценено. Протокол, о котором я говорил, HTTP, он способен на всякие полезные вещи, которые люди почему-то игнорируют.
Жена: Вы имеете в виду http как начало того, что я печатаю в браузере?
Райан: Да. Эта первая часть сообщает браузеру, какой протокол использовать. То, что вы вводите, является одним из самых важных достижений в истории вычислений.
Жена: почему?
Райан: Потому что он способен описывать местоположение чего-либо в любой точке мира, из любой точки мира. Это основа Интернета. Вы можете думать об этом как GPS-координаты для знаний и информации.
Жена: Для веб-страниц?
Райан: Вообще-то. Этот парень, Рой Филдинг, много говорит о том, на что указывают эти вещи в том исследовании, о котором я говорил. Сеть построена на архитектурном стиле REST. REST предоставляет определение ресурса, на что указывают эти вещи.
Жена: веб-страница является ресурсом?
Райан: Вид. Веб-страница является представлением ресурса. Ресурсы - это просто понятия. URL - те вещи, которые вы вводите в браузер ...
Жена: я знаю, что такое URL ..
Райан: Да, верно. Они говорят браузеру, что где-то есть концепция. Затем браузер может запросить конкретное представление концепции. В частности, браузер запрашивает представление концепции на веб-странице.
Жена: Какие еще есть виды представлений?
Райан: На самом деле, представления - это одна из тех вещей, к которой не привыкать. В большинстве случаев ресурс имеет только одно представление. Но мы надеемся, что представления будут использоваться больше в будущем, потому что повсюду появляется множество новых форматов.
Жена: Как что?
Райан: Хм. Ну, есть такая концепция, которую люди называют веб-сервисами. Это означает много разных вещей для многих людей, но основная концепция заключается в том, что машины могут использовать Интернет так же, как люди.
Жена: Это еще один робот?
Райан: Нет, не совсем. Я не имею в виду, что машины будут сидеть за столом и просматривать веб-страницы. Но компьютеры могут использовать те же протоколы для отправки сообщений друг другу. Мы занимаемся этим в течение длительного времени, но ни один из методов, которые мы используем сегодня, не работает хорошо, когда вам нужно иметь возможность общаться со всеми машинами во всем мире.
Жена: почему бы и нет?
Райан: Потому что они не были предназначены для такого использования. Когда Филдинг и его приятели начали создавать сеть, первостепенной была возможность общаться с любой машиной в любой точке мира. Большинство методов, которые мы используем на работе, чтобы заставить компьютеры общаться друг с другом, не соответствовали этим требованиям. Вам просто нужно было поговорить с небольшой группой машин.
Жена: А теперь вам нужно поговорить со всеми машинами?
Райан: Да - и больше. Мы должны иметь возможность говорить со всеми машинами обо всем, что есть на всех других машинах. Поэтому нам нужен способ, чтобы одна машина сообщала другой машине о ресурсе, который может находиться на другой машине.
Жена: что?
Райан: Допустим, вы разговариваете со своей сестрой, и она хочет одолжить уборочную машину или что-то в этом роде. Но у тебя его нет - у твоей мамы есть. Таким образом, вы говорите своей сестре, чтобы получить это от вашей мамы вместо этого. Это происходит все время в реальной жизни, и это происходит все время, когда машины тоже начинают говорить.
Жена: Так как машины сообщают друг другу, где что находится?
Райан: URL, конечно. Если все, о чем нужно говорить машинам, имеет соответствующий URL, вы создали машинный эквивалент существительного. То, что вы, я и остальной мир договорились о том, чтобы говорить о существительных определенным образом, довольно важно, а?
Жена: Да.
Райан: Машины не имеют универсального существительного - вот почему они отстой. Каждый язык программирования, база данных или другой вид системы по-разному говорят о существительных. Вот почему URL так важен. Это позволяет всем этим системам рассказывать друг другу о существительных друг друга.
Жена: Но когда я смотрю на веб-страницу, я не думаю об этом так.
Райан: Никто не делает. За исключением Филдинга и горстки других людей. Вот почему машины все еще отстой.
Жена: А как насчет глаголов, местоимений и прилагательных?
Райан: Забавно, что вы спросили, потому что это еще один важный аспект REST. Ну, глаголы в любом случае.
Жена: я просто пошутил.
Райан: Это была забавная шутка, но на самом деле это вовсе не шутка. Глаголы важны. В программировании и теории CS есть мощная концепция, называемая полиморфизмом. Это отвратительный способ сказать, что к разным существительным может применяться один и тот же глагол.
Жена: я не понимаю.
Райан: Хорошо .. Посмотри на кофейный столик. Какие существительные? Чашка, поднос, газета, пульт. Теперь, что вы можете сделать со всеми этими вещами?
Жена: я не понимаю ...
Райан: Вы можете получить их, верно? Вы можете забрать их. Вы можете опрокинуть их. Вы можете сжечь их. Вы можете применить те же самые точные глаголы к любому из объектов, которые там сидят.
Жена: Хорошо ... так?
Райан: Ну, это важно. Что если бы вместо меня была возможность сказать вам: «возьми чашку», «возьми газету» и «возьми пульт»; что если вместо этого нам нужно придумать разные глаголы для каждого из существительных? Я не мог использовать слово «получить» повсеместно, но вместо этого мне пришлось придумывать новое слово для каждой комбинации глагол / существительное.
Жена: Вау! Это странно.
Райан: Да, это так. Наш мозг достаточно умен, чтобы знать, что одни и те же глаголы могут применяться ко многим существительным. Некоторые глаголы более специфичны, чем другие, и применяются только к небольшому набору существительных. Например, я не могу водить чашку и не могу пить машину. Но некоторые глаголы почти универсальны, как GET, PUT и DELETE.
Жена: Вы не можете УДАЛИТЬ чашку.
Райан: Хорошо, хорошо, но вы можете выбросить это. Это была еще одна шутка, верно?
Жена: Да.
Райан: Так или иначе, HTTP - этот протокол, созданный Филдингом и его друзьями - это все о применении глаголов к существительным. Например, когда вы переходите на веб-страницу, браузер выполняет HTTP-GET для URL-адреса, который вы вводите, и возвращается веб-страница.
Веб-страницы обычно имеют изображения, верно? Это отдельные ресурсы. Веб-страница просто указывает URL-адреса к изображениям, и браузер запускает и выполняет для них больше HTTP GET, пока все ресурсы не будут получены и веб-страница не отобразится. Но здесь важно то, что к разным существительным можно относиться одинаково. Является ли существительное изображение, текст, видео, mp3, слайд-шоу, что угодно. Я могу получить все эти вещи таким же образом, учитывая URL.
Жена: Похоже, GET - довольно важный глагол.
Райан: Это так. Особенно, когда вы используете веб-браузер, потому что браузеры в основном просто ПОЛУЧАЮТ вещи. Они не делают много других видов взаимодействия с ресурсами. Это проблема, потому что многие люди считают, что HTTP предназначен только для GETing. Но HTTP - это протокол общего назначения для применения глаголов к существительным.
Жена: Круто. Но я до сих пор не понимаю, как это что-то меняет. Какие виды существительных и глаголов вы хотите?
Райан: Ну, существительные есть, но не в правильном формате.
Подумайте, когда вы просматриваете amazon.com в поисках вещей, чтобы купить меня на Рождество. Представьте, что каждый из продуктов является существительным. Теперь, если бы они были доступны в виде, понятном машине, вы могли бы сделать много полезных вещей.
Жена: Почему машина не может понять нормальную веб-страницу?
Райан: Потому что веб-страницы предназначены для понимания людьми. Машина не заботится о макете и стиле. Машины в основном просто нужны данные. В идеале каждый URL должен иметь удобочитаемое и машиночитаемое представление. Когда машина получает ресурс, она запрашивает машиночитаемый. Когда браузер получает ресурс для человека, он запрашивает читабельный.
Жена: Значит, людям придется создавать машинные форматы для всех своих страниц?
Райан: Если бы это было ценно.
Слушай, мы говорили об этом с большой абстракцией. Как насчет того, чтобы взять реальный пример. Вы учитель - в школе я уверен, что у вас есть большая компьютерная система или, скорее всего, три или четыре компьютерные системы, которые позволяют вам управлять учащимися: в каких классах они учатся, какие классы они получают, экстренные контакты, информация о книгах, из которых вы учите, и т. д. Если системы основаны на сети, то, вероятно, здесь есть URL для каждого существительного, участвующего здесь: студент, учитель, класс, книга, комната и т. д. Прямо сейчас, чтобы получить URL через браузер дает вам веб-страницу. Если бы для каждого URL существовало машиночитаемое представление, то было бы просто защелкнуть новые инструменты в системе, потому что вся эта информация была бы потребляемой стандартным способом. Также было бы намного проще для каждой из систем общаться друг с другом. Или вы могли бы создать государственную или общенациональную систему, которая могла бы общаться с каждой из отдельных школьных систем для сбора результатов тестирования. Возможности безграничны.
Каждая из систем будет получать информацию друг от друга, используя простой HTTP GET. Если одной системе нужно что-то добавить в другую, она будет использовать HTTP POST. Если система хочет обновить что-то в другой системе, она использует HTTP PUT. Осталось выяснить, как должны выглядеть данные.
Жена: Так над чем вы и все компьютерные люди работаете сейчас? Решаете, как должны выглядеть данные?
Райан: К сожалению, нет. Вместо этого подавляющее большинство заняты написанием слоев сложных спецификаций для выполнения этих вещей другим способом, который не так полезен или красноречив. Существительные не универсальны, а глаголы не полиморфны. Мы отбрасываем десятилетия реального использования в полевых условиях и проверенной техники и начинаем с того, что очень похоже на другие системы, которые потерпели неудачу в прошлом. Мы используем HTTP, но только потому, что это помогает нам меньше общаться с сетью и людьми, занимающимися вопросами безопасности. Мы торгуем простотой для ярких инструментов и мастеров.
Жена: почему?
Райан: Понятия не имею.
Жена: Почему бы тебе не сказать что-нибудь?
Райан: Может быть, я буду.