#url #directory #query-string
#url #каталог #строка запроса
Вопрос:
Я создаю веб-фреймворк, основанный на иерархической модульной конструкции. У меня есть компоненты, расширяющие другие компоненты.
Для доступа к этим компонентам я ищу хороший синтаксис в URL. Поскольку я использую Node.js , У меня нет никаких ограничений со стороны существующего программного обеспечения веб-сервера. Компоненты — это просто структурированные объекты в JavaScript, которые могут быть объединены вместе.
Схема URL, которую я использую, такова:
/componentA/componentBextendsA/componentCextendsB
Теперь я хочу присвоить каждому компоненту его собственные параметры. Интуитивно я хотел сделать это с помощью строк запросов на основе каталогов, например:
/componentA?foo=baramp;hello=world/componentB?foo=test/componentC?pie=
- ComponentA
foo
=bar
hello
=world
- ComponentB
foo
=test
- ComponentC
pie
= пусто
Аргументы могут перекрываться, поскольку один компонент может обрабатывать тот же параметр запроса, что и другой.
Мои вопросы таковы:
- могут ли клиенты сломаться из-за этого?
- существует ли уже существующая реализация directory-query-strings?
Комментарии:
1. Узел. JS не имеет отношения к вопросу: он не зависит от платформы / сервера.
Ответ №1:
С точки зрения компонента URI, URI /componentA?foo=baramp;hello=world/componentB?foo=test/componentC?pie=
состоит из пути /componentA
и запроса foo=baramp;hello=world/componentB?foo=test/componentC?pie=
. И внутри компонента запроса оба /
и ?
являются допустимыми простыми символами. Таким образом, этот URI должен обрабатываться клиентами правильно.
Если вы хотите проанализировать этот URI описанным вами способом, вы можете сделать следующее:
var url = "/componentA?foo=baramp;hello=world/componentB?foo=test/componentC?pie=";
var re = /([^?] )(?:?([^?/]*))/g, match, components = [];
while (match = re.exec(url)) {
components.push({path: match[1], query: match[2]});
}
Ответ №2:
Я думаю, что это не очень хорошая идея. Текущая тенденция заключается в упрощении URL-адресов для наглядности и потому, что SEO. Я не знаю, работает ли это на самом деле, но вставка параметра в ?var=value
формат устарела. Я разработал свой собственный фреймворк php, возможно, я мог бы поделиться некоторыми идеями, если вы дадите мне больше информации. (Извините за мой английский)
Комментарии:
1. Ну, в основном я предоставляю данные для каждого компонента. Другие компоненты могут использовать эти данные для расширения. Например,
/files/
показывает список файлов,/files?search=foo
отфильтрует файлы,/files?search=foo/somefile.txt/
покажет файлsomefile.txt
независимо от параметра поиска. Это работает вроде как в Unix pipe|
, который передает выходные данные одной команды на вход другой.2. Возможно, это слишком много информации для передачи ее таким образом. Проблема с использованием позиционного порядка, я думаю, что компонент может иметь переменное количество аргументов. Как насчет загрузки скелета и загрузки каждого компонента с помощью ajax? Платформа Elgg использует этот способ для профилей пользователей.
3. Я не использую ни скелет, ни AJAX. Я создаю веб-сервер с нуля, используя Node.js .