Введение
Это книга о создании приложений с использованием гипермедиа-систем. Гипермедийные системы могут показаться странной фразой: почему гипермедиа является системой ? Разве гипермедиа не является просто способом связать документы вместе?
Как в случае с HTML во Всемирной паутине?
Что вы подразумеваете под гипермедийными системами ?
Ну да, HTML — это гипермедиа . Но в работе Интернета есть нечто большее, чем просто HTML: HTTP, протокол передачи гипертекста, передает HTML с серверов клиентам, и с ним связано множество деталей и функций: кеширование, различные заголовки, коды ответов, и так далее.
И, конечно, есть гипермедиа-серверы , которые предоставляют гипермедийные API (да, API ) клиентам по сети.
И, наконец, есть важнейший гипермедийный клиент : программный клиент, который понимает, как понятным образом передать человеку ответ гипермедиа , чтобы человек мог взаимодействовать с удаленной системой. Наиболее широко известными и используемыми гипермедийными клиентами являются, конечно же, веб-браузеры.
Веб-браузеры, пожалуй, самые сложные программы, которые мы используем. Они не только понимают HTML, CSS и многие другие форматы файлов, но также предоставляют среду выполнения JavaScript и среду программирования, которая настолько мощна, что веб-разработчики могут создавать в ней целые приложения, почти такие же сложные, как толстые клиенты, то есть собственные приложения . .
Эта среда выполнения JavaScript настолько мощна, что сегодня многие разработчики игнорируют гипермедийные функции браузера, предпочитая создавать свои веб-приложения полностью на JavaScript. Приложения, созданные таким образом, стали называть одностраничными приложениями (SPA). Вместо навигации между страницами эти веб-приложения используют JavaScript для непосредственного обновления пользовательского интерфейса. Когда они взаимодействуют с сервером, эти приложения обычно используют вызовы API JSON через AJAX. И они часто обновляют пользовательский интерфейс, используя библиотеку JavaScript для внешнего интерфейса в «реактивном» стиле.
В этих приложениях HTML становится (несколько неуклюжим) языком описания графического интерфейса, который используется потому, что по историческим причинам именно он присутствует в браузере.
Приложения, созданные в этом стиле, не управляются гипермедиа : они не используют преимущества базовой гипермедиа-системы Интернета.
Чтобы объяснить, как выглядит приложение, управляемое гипермедиа, и сравнить его с популярным сегодня подходом SPA, нам нужно сначала изучить всю гипермедийную систему Интернета, а не просто обсуждать HTML. Нам необходимо рассмотреть сетевую архитектуру Интернета, в том числе то, как веб-сервер предоставляет API гипермедиа и как эффективно использовать функции гипермедиа, доступные в клиенте гипермедиа (например, в браузере).
Каждый из них является важным аспектом создания эффективного приложения, управляемого гипермедиа, и именно вся система гипермедиа объединяется, чтобы сделать гипермедиа такой мощной архитектурой.
Что такое гипермедийная система?
Чтобы понять, что такое система гипермедиа, мы сначала подробно рассмотрим каноническую систему гипермедиа: Всемирную паутину. Рой Филдинг, инженер, который помогал создавать спецификации и реализовывать многие ранние части Интернета, дал нам термин REpresentational State Transfer, или REST. В своей докторской диссертации он описал REST как сетевую архитектуру и противопоставил ее более ранним подходам к созданию распределенного программного обеспечения.
Мы определяем гипермедиа-систему как систему, которая соответствует сетевой архитектуре RESTful в первоначальном понимании этого термина Филдингом.
К сожалению, сегодня вы, вероятно, ассоциируете термин «REST» с API-интерфейсами JSON, поскольку именно здесь этот термин обычно используется в промышленности. Это неправильное использование термина REST, поскольку JSON не является естественным гипермедиа из-за отсутствия элементов управления гипермедиа. Обмен гипермедиа является явным требованием для того, чтобы система считалась «RESTful». Это длинная история того, как мы дошли до этого, так неправильно используя термин REST, и мы углубимся в подробности позже в этой книге. Но на данный момент, если вы считаете, что REST подразумевает JSON, попробуйте отложить это понимание во время чтения этой книги и подойти к этой концепции свежим взглядом.
Важно понимать, что в своей диссертации Филдинг описывал Всемирную паутину в том виде, в котором она существовала в конце 1990-х годов. На тот момент Интернет представлял собой просто веб-браузеры, обменивающиеся гипермедиа. Эту систему с ее простыми ссылками и формами Филдинг называл RESTful.
API-интерфейсам JSON оставалось десять лет, чтобы стать распространенным инструментом в веб-разработке: REST был посвящен гипермедиа и версии Интернета 1.0.
Приложения, управляемые гипермедиа
В этой книге мы рассмотрим гипермедиа как системную архитектуру , а затем рассмотрим некоторые практические современные подходы к созданию веб-приложений с ее использованием. Мы будем называть приложения, созданные в этом стиле, приложениями, управляемыми гипермедиа , или HDA, и противопоставим их популярному сегодня стилю — одностраничному приложению.
Приложение, управляемое гипермедиа, — это приложение, созданное на основе системы гипермедиа, которое учитывает и использует функциональные возможности гипермедиа этой базовой системы.
Цели
Цель этой книги — дать вам четкое представление о том, чем RESTful архитектура системы гипермедиа отличается от других систем клиент-сервер и каковы сильные (и слабые стороны) подхода гипермедиа. Кроме того, мы надеемся убедить вас в том, что архитектура гипермедиа актуальна для разработчиков, создающих современные веб-приложения.
Мы стремимся предоставить вам инструменты для оценки требований к приложению и ответа на вопросы:
«Могу ли я создать это как приложение, управляемое гипермедиа?»
Мы надеемся, что для многих приложений ответом на этот вопрос будет «Да!»
Макет книги
Книга разбита на три части:
Введение (или повторное введение) в гипермедиа с особым упором на HTML и HTTP. Мы завершим этот обзор основных концепций гипермедиа, создав простое приложение Contact.app в стиле «Web 1.0» для управления контактами.
Наконец, мы рассмотрим совершенно другую гипермедийную систему Hyperview. Hyperview — это мобильная гипермедийная система, связанная с Интернетом, но отличная от него и созданная одним из авторов этой книги — Адамом Степински. Он поддерживает функции, специфичные для мобильных устройств , предоставляя не только мобильную гипермедиа, но и мобильный гипермедиа-клиент. Эти новые компоненты в сочетании с любым HTTP-сервером позволяют создавать мобильные приложения на основе гипермедиа.
Обратите внимание, что каждый раздел в некоторой степени независим от других. Если вы уже хорошо разбираетесь в гипермедиа и в том, как работают базовые приложения Web 1.0, возможно, вам стоит перейти ко второму разделу, посвященному htmx и тому, как создавать современные веб-приложения с использованием гипермедиа. Аналогичным образом, если вы хорошо разбираетесь в HTML и хотите погрузиться в новую мобильную гипермедиа, вы можете перейти к разделу Hyperview.
При этом книга предназначена для чтения по порядку, и разделы htmx и Hyperview основаны на приложении Web 1.0, описанном в конце первого раздела. Более того, даже если вы хорошо разбираетесь во всех концепциях гипермедиа и деталях HTML и HTTP, вероятно, стоит хотя бы просмотреть первые несколько глав, чтобы освежить знания.
Гипермедиа: новое поколение
Гипермедиа в наши дни не является частой темой для обсуждения. Даже многие программисты старшего возраста, выросшие в Интернете в конце 1990-х и начале 2000-х годов, годами не задумывались об этих идеях. Многие молодые веб-разработчики выросли, не зная ничего, кроме одностраничных приложений и фреймворков, которые используются для их создания.
В частности, многие молодые веб-разработчики начали свою карьеру с создания приложений React.js, которые взаимодействуют с сервером Node с помощью JSON API; они, возможно, вообще никогда не узнали о гипермедиа как о системе.
Это трагедия и, честно говоря, неспособность лидеров сообщества веб-разработчиков должным образом общаться и отстаивать подход гипермедиа.
Гипермедиа была отличной идеей! Это все еще так!
К концу этой книги у вас будут инструменты и язык, позволяющие реализовать эту замечательную идею в ваших собственных приложениях. Кроме того, вы сможете донести идеи и концепции гипермедиа-систем до более широкого сообщества веб-разработчиков.
Гипермедиа может конкурировать, гипермедиа может победить , гипермедиа как архитектурный выбор победила подход одностраничного приложения, но только если умные люди (такие как вы) узнают об этом, построят с его помощью и затем расскажут об этом миру.
Помните сообщение? «Будущее не предопределено. Нет другой судьбы, кроме той, которую мы создаём сами».
— Кайл Риз, Терминатор 2: Судный день
HTML-заметки: гипермедиа на практике
Очевидно, что HTML играет центральную роль в истории, которую мы здесь рассказываем. В конце каждой главы мы поделимся тем, что узнали о написании HTML для веб-приложений, управляемых гипермедиа.
Для начала помните, что наши веб-приложения — не острова. Мы пишем HTML не только для конкретного приложения, но и для игры вместе с другими участниками сети. Когда мы пишем, помня о системе гипермедиа , мы можем лучше использовать весь спектр возможностей, доступных в Интернете.
HTML удобен для гипермедиа, если он написан для всего спектра компонентов гипермедиа-системы. Он передает состояние приложения людям, просматривающим наши сайты в браузере, а также людям, слушающим программы чтения с экрана, которые читают сайты вслух. Он передает цели наших сайтов поисковым системам, которые сканируют сайты программным способом. Он также максимально четко передает свое поведение другим разработчикам.
Нет, мы не можем решить каждую проблему с помощью хорошего HTML. Мантра о том, что HTML «доступен по умолчанию», вводит в заблуждение. Мы бы упустили важные возможности, если бы избегали других технологий, таких как JavaScript. И нам все еще нужно много и повсюду тестировать, чтобы убедиться, что все работает так, как ожидалось.
Но хороший HTML позволяет браузерам выполнять за нас большую работу.
Last updated