Что использовать для пространства в REST URI?

Что должно я использовать:

  • /findby/name/{Сначала} _ {в последний раз}
  • /findby/name/{Сначала} - {в последний раз}
  • /findby/name/{Сначала}; {в последний раз}
  • /findby/name/first/{Первый}/last/{в последний раз}

и т.д.

URI представляет ресурс Человека с 1 именем, но я должен логически разделить первое от последнего для идентификации каждого. Мне отчасти нравится последний пример, потому что я могу сделать:

  • /findby/name/first/{Сначала}
  • /findby/name/last/{В последний раз}
  • /findby/name/first/{Первый}/last/{в последний раз}
16
задан Droo 9 April 2010 в 19:39
поделиться

3 ответа

Вы всегда можете просто принять пробелы :-) (строка запроса экранирована как% 20)

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

15
ответ дан 30 November 2019 в 16:41
поделиться

Мне нравится использовать "_", потому что это наиболее похожий на пробел символ, который делает URL-адрес читаемым.

Однако предоставленные вами URL-адреса не кажутся полноценными RESTful. URL-адрес должен представлять ресурс, но в вашем случае он представляет собой поисковый запрос. Я бы сделал что-то вроде этого:

/people/{first}_{last}
/people/{first}_{last}_(2)  - in case there are duplicate names

В этом случае вам нужно сохранить slug ( {first} _ {last} , {first} _ {last} _ (2) ) для каждой записи пользователя. Другой вариант добавления идентификатора, чтобы вам не приходилось возиться с ярлыками:

/people/{id}-{first}_{last}

А для поиска вы можете использовать URL-адреса, не относящиеся к RESTful:

/people/search?last={last}&first={first}

Они будут отображать список результатов поиска, а URL-адреса над страницей для конкретный человек.

Я не думаю, что есть смысл делать URL поиска RESTful, пользователи, скорее всего, захотят делиться ссылками на страницу определенного человека, а не на страницы результатов поиска. Что касается поисковых систем, избегайте наличия одного и того же контента для нескольких URL-адресов, и вам даже следует запретить индексацию страниц результатов поиска в robots.txt

2
ответ дан 30 November 2019 в 16:41
поделиться

Для поиска:

/people/search?first={first}&last={last}
/people/search?first=george&last=washington

Для путей к ресурсам:

/people/{id}-{first}-{last}
/people/35-george-washington

Если вы используете Ruby on Rails v3 в стандартной конфигурации, вот как вы можете это сделать.

# set up the /people/{param} piece
# config/routes.rb
My::Application.routes.draw do
  resources :people
end

# set up that {param} should be {id}-{first}-{last}
# app/models/person.rb
class Person < ActiveRecord::Base
  def to_param
    "#{id}-#{to_slug(first_name)}-#{to_slug(last_name)}"
  end
end

Обратите внимание, что ваше предложение / findby / name / first / {first} / last / {last} не дает успокоения. Он не называет ресурсы и не называет их кратко.

2
ответ дан 30 November 2019 в 16:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: