接受 HTTP headers 或 JSON POST 数据中的 api 键

Accepting api keys in HTTP headers or JSON POST data

我有一个 HTTP JSON 端点 localhost:8000/resource/,它将 JSON 数据作为输入,returns JSON 作为输出。我现在正在向端点添加基于 API Key 的授权。有两种方法可以在此端点接受 API Key

方法A:在请求中headers

示例 python 代码:

import requests
headers = {
   'API-Key': '<my-api-key>',
}
r = requests.post('http://localhost:8000/resource/',
                   json={'input': <value>}, 
                   headers=headers)

方法 B:在 JSON 数据本身中

示例 python 代码:

import requests
r = requests.post('http://localhost:8000/resource/', 
                   json={'input': <value>, 'API-Key': '<my-api-key>'},)

我通常会注意到 方法 A 被采用。 API 密钥与其他 json 数据一起传递的后一种方法有什么问题吗?

我认为这与清晰度有关,API 密钥与输入无关,它只是一种授权形式。

处理路由等的大型框架能够根据特定 headers 进行过滤,并且根据请求中的特定输入形式进行过滤会很麻烦 body将需要用户干预并为其获取该值。 Headers 更简单,足以满足 hash-table.

中的简单数据