Как лучше организовать доступ к REST API

Пишу REST API для веб сервиса, связка NodeJS+MongoDB+Redis. В API присутствуют три категории методов:
1. Публичные (списки товаров, пользователей и т.д.), которые используются непосредственно на сайте, в том числе неавторизованными пользователями (ajax загрузка оффсетов с товарами, пользователями, подгрузка тултипов и т.д.)
2. Полиморфные, такие как получение информации по конкретному юзеру. Причем если юзер на сайте запрашивает свой профиль - ему должен возвращаться более подробный ответ (количество личных сообщений, например, и т.д.)
3. Приватные - доступ к PUT, PATCH, DELETE методам только для имеющих на то права пользователей (редактирование своих данных), также администраторам - доступ ко всем методам.

Авторизация на сайте происходит по OAuth, предполагается оставить ее на основном домене (site.com/login)
API будет расположен на отдельном поддомене api.site.com. Без кук, сессий и т.д (по феншую).

В большинстве статей рекомендуют как минимум использовать API ключи (абузить могут и все такое, ключ залочил и все отлично). Вариант хороший, но как быть с кэшированием? Тот же урл, но с другим ключом в GET запросе для nginx будет выглядеть другой страницей. Хотя сами по себе данные одни и те же.

В голове полный бардак. И кэшировать нужно как следует (в текущей версии движка кучи ботов орудуют, которые голый html парсят и тонны мусорной активности на сайте создают) и в тоже время разграничение доступа грамотно сделать (админам полные права, юзерам только к своим данным, анонимам - только паблик методы).

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

Вобщем, комрады, я думаю тут у многих опыт есть. Подскажите как быть?
  • Вопрос задан
  • 4433 просмотра
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
ключи передаются в заголовках, а не в get/post параметрах. Так что с кешированием никаких проблем.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы