/keys 路由允许您创建、管理和删除 API 密钥。要使用这些端点,您必须首先设置主密钥。一旦设置了主密钥,您可以通过在请求头中提供它,或使用具有 keys.getkeys.createkeys.updatekeys.delete 操作权限的 API 密钥来访问这些端点。

在没有设置主密钥的情况下访问 /keys 路由会抛出 missing_master_key 错误。

密钥对象

{
  "name": "默认搜索 API 密钥",
  "description": "用于从前端代码进行搜索",
  "key": "0a6e572506c52ab0bd6195921575d23092b7f0c284ab4ac86d12346c33057f99",
  "uid": "74c9c733-3368-4738-bbe5-1d18a5fecb37",
  "actions": [
    "search"
  ],
  "indexes": [
    "*"
  ],
  "expiresAt": null,
  "createdAt": "2021-08-11T10:00:00Z",
  "updatedAt": "2021-08-11T10:00:00Z"
}

name

类型: 字符串

默认值: null

描述: 密钥的可读名称

description

类型: 字符串

默认值: null

描述: 密钥的描述。您可以在此添加关于密钥的任何重要信息

uid

类型: 字符串

默认值: 不适用

描述: 用于标识 API 密钥的 uuid v4。如果未指定,Meilisearch 会自动生成

key

类型: 字符串

默认值: 不适用

描述:由 Meilisearch 通过哈希处理 uid 和主密钥生成的字母数字键值,用于 API 密钥创建时。在向受保护的 Meilisearch 实例发起调用时用于授权认证。

该值也用作路径变量 {key}更新删除获取特定密钥。

如果主密钥变更,所有 key 值将自动变更。

自定义 API 密钥具有确定性:keyuid 和主密钥的 SHA256 哈希值。要复用自定义 API 密钥,需使用相同主密钥启动新实例,并以相同 uid 重新创建 API 密钥。

默认 API 密钥无法跨实例复用。Meilisearch 会在首次启动实例时自动生成其 uid

actions

类型:数组

默认值:不适用

描述: 一个表示该密钥允许执行的 API 操作的字符串数组。API 操作只能在授权的 indexes 上执行。使用 ["*"] 表示允许所有操作。

您可以使用 * 作为通配符来访问 documentsindexestaskssettingsstatsdumps 操作的所有端点。例如,documents.* 授予所有文档操作的访问权限。

出于安全考虑,我们不建议创建可以执行所有操作的密钥。

名称描述
search提供对 POSTGET 搜索端点的访问权限
documents.add提供对 添加文档更新文档 端点的访问权限
documents.get提供对 获取单个文档使用 POST 获取文档使用 GET 获取文档 端点的访问权限
documents.delete提供对 删除单个文档删除所有文档批量删除按条件删除 端点的访问权限
indexes.create提供对 创建索引 端点的访问权限
indexes.get提供对 获取单个索引列出所有索引 端点的访问权限。未授权的 indexes 将从响应中省略
indexes.update提供对 更新索引 端点的访问权限
indexes.delete提供对 删除索引 端点的访问权限
indexes.swap提供对交换索引端点的访问权限。未授权的 indexes 不会被交换
tasks.get提供对 获取单个任务获取任务列表 端点的访问权限。来自未授权 indexes 的任务将从响应中省略
tasks.cancel提供对 取消任务 端点的访问权限。来自未授权 indexes 的任务不会被取消
tasks.delete提供对 删除任务 端点的访问权限。来自未授权 indexes 的任务不会被删除
settings.get提供对 获取设置 端点及其所有子路由等效端点的访问权限
settings.update提供对 更新设置重置设置 端点及其所有子路由等效端点的访问权限
stats.get提供对 获取索引统计信息获取所有索引统计信息 端点的访问权限。对于后者,未授权的 indexes 将从响应中省略
dumps.create提供对 创建转储文件 端点的访问权限。不受 indexes 限制
snapshots.create提供对 创建快照 端点的访问权限。不受 indexes 限制
version提供对 获取 Meilisearch 版本 端点的访问权限
keys.get提供对 获取所有密钥 端点的访问权限
keys.create提供对 创建密钥 端点的访问权限
keys.update提供对 更新密钥 端点的访问权限
keys.delete提供对 删除密钥 端点的访问权限
network.get提供对 获取网络对象 端点的访问权限
network.update提供对 更新网络对象 端点的访问权限

indexes(索引)

类型: 数组

默认值: 无

描述: 该 API 密钥被授权操作的索引数组。使用 ["*"] 表示所有索引。密钥只能在指定的索引上执行其允许的操作

你也可以在字符串末尾使用 * 通配符,这将允许 API 密钥访问所有以该字符串开头的索引。例如,使用 "indexes": ["movie*"] 将允许 API 密钥访问 moviesmovie_ratings 索引。

expiresAt(过期时间)

类型: 字符串

默认值: 无

描述: 密钥的过期日期和时间,使用 RFC 3339 格式表示。如果密钥永不过期则为 null

一旦密钥超过 expiresAt 指定的日期,使用该密钥进行 API 授权将返回错误。

createdAt(创建时间)

类型: 字符串

默认值: null

描述: 密钥的创建日期和时间,使用 RFC 3339 格式表示

updatedAt(更新时间)

类型: 字符串

默认值: null

描述: 密钥最后更新的日期和时间,使用 RFC 3339 格式表示

获取所有密钥

GET
/keys

返回最近创建的 20 个密钥,结果存储在 results 数组中。响应中包含已过期的密钥,但不包含已删除的密钥。

查询参数

可以使用 offsetlimit 查询参数对结果进行分页。

查询参数默认值描述
offset0跳过的密钥数量
limit20返回的密钥数量

响应

名称类型描述
results数组包含密钥对象的数组
offset整数跳过的密钥数量
limit整数返回的密钥数量
total整数API密钥的总数

示例

curl \
  -X GET 'MEILISEARCH_URL/keys?limit=3' \
  -H 'Authorization: Bearer MASTER_KEY'

响应: 200 Ok

{
  "results": [
    {
      "name": null,
      "description": "管理文档: 产品/评论API密钥",
      "key": "d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4",
      "uid": "6062abda-a5aa-4414-ac91-ecd7944c0f8d",
      "actions": [
        "documents.add",
        "documents.delete"
      ],
      "indexes": [
        "prod*",
        "reviews"
      ],
      "expiresAt": "2021-12-31T23:59:59Z",
      "createdAt": "2021-10-12T00:00:00Z",
      "updatedAt": "2021-10-13T15:00:00Z"
    },
    {
      "name": "默认搜索API密钥",
      "description": "用于前端代码执行搜索",
      "key": "0a6e572506c52ab0bd6195921575d23092b7f0c284ab4ac86d12346c33057f99",
      "uid": "74c9c733-3368-4738-bbe5-1d18a5fecb37",
      "actions": [
        "search"
      ],
      "indexes": [
        "*"
      ],
      "expiresAt": null,
      "createdAt": "2021-08-11T10:00:00Z",
      "updatedAt": "2021-08-11T10:00:00Z"
    },
    {
      "name": "默认管理员API密钥",
      "description": "用于非搜索操作。注意!不要在前端公开暴露此密钥",
      "key": "380689dd379232519a54d15935750cc7625620a2ea2fc06907cb40ba5b421b6f",
      "uid": "20f7e4c4-612c-4dd1-b783-7934cc038213",
      "actions": [
        "*"
      ],
      "indexes": [
        "*"
      ],
      "expiresAt": null,
      "createdAt": "2021-08-11T10:00:00Z",
      "updatedAt": "2021-08-11T10:00:00Z"
    }
  ],
  "offset": 0,
  "limit": 3,
  "total": 7
}

API密钥按其createdAt日期降序排列显示。这意味着最近创建的密钥会优先显示。

获取单个密钥

GET
/keys/{key_or_uid}

获取指定密钥的信息。尝试使用此端点查询不存在或已删除的密钥会导致错误

路径参数

需要提供有效的 API keyuid

名称类型描述
key *字符串请求的 API key 的 key
uid *字符串请求的 API key 的 uid 标识

示例

curl \
  -X GET 'MEILISEARCH_URL/keys/6062abda-a5aa-4414-ac91-ecd7944c0f8d' \
  -H 'Authorization: Bearer MASTER_KEY'

响应: 200 Ok

{
  "name": null,
  "description": "添加文档: 产品 API 密钥",
  "key": "d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4",
  "uid": "6062abda-a5aa-4414-ac91-ecd7944c0f8d",
  "actions": [
    "documents.add"
  ],
  "indexes": [
    "products"
  ],
  "expiresAt": "2021-11-13T00:00:00Z",
  "createdAt": "2021-11-12T10:00:00Z",
  "updatedAt": "2021-11-12T10:00:00Z"
}

关于这些字段的解释,请参阅 key 对象

创建密钥

POST
/keys

根据提供的描述、权限和过期日期创建一个 API 密钥。

请求体

名称类型默认值描述
actions *数组该密钥允许的 API 操作列表。["*"] 表示允许所有操作
indexes *数组该密钥有权操作的索引数组。["*"] 表示允许所有索引
expiresAt *字符串密钥过期日期和时间,使用 RFC 3339 格式表示。null 表示密钥永不过期
name字符串null密钥的可读名称
uid字符串用于标识 API 密钥的 uuid v4。如果未指定,将由 Meilisearch 自动生成
description字符串null密钥的可选描述信息

示例

curl \
  -X POST 'MEILISEARCH_URL/keys' \
  -H 'Authorization: Bearer MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "description": "添加文档:产品API密钥",
    "actions": ["documents.add"],
    "indexes": ["products"],
    "expiresAt": "2042-04-02T00:42:42Z"
  }'

响应: 201 Created

{
  "name": null,
  "description": "管理文档: 产品/评论API密钥",
  "key": "d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4",
  "uid": "6062abda-a5aa-4414-ac91-ecd7944c0f8d",
  "actions": [
    "documents.add"
  ],
  "indexes": [
    "products"
  ],
  "expiresAt": "2021-11-13T00:00:00Z",
  "createdAt": "2021-11-12T10:00:00Z",
  "updatedAt": "2021-11-12T10:00:00Z"
}

更新密钥

PATCH
/keys/{key_or_uid}

更新API密钥的namedescription字段。

密钥更新是部分更新。这意味着您只需要提供想要更新的字段,未包含在请求体中的字段将保持不变。

路径参数

需要提供有效的API keyuid

名称类型描述
key *字符串请求API密钥的key
uid *字符串请求API密钥的uid标识符

请求体

名称类型默认值描述
name字符串null密钥的人类可读名称
description字符串null密钥的可选描述信息

示例

curl \
  -X PATCH 'MEILISEARCH_URL/keys/6062abda-a5aa-4414-ac91-ecd7944c0f8d' \
  -H 'Authorization: Bearer MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "name": "Products/Reviews API key",
    "description": "Manage documents: Products/Reviews API key"
  }'

响应: 200 成功

{
  "name": "产品/评价API密钥",
  "description": "管理文档: 产品/评价API密钥",
  "key": "d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4",
  "uid": "6062abda-a5aa-4414-ac91-ecd7944c0f8d",
  "actions": [
    "documents.add",
    "documents.delete"
  ],
  "indexes": [
    "products",
    "reviews"
  ],
  "expiresAt": "2021-12-31T23:59:59Z",
  "createdAt": "2021-10-12T00:00:00Z",
  "updatedAt": "2021-10-13T15:00:00Z"
}

删除密钥

DELETE
/keys/{key_or_uid}

删除指定的API密钥。

路径参数

需要提供有效的API keyuid

名称类型描述
key *字符串请求API密钥的key
uid *字符串请求API密钥的uid标识符

示例

curl \
  -X DELETE 'MEILISEARCH_URL/keys/6062abda-a5aa-4414-ac91-ecd7944c0f8d' \
  -H 'Authorization: Bearer MASTER_KEY'

响应: 204 无内容