Как отметил @BrianDriscoll в своем комментарии, при создании URL-адресов для ресурсов в архитектуре REST необходимо соблюдать осторожность, чтобы URL-адреса были просто существительными ( вещи в вашем приложении), а глаголы - это методы HTTP.
Теперь, когда это немного не так, мы можем начать копаться в том, какие существительные в вашем приложении действительно существуют. Судя по всему, у вас есть по сути 3 «вещи» (или существительных ) в вашем домене:
- обращениях
- Подписи под петицией
- Категории петиций
Предполагая, что подпись петиции может быть применена только к одной петиции, я ожидаю, что следующие шаблоны URL будут представлять ваши ресурсы:
/petitions
- Список всех петиций (корень петиции)
/petitions/5
- Одна петиция
/petitions/5/signatures
- Список всех подписей под одной петицией
/petitions/5/signatures/7
- единственная подпись под одной петицией
/categories
- Список всех категорий (корень категории)
/categories/3
- отдельная категория (которая, вероятно, представляет собой список всех петиций в категории)
Затем с этими ресурсами вы можете использовать HTTP-глаголы для управления ресурсами:
POST /petitions
- Создать новую петицию
POST /petitions/9/signatures
- Создать новую подпись под петицией
И наконец, для поиска вы просто передаете строку запроса на ваш /petititions
URL-адрес следующим образом:
GET /petitions?query=blah
Запрос может быть любым, что вам нужно для поисковой системы, и он должен вернуть список петиций, соответствующих этому запросу. То же самое относится и к поиску подписей внутри петиции или петиций в категории.
Этого должно быть достаточно, чтобы начать работу. В конечном счете, все сводится к тому, чтобы решить, какие «вещи» и представления этих вещей нужны вашему приложению, а затем URL-адреса - это просто «имена» этих вещей, так же, как адрес - это «имя» дома. Взаимодействие с этими ресурсами (вещами) осуществляется с помощью различных HTTP-глаголов.
Это лишь поверхностное представление об истинной силе архитектуры REST, которая включает в себя такие вещи, как определение типов контента, чтобы клиенты знали, как перемещаться по вашему домену, и использование гипертекста в качестве движка состояния приложения, чтобы клиенты могли на самом деле сделать навигацию по серверу.