Лучший способ создать URI для REST API
Я разрабатываю REST API с аналогичной функциональностью, как в сообщениях и комментариях в Facebook.
URI выглядит так:
/posts/{post-id}/comments/{comment-id}
Чтобы получить все комментарии, я использую стандарт именования URI коллекции. Например:
/posts/{post-id}/comments
Но у меня возникают трудности, когда мне нужны комментарии для всех сообщений. Что было бы лучшим способом включить это, имея в виду, что я хочу использовать этот дизайн только для постов и комментариев?
редактировать
Здесь я должен упомянуть, что ресурсы, которые я использую, немного отличаются от постов и комментариев тем, что в моем дизайне мне придется использовать посты, и я не могу иметь комментарии как совершенно другую сущность. Извините за недопонимание.
Сказал, что рекомендуется создавать URI любым из следующих способов:
/posts//comments
/posts/"any-string"/comments
2 ответа
Ниже URI должен служить цели.
/Комментарии
Для приведенного выше примера давайте разберемся в отношениях сущностей и URI:
посты и комментарии - две сущности сами по себе.
когда вам нужны только сообщения и просто передача post_id
Чтобы получить сообщения:
/posts
Чтобы получить конкретный пост:
/posts/{post_id}
когда вам нужны только комментарии и просто передача comment_id
Чтобы получить все комментарии:
/comments
Чтобы получить конкретный комментарий:
/comments/{comment_id}
когда вам нужны комментарии для данного сообщения, передавая post_id и comment_id
Чтобы получить комментарии к сообщению:
/posts/{post_id}/comments
Чтобы получить конкретный комментарий для данного сообщения:
/posts/{post_id}/comments/{comment_id}
Надеюсь, это решит вашу проблему.
Но у меня возникают трудности, когда мне нужны комментарии для всех сообщений. Что было бы лучшим способом включить это, имея в виду, что я хочу использовать этот дизайн только для постов и комментариев.
HTTP включает в себя концепцию перенаправления - общая возможность сообщить клиенту об отправке запроса на какой-либо другой ресурс.
GET /714eeebd-d89e-4f13-b2a8-cf8a3ee03481 ...
307 Temporary Redirect
Location: /7604abf9-d4f5-42c7-b687-96dbff32649f
Это означает, что если вы выбрали неправильное написание для своего URI, вы можете исправить это позже.
Конструкция REST такова, что идентификаторы непрозрачны - никто, кроме сервера, не должен извлекать информацию из них.
Кроме того, имейте в виду, что ресурсы не являются объектами домена - это нормально, когда ресурсов гораздо больше, чем объектов домена. Любая данная запись в вашей доменной модели может иметь много разных ресурсов, которые ее показывают.
Если вы действительно разрабатываете службу REST и хотите "помочь" клиентам, затруднив мошенничество, вы можете отказаться от идеи использования взломанного идентификатора.
Все что сказано
/comments
это совершенно разумный идентификатор коллекции, сам по себе, и вполне разумно создать иерархию идентификаторов под этим корнем.