Вложенный REST Routing - PullRequest
       16

Вложенный REST Routing

0 голосов
/ 21 июля 2011

Простая ситуация: у меня есть сервер с тысячами картинок на нем. Я хочу создать спокойный бизнес-слой, который позволит мне добавлять теги (категории) к каждой картинке. Это просто Я также хочу получить списки картинок, которые соответствуют одному тегу. Это тоже просто. Но теперь я также хочу создать метод, который принимает список тегов и который будет возвращать только изображения, которые соответствуют всем этим тегам. Это немного сложнее, но я все еще могу это сделать.
Проблема в этом, однако. Скажем, мой сервис отдыха находится на сайте pictures.example.com, я хочу сделать следующие звонки:

  • pictures.example.com / Image / {ID} - должно возвращать определенное изображение
  • pictures.example.com / Images - должен вернуть список идентификаторов изображений.
  • pictures.example.com / Images / {TAG} - должен возвращать список идентификаторов изображений с этим тегом.
  • pictures.example.com / Images / {TAG} / {TAG} - должен возвращать список идентификаторов изображений с этими тегами.
  • pictures.example.com / Images / {TAG} / {TAG} / {TAG} - должен возвращать список идентификаторов изображений с этими тегами.
  • pictures.example.com / Images / {TAG} / {TAG} / {TAG} / {TAG} / {TAG} - должен возвращать список идентификаторов изображений с этими тегами.
  • прочее ...

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

Да, я знаю, что могут быть другие способы отправить такой список туда и обратно. Даже лучше, но я хочу знать, возможно ли это. И если это легко создать. Таким образом, URL не может отличаться от приведенных выше примеров.
Я думаю, все должно быть просто. Просто не могу найти хорошее решение ...

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Полагаю, вы можете понять, как на самом деле написать запрос SQL или файловой системы для фильтрации по нескольким тегам. Например, в CherryPy подключить этот URL-адрес так же просто, как:

class Images:
    @cherrypy.tools.json_out()
    def index(self):
        return [cherrypy.url("/images/" + x.id)
                for x in mylib.images()]
    index.exposed = True

    @cherrypy.tools.json_out()
    def default(self, *tags):
        return [cherrypy.url("/images/" + x.id)
                for x in mylib.images(*tags)]
    default.exposed = True

... где аргумент *tags - это кортеж всех сегментов пути /{TAG}, которые отправляет клиент. Другие веб-фреймворки будут иметь аналогичные опции.

1 голос
/ 21 июля 2011

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

http://pictures.example.com/images?tags=tag1,tag2,tag3,tag4

Будет гораздо проще работать на сервере, и я не вижу преимуществ в подходе сегмента пути, с которым у вас возникают проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...