URL-адрес для каждого запроса каталога-строка

#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 .