Лучший способ создать 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

это совершенно разумный идентификатор коллекции, сам по себе, и вполне разумно создать иерархию идентификаторов под этим корнем.

Другие вопросы по тегам