Я размышлял над правильным методом определения коллекций ресурсов, которые имеют взаимозависимость.
Например, рассмотрим "документы" и "комментарии", которые независимо доступны через URI:
/documents/{doc-uri}
/comments/{comment-id}
Однако нам обычно требуется сбор комментариев, связанных с конкретным документом. Который создает дизайнерский вопрос о том, как это должно быть защищено.
Я вижу несколько основных параметров:
1.) Поставьте коллекцию uri после документа uri для комментариев
GET /documents/{doc-uri}/comments/
2.) Укажите параметр коллекции комментариев для выбора по документу
GET /comments/{comment-id}?related-doc={doc-uri}
3.) Используйте согласование контента, чтобы запросить соответствующие комментарии, которые будут возвращены через заголовок Accept.
// Get all the comments for a document
GET /documents/{doc-uri} Accept: application/vnd.comments+xml
// Create a new comment
POST /documents/{doc-uri} Content-Type: application/vnd.comment+xml <comment>...</comment>
Метод 1 имеет то преимущество, что автоматически помещает комментарии в контексте документа. Что также приятно при создании, обновлении и удалении комментариев с помощью POST/PUT. Однако он не обеспечивает глобальный доступ к комментариям вне контекста документа. Поэтому, если мы хотим выполнить поиск по всем комментариям в системе, нам нужен метод # 2.
Метод 2 предлагает многие из тех же преимуществ, что и # 1, однако создание комментария без контекста документа не имеет смысла. Поскольку комментарии должны быть явно связаны с документом.
Метод 3 интересен с точки зрения GET и POST/create, но получает своеобразное волосатое обновление и удаление.
Я могу видеть pro и con для всех этих методов, поэтому я ищу еще несколько рекомендаций от кого-то, кто, возможно, подошел и решил эту проблему раньше.
Я рассматриваю возможность выполнения обоих методов 1 и 2, поэтому я могу предоставить всю необходимую функциональность, но я обеспокоен тем, что я могу быть слишком сложным/дублирующим.