Ключ API - в содержании или заголовке

14

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

Если я помещу это в заголовок, я могу придумать универсальный метод для его извлечения, который можно использовать во всех сервисах, однако спецификация, которую я получил, требует его в теле (то есть в строке JSON, включенной как часть сериализованный объект в теле POST).

garryp
источник
Также обратите внимание, что не все типы запросов должны иметь тело, и если вы хотите проверить запрос без тела, ключ должен быть в заголовке.
Whymarrh

Ответы:

11

В HTTP есть Authorizationзаголовок для этого.

Хотя он обычно используется для предоставления учетных данных пользователей, в случае API он может содержать идентификатор клиента и соответствующий ключ API.

Есть несколько преимуществ:

  • Поддержка из разных рамок. Многие фреймворки ожидают Authorizationзаголовок для аутентификации. Отказ от его использования заставит писать дополнительный код для подачи этих структур с пользовательскими значениями.

  • Поддержка из разных инструментов. Например, CURL.

  • Меньше «WTF, где я могу найти / поместить этот ключ API ?!» от новых разработчиков, присоединившихся к команде (или разработчиков, разрабатывающих новых клиентов для вашего API).

  • Затем вы можете использовать определения кода состояния HTTP, например 401 Unauthorized, для которых :

    Ответ ДОЛЖЕН включать поле заголовка WWW-Authenticate [...]. Клиент МОЖЕТ повторить запрос с подходящим полем заголовка авторизации.

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

Арсений Мурзенко
источник