24 дня индивеба: Микропаб

Вчера я упомянул, что публиковать HTML всё ещё сложнее, чем может быть, особенно с мобильных устройств.

В целом публикация HTML людьми идея совершенно не новая, давным давно существовали GeoCities и Народ.ру.

Но социальные сети сделали публикацию ещё проще: просто заполни формочку. У Тумблера были разные форматы постов: картинки, аудио, видео, текст, цитата. Но в подавляющем большинстве сайтом можно постить в основном заметки, с картинками и, изредка, видео.

Индивеб-сообщество создало протокол Micropub, который описывает именно эту часть опыта использования сети. У спецификации Micropub есть статус «Рекомендация» в терминах W3C.

В протоколе участвуют трое: клиент, сервер и медиа-эндпоинт. Клиент — там где пользователь пишет пост. На самом деле, речь не только про обычные посты — микропаб как протокол нейтрален, главное, чтобы то, что постишь, можно было представить в виде микроформатов.

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

За счёт нейтральности протокола, уже есть с десяток разных клиентов: они могут быть везде, откуда можно отправить форму.

Quill, один из клиентов

Клиент на самом деле не обязан даже быть предназначен для непосредственного использования человеком. Так был клиент OwnYourGram, который автоматически доставал картинки из инстаграма и постил их через микропаб на твой сайт (сейчас у них проблемы из-за того, что инстаграм блокирует их запросы).

Есть клиенты для мобильных (но можно написать и свой!)

Indigenous для iOS

Есть клиенты, которые сделаны в виде расширения для браузера.

В рамках проекта friendware я работаю над своим микропаб-клиентом, пишу его на Svelte (когда будет хотя бы красиво скриншотабельно, то обязательно покажу).

В целом, мне кажется, что самые интересные автоматические клиенты ещё не написаны. Интернет видел много разных твиттер-ботов, а написать индивеб-бота ещё проще — нужно просто отправить форму с нужным текстом и заголовком Authorization. Так, например, можно отправить простую заметку с текстом hello world, зная токен:

fetch('/micropub', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer секретный-токен'
  },
  data: 'h=entry&content=hello+world'
})

С токенами не всё просто, но похоже на интеграцию с Twitter или Facebook: внутри используется OAuth 2. Подробнее можно почитать на вики, а тут можно пройти весь флоу получения токена вручную (чтобы, например, получить токен для скрипта или для тестирования).

С серверами, на мой взгляд, всё сложнее — они требуют динамики. Если статические файлы можно сложить куда угодно, то здесь потребуется сервер. И отдельно требуется поддержка авторизации — как правильно принять и проверить этот самый токен.

Впрочем, можно взять уже и готовую серверную реализацию, и подпилить под свои нужды. За счёт того, что Микропаб — это стандарт, сервер и клиент можно писать отдельно, и если оба соответствуют спецификации, то любые клиент и сервер будут работать вместе.

Веб не предназначался только для чтения — но у нас долго не было стандартизированного способа писать в Веб. С 2017 года такой стандарт есть.

День 6: федерация · День 8: логин

Тим опубликовал

Если понравился этот пост, то подпишись на мой Патреон