Пишу 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, чтобы нельзя было чужой ключ юзать с другой машины, а ключи соответственно привязывать к юзерам. Забанил юзера - автоматом ключ работать перестал.
Вобщем, комрады, я думаю тут у многих опыт есть. Подскажите как быть?