Идеи для протокола взяты как из gopher'а, так и из HTTP. Концептуально
он ближе ко второму, но средствами к первому.
- структура сети представлена в виде графа, где
- вершины это ресурсы сети - документы/файлы
- ребра/дуги это ссылки, связывающие документы между собой
- к ресурсу на сервере можно обратиться по некоторому идентификатору
- к ресурсу можно обратиться разными режимами (применить некоторую операцию (глагол))
- получить атрибуты/метаданные о ресурсе
- получить содержимое ресурса
- получить связанные ссылки ресурса
- ссылки, возможно, могут иметь атрибуты/тэги
Реализация
-----------
Самым простым вариантом реализации будет вариант, где режим обращения будет
указан в запросе, как метод HTTP. Проблематичным будет необходимость отправки
нескольких запросов для одного ресурса, хотя это можно решить возможностью
опционального (когда в запросе содержится указание на нужные операции) или
безусловного получения всей совокупности данных о ресурсе.
Вариант 1
C: inf:/res/document
S: ok
size: 4096
type: text/plain
..
C: get:/res/document
S: </res/document contents>
..
C: ref:/res/document
S: /res/document20 Reference 1
/res/document22 Reference 2
/res Documents index
Вариант 2
C: /res/document
S: ok
size: 4096
type: text/plain
refs:
/res/document20 Reference 1
/res/document22 Reference 2
/res Documents index
body:
< .. /res/document contents .. >
Вариант 3
C: /res/document inf+get
S: ok
size: 4096
type: text/plain
body:
< .. /res/document contents .. >
Альтернативный вариант - stateful протокол, где клиент отправляет идентификатор
ресурса и получает служебную информацию и список допустимых режимов доступа
(подобно HTTP HEAD и OPTIONS).
C: /res/document
S: ok
options: ref get
size: 4096
type: text/plain
C: ref
S: /res/document20 Reference 1
/res/document22 Reference 2
/res Documents index
C: bye
При отображении иерархической структуры, вроде файловой системы, на такую
модель возникает проблема - с одной стороны файлы не содержат никаких ссылок
на другие файлы (возможно, только на каталог, в котором находятся), с другой
каталог, как ресурс, содержит только ссылки и, возможно, метаданные.