У ваших publi c API должно быть 2 варианта: персонализированный и неперсонализированный. Позвольте клиентскому программному обеспечению решить, нужна ли ему персонализация.
Это не обязательно означает наличие 2 конечных точек для каждого вызова, вы можете добавить параметр запроса ?personalized=true
. Важной частью является то, что решение остается за клиентом: клиент должен знать, вошел он в систему или нет, и клиент должен запросить персонализированный ответ (и добавить свой токен доступа).
Это означает, что вы не возвращаете 401 Unauthorized из publi c вызывается неперсонализированный вариант API, но во всех остальных случаях вы возвращаете 401, если действительный токен не был предоставлен.
Есть несколько причин для поместите решение в клиент:
Во-первых, сложность клиента: вы не хотите использовать API в предположении, что клиент хочет персонализированный контент только потому, что он вошел в систему. Так как это publi c API, вы не тот человек, который пишет клиента, и вы не знаете, как люди пишут своих клиентов. Во-первых, они могут реализовать токен доступа в каком-то центральном месте, которое всегда отправляет его, если он доступен. Они могут автоматически обновлять токен в потоке, отличном от фактических вызовов API (это будет проблемой для вашего подхода 1). С другой стороны, в большинстве случаев проверка кодов ошибок проще, чем проверка других вещей (что будет проблемой при вашем подходе 2).
Во-вторых, сложность сервера: в какой-то момент зарегистрированный клиент захочет не персонализировать содержание. Это может быть легко или сложно реализовать, в зависимости от того, какая часть вашего серверного кода делает это предположение.
Наконец, гибкость: у вас может быть веб-клиент. У вас может быть мобильный клиент. Клиент может вообще не взаимодействовать с людьми. Клиент может заботиться об эффективности больше, чем о персонализации. Клиент может захотеть избежать специализации, но по-прежнему предоставить возможность входа в систему по другой причине. Вы уже представляете две реализации, позвольте клиенту выбрать.
Что касается количества вызовов, предполагая, что это связано с эффективностью, почти во всех случаях клиент может легко узнать, есть ли у него Время ожидания сеанса, конечно, может истекать, но этот случай обычно не стоит оптимизировать.
Если вы планируете иметь много тайм-аутов сеанса, потому что персонализированный контент содержит конфиденциальную информацию, то ему определенно необходимо чтобы быть частным API, клиенты должны четко указывать на обработку личных данных.
Если персонализированный контент не является конфиденциальным, то ваш логин может возвращать 2 токена: один для частных API и один для неперсонализированных персонализированных API , а токен доступа для неперсонализированных API может оставаться действительным в течение более длительного времени, поэтому у вас не будет много вызовов независимо от того, как вы реализуете персонализацию.