Как вернуть случайные элементы без проблем?

StackOverflow https://stackoverflow.com/questions/401191

  •  03-07-2019
  •  | 
  •  

Вопрос

Мой дизайн предоставляет два вида ресурсов:

  1. Изображения
  2. Теги

Я бы хотел, чтобы клиенты могли запрашивать случайные изображения по своим тегам.Например:Дайте мне случайные изображения с пометками "Нью-Йорк" и "Зима".Как бы выглядел дизайн RESTful в этом случае?

Это было полезно?

Решение

Чтобы подвести итог всему обсуждению в комментариях, и не менять мое первоначальное предложение, вот к чему я пришел в конце концов:

Вы хотите получить доступ к изображениям с помощью тегов;каждый тег относится к набору изображений.Поскольку данный тег может использоваться намного чаще, чем другой (скажем, фотографии Нью-Йорка используются намного чаще, чем фотографии Чикаго), вам следует использовать конфигурацию RESTful, которая допускает кэширование, чтобы вы могли кэшировать фотографии Нью-Йорка.ИМХО, решением было бы:

  • Каждое изображение имеет фиксированный URI:

    http://www.example.com/images/12345
    
  • Каждый тег также имеет URI:

    http://www.example.com/tags/New_York/random
    

    Этот URI действует как случайный диспетчер изображений на множестве;он возвращает 303 См . Другое ответ, перенаправляющий на случайное изображение из набора. По определению, этот URI не должен быть кэширован, а фиксированный должен быть, и браузер не должен понимать, что перенаправление на второй ресурс является постоянным, поэтому оно оптимально.

  • Вы даже можете получить доступ ко всему набору через:

    http://www.example.com/tags/New_York
    

    Такой доступ привел бы к 300 Вариантов выбора ответ;он возвращает весь набор (в виде URI, а не в виде изображений!) браузеру, и браузер решает, что с ним делать.

  • Вы также можете использовать пересечение различных тегов:

    http://www.example.com/tags/New_York/Autumn/Manhattan/random
    http://www.example.com/tags/Autumn/Manhattan/New_York/random (equivalent to the previous one)
    http://www.example.com/tags/New_York/girls/Summer/random
    etc.
    

Таким образом, у вас есть фиксированный URI для каждого изображения, фиксированный URI для каждого тега и связанного с ним набора фотографий и фиксированный URI для случайного диспетчера, который есть у каждого тега.Вам не нужно использовать какие-либо параметры GET в качестве других потенциальных решений, так что это настолько RESTful, насколько вы можете получить.

Другие советы

Я сам боролся с этим вопросом.В итоге мы реализовали HttpResponseRedirect из, например:

http://www.example.com/randomNewYorkImage

к случайному изображению Нью-Йорка:

http://www.example.com/images/New_York/1234.

Первый ресурс можно представить как случайный диспетчер изображений из Нью-Йорка.Это решение больше загрузит сервер, так как ему будут запрошены два ресурса, но оно настолько RESTful, насколько вы можете получить.

Отредактированный:Кроме того, если вы выполняете кэширование, каждое изображение будет находиться в кэше, и ваш сервер перейдет от отправки изображения к отправке только перенаправления, поскольку кэш перехватит второй запрос и, таким образом, снизит нагрузку на ваш сервер.

Многомерная идентификация ресурсов является сложной задачей.

Ваш ресурс - это изображение, так что это ваш URI.Кроме того, конкретное изображение имеет определенный URI, который никогда не меняется.

Ваш "по тегу" - это неидентифицирующий атрибут ресурса.Для этого может использоваться строка запроса belp.

Вот моя первая мысль.

  • http://www.example.com/MyStuff/image/ID/ -- конкретное изображение по идентификатору
  • http://www.example.com/MyStuff/image/?tag=название тега -- случайное изображение с заданным тегом, неявно, count=1.
  • http://www.example.com/MyStuff/image/?tag=название тега&count=all -- все изображения с заданным тегом в случайном порядке (count=1 является значением по умолчанию, которое даст вам произвольное изображение)

Я бы сделал что-то вроде http://foo.com/image/tagged/sometag/random и перестань терять из-за этого сон.

В этом я согласен с "Триптихом".В некотором смысле добавление random в конец URI делает это похожим на операцию, но если она ограничена тегом, то на самом деле вы просто уточняете контекст.

В его примере:

/изображение/с тегом/sometag/ случайное

ресурс изображений -> область тегирования (все изображения с тегами) -> определенный тег (все изображения с тегом X) -> случайный (ресурс из ограниченного списка изображений с тегом X)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top