Лучший способ создать URI для REST API - PullRequest
0 голосов
/ 27 июня 2018

Я разрабатываю REST API с аналогичной функциональностью, что и в сообщениях и комментариях в Facebook.

URI выглядит так:

/posts/{post-id}/comments/{comment-id}

Для получения всех комментариев я использую стандарт именования URI коллекции. Например:

/posts/{post-id}/comments

Но у меня возникают трудности, когда мне нужны комментарии ко всем сообщениям. Что было бы лучшим способом включить это, имея в виду, что я хочу использовать этот дизайн только для постов и комментариев?

Редактировать

Я должен упомянуть здесь, что ресурсы, которые я использую, немного отличаются от постов и комментариев в том смысле, что в моем дизайне мне придется использовать посты и не может иметь комментарии как совершенно другую сущность. Извините за недоразумение.

Сказал, что рекомендуется создавать URI любым из следующих способов:

/posts//comments

/posts/"any-string"/comments

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Ниже URI должен служить цели.

/ комментарии

Для приведенного выше примера давайте разберемся в отношениях сущностей и URI:

posts и comments - две самостоятельные сущности.

когда вам нужны только сообщения и только передача 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}

Надеюсь, это решит вашу проблему.

0 голосов
/ 27 июня 2018

Но у меня возникают трудности, когда мне нужны комментарии ко всем сообщениям. Что было бы лучшим способом включить это, имея в виду, что я хочу использовать этот дизайн только для постов и комментариев.

HTTP включает в себя концепцию перенаправление - общее средство для сообщения клиенту об отправке запроса на какой-либо другой ресурс.

GET /714eeebd-d89e-4f13-b2a8-cf8a3ee03481 ...

307 Temporary Redirect
Location: /7604abf9-d4f5-42c7-b687-96dbff32649f

Что означает , так это то, что если вы выбрали неправильное написание для своего URI, вы можете исправить его позже.

Конструкция REST такова, что идентификаторы непрозрачны - никто, кроме сервера, не должен извлекать информацию из них.

Кроме того, имейте в виду, что ресурсы не являются объектами домена - это нормально, если ресурсов намного больше, чем у вас есть объекты домена. Любая данная запись в модели вашего домена может иметь много разных ресурсов, которые ее показывают.

Если вы действительно разрабатываете службу REST и хотите «помочь» клиентам, затруднив мошенничество, вы можете отказаться от идеи использования взломанного идентификатора .

Все, что сказал

/comments

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

...