Дизайн REST API аутентифицированный пользователь: / продукты или / /продукты

#rest #api

#rest #API

Вопрос:

Я создаю веб-приложение с VueJS в качестве интерфейса и аутентифицирую пользователя в API с помощью JWT.

Если я хочу, чтобы API отображал только пользовательские продукты (отфильтрованные), должен ли маршрут быть:

/api/продукты

и серверная часть выполняет фильтр или

/api/идентификатор пользователя/продукты

и ограничить доступ к продуктам других пользователей

Ответ №1:

У вас будет идентификатор пользователя из JWT, поэтому для нас мы просто используем /api/products в нашем программном обеспечении. Мы избегаем использования нескольких источников данных, поскольку это может создать путаницу, и все в JWT аутентифицируется, поэтому мы можем доверять этому.

Если бы я хотел разрешить пользователю просматривать продукты других пользователей, я бы использовал /api/products/search?user_id=XXX для гибкой поисковой системы, которую можно было бы расширить для поиска продуктов по другим критериям.

Ответ №2:

Я считаю, что лучше сделать идентификатор пользователя частью uri. В конечном счете, это субъективно, но у него есть несколько преимуществ:

  1. Это действительно проясняет, что список продуктов в этом случае является подчиненным для пользователей. Нет сомнений, что это «весь список», если он выглядит как вспомогательный ресурс.
  2. Это позволяет пользователям в будущем получать доступ к спискам продуктов других пользователей.
  3. Мне нравится идея предоставления каждому объекту в моем API полностью уникального URI. Для меня у каждого пользователя в вашем примере есть личный список продуктов, и каждый список продуктов является уникальным ресурсом.