使用 REST API 更新 Microsoft Edge 加载项上的扩展

使用此 REST API 以编程方式更新在 Microsoft Edge 加载项上发布的扩展 (或主题) ,以自动执行上传和发布新版本扩展的过程。 可以将这些 REST API 终结点直接集成到持续集成/持续交付 (CI/CD) 管道中,以在 Microsoft Edge 加载项上发布扩展包更新,而无需使用合作伙伴中心。

此 REST API 公开以下项的终结点:

下面介绍了这些终结点。

若要使用此 REST API,请先使用合作伙伴中心的 “发布 API ”页来启用该 API。

若要最初发布新扩展,请使用合作伙伴中心。 若要更新扩展,请手动使用合作伙伴中心,或以编程方式使用此 REST API。

若要提交建议和反馈,请输入 有关加载项 API 的问题

更新 REST API 的版本

从 2024 年 9 月 6 日开始,此更新 REST API 的 v1.1 和 v1 均受支持。 对 v1 的支持将于 2024 年 12 月 31 日结束。

使用的组件

v1.1 使用 API 密钥。 合作伙伴中心的 UI 提供 API 密钥。

REST 终结点使用 v1.1 的特定请求标头。

使用更新 REST API 的概述

若要使用更新 REST API,请执行以下命令:

  1. 合作伙伴中心开发人员仪表板,通过单击旁边的“启用”按钮来启用新体验,选择加入使用 API 密钥的 UI。 有关详细信息,请参阅下面的 在合作伙伴中心启用更新 REST API

  2. 记下客户端 ID 和新 API 密钥。

  3. 根据需要更新身份验证工作流。

  4. 重新配置任何持续集成/持续交付 (CI/CD) 管道,这些管道可能会受到 API 密钥的任何更改的影响,例如,如果要从使用此 REST API 的 v1 进行更改,该 API 使用访问令牌而不是 API 密钥。

  5. 使用 REST 终结点时,请在请求标头中指定 ClientID 和 API 密钥。 有关详细信息,请参阅下面的 使用 API 终结点

详细信息如下所示。

术语

Term 定义
operation REST作,例如 GET 或 POST。
作 ID REST作的 ID。
package 包含 .zip Microsoft Edge 扩展的文件的包。
产品 Microsoft Edge 扩展或主题。 有时称为 Microsoft Edge 加载项
产品 ID 需要发布草稿的产品的产品 ID。 产品 ID 是与合作伙伴中心的产品关联的 128 位 GUID。 例如:d34f98f5-f9b7-42b1-bebb-98707202b21d
提交 正在合作伙伴中心提交到现有产品的更新。 产品的每次更新都是提交,无论状态是 In DraftIn Review还是 In the Store 发布) (。

在合作伙伴中心启用更新 REST API

若要使用 Microsoft Edge 加载项 API,首先需要通过创建 API 凭据在 Microsoft 合作伙伴中心为项目启用 API,如下所示:

  1. 合作伙伴中心开发人员仪表板,登录到用于发布 Edge 扩展的帐户。

  2. “Microsoft Edge 程序”下,选择“ 发布 API”。

  3. 在消息“启用新体验”旁边,单击“ 启用” 按钮:

    在合作伙伴中心为 v1.1 启用 API

    上面的屏幕截图显示了在单击“启用”按钮切换到 v1.1 UI 之前 v1 UI,包括访问令牌 URL机密

  4. “发布 API ”页上,单击“ 创建 API 凭据 ”按钮。 此步骤可能需要几分钟才能完成。

    将自动生成客户端 ID 和新的 API 密钥:

    单击“创建 API 凭据”后,合作伙伴中心的“发布 API”页,现在显示客户端 ID 和 API 密钥

    API 凭据现已创建;你已启用或续订 API。 以下项现在显示在 “发布 API ”页上:

    • 客户端 ID
    • API 密钥
      • 每个 API 密钥的 到期 日期。
  5. 记下以下内容:

    • 客户端 ID
    • 新的 API 密钥

    使用 REST 终结点时,会在请求标头中使用客户端 ID 和 API 密钥。

使用 API 终结点

更新 REST API 公开以下项的终结点:

下面介绍了这些终结点。

若要使用此Microsoft Edge 加载项更新 REST API,必须满足上述条件:

API 密钥和客户端 ID。

API 在终结点根 https://api.addons.microsoftedge.microsoft.com处可用。

没有用于以下项的 REST API 终结点:

  • 创建新产品。
  • 更新产品的元数据,例如说明。

若要创建新产品或更新产品的元数据,必须使用 Microsoft 合作伙伴中心。

上传包以更新现有提交

使用此 REST API 终结点更新加载项的包。 此 API 上传包以更新加载项产品的现有草稿提交。

另请参阅 REST API 参考中的 上传包以更新现有提交以便在 Microsoft Edge 加载项上更新扩展

终结点说明

Endpoint: /v1/products/$productID/submissions/draft/package
Type: POST
Header Parameters: Authorization: ApiKey $ApiKey; X-ClientID: $ClientID; Content-Type: application/zip
Body content: the package file to upload

$productID 是要更新的 Microsoft Edge 扩展的产品 ID。

若要获取产品 ID,请执行以下作:

  1. 登录到合作伙伴中心开发人员仪表板

  2. 转到 Microsoft Edge>概述

  3. 选择要为其提供产品 ID 的扩展。

    此时会打开 “扩展概述 ”页。 产品 ID 显示在页面中。 (产品 ID 也显示为地址栏中的 URL 中的 GUID,介于 和 /packages之间 microsoftedge/ )

  4. 在“ 扩展标识 ”部分 (或从地址栏) ,选择并复制 “产品 ID”。

示例请求

若要上传包以更新现有提交,请在命令提示符处使用 命令, curl 如下所示:

> curl \
-H "Authorization: ApiKey $ApiKey" \
-H "X-ClientID: $ClientID" \
-H "Content-Type: application/zip" \
-X POST \
-T $FILE_NAME \
-v \
https://api.addons.microsoftedge.microsoft.com/v1/products/$productID/submissions/draft/package

如果请求成功且更新过程开始,则会收到带有 202 Accepted 标头的 Location 响应状态代码。 此位置标头包含 operationID 检查更新作状态所需的 。

另请参阅:

  • 上传包以更新REST API 参考中的现有提交,以便在 Microsoft Edge 加载项上更新扩展

检查包上传的状态

使用此 API 检查包上传的状态。

$operationID 是在 “上传包以更新现有提交 ”或“ 发布提交”响应标头中返回的作 ID。

另请参阅在Microsoft Edge 加载项更新扩展的 REST API 参考中的检查发布状态

终结点说明

Endpoint: /v1/products/$productID/submissions/draft/package/operations/$operationID
Type: GET
Header Parameters: Authorization: ApiKey $ApiKey; X-ClientID: $ClientID

示例请求

若要检查包上传的状态,请在命令提示符处使用 curl 命令,如下所示:

> curl \
-H "Authorization: ApiKey $ApiKey" \
-H "X-ClientID: $ClientID" \
-X GET \
-v \
https://api.addons.microsoftedge.microsoft.com/v1/products/$productID/submissions/draft/package/operations/$operationID

另请参阅:

发布提交

使用此 API 在 Microsoft Edge 加载项上发布产品的当前草稿。

另请参阅在 REST API 参考中发布产品草稿提交,了解如何在 Microsoft Edge 加载项上更新扩展

终结点说明

Endpoint: /v1/products/$productID/submissions
Type: POST
Header Parameters: Authorization: ApiKey $ApiKey; X-ClientID: $ClientID
Body content: Notes for certification, in JSON format

示例请求

若要发布提交,请在 curl 命令提示符处使用 命令,如下所示:

> curl \
-H "Authorization: ApiKey $ApiKey" \
-H "X-ClientID: $ClientID" \
-X POST \
-d '{ "notes"="text value" }' \
-v \
https://api.addons.microsoftedge.microsoft.com/v1/products/$productID/submissions

如果请求成功且发布过程开始,则会收到带有202 AcceptedLocation标头的响应状态代码。 此位置标头包含 operationID 检查发布作状态所需的 。

另请参阅:

检查发布状态

使用此 API 检查发布作的状态。

$operationID 是在 “上传包以更新现有提交 ”或“ 发布提交”响应标头中返回的作 ID。

另请参阅在Microsoft Edge 加载项更新扩展的 REST API 参考中的检查发布状态

终结点说明

Endpoint: /v1/products/$productID/submissions/operations/$operationID
Type: GET
Header Parameters: Authorization: ApiKey $ApiKey; X-ClientID: $ClientID

示例请求

若要检查发布状态,请在命令提示符处使用 curl 命令,如下所示:

> curl \
-H "Authorization: ApiKey $ApiKey" \
-H "X-ClientID: $ClientID" \
-X GET \
-v \
https://api.addons.microsoftedge.microsoft.com/v1/products/$productID/submissions/operations/$operationID

另请参阅:

  • 查看 REST API 参考中的发布状态,以更新 Microsoft Edge 加载项上的扩展

示例:检查发布状态并使用 PowerShell 脚本发布扩展

以下代码是 PowerShell 脚本的示例,该脚本使用 REST API 检查扩展的发布状态,并发布该扩展。

若要使用此脚本,请在 $ClientID脚本顶部填写 、 $ClientSecret$ProductID$FilePATH 值。

Param(
    [string] $ClientID = '',
    [string] $ClientSecret = '',
    [string] $ProductID = '',
    [string] $FilePATH = '',
    [int] $RetryLimit = 10,
    [int] $RetryAfterPeriod = 5,
    [string] $ApiEndpoint = 'https://api.addons.microsoftedge.microsoft.com',
    [string] $PublishNotes = 'This is a test publish'
)

function ReadKeyFromJSON($jsonContent, $keyToFetch){
    $jsonContent.TrimStart('{').TrimEnd('}').Split(',') |ForEach-Object {
        $key,$value = $_.Split(':')
        if($key.Trim('"') -eq $keyToFetch) {
            return $value.Trim('"')
        }
    }
    return ''
}

function ReadLocationFromRawContent($jsonRawContent) {
    $jsonRawContent.Split([System.Environment]::NewLine, [System.StringSplitOptions]::RemoveEmptyEntries) | ForEach-Object {
        $key,$value = $_.Split(':')
        if ($key -eq 'Location') {
            return $value
        }
    }
    return ''
}

$PublishNotesBody = @{
    notes = $PublishNotes
}

$GetTokenHeaders = @{
    'Content-Type' = 'application/x-www-form-urlencoded'
}

$UploadHeaders = @{
    "Authorization" = "ApiKey $ClientSecret"
    "Content-Type" = "application/zip"
    "X-ClientID" = "$ClientID"
}

$uploadResponse = Invoke-WebRequest "$ApiEndpoint/v1/products/$ProductID/submissions/draft/package" -Headers $UploadHeaders -Method 'POST' -InFile $FilePATH

$uploadResponse

$uploadOperationId = ''

if($uploadResponse.StatusCode -eq 202) {
    "Upload Successful"
    $uploadOperationId = ReadLocationFromRawContent($uploadResponse.RawContent)
}

$uploadStatusResponse = Invoke-WebRequest "$ApiEndpoint/v1/products/$ProductID/submissions/draft/package/operations/$UploadOperationId" -Headers $UploadHeaders -Method 'GET'

$uploadStatusResponse

$uploadStatus = 'InProgress'

if($uploadStatusResponse.StatusCode -eq 202) {
    "Upload Status Received Successfully"
    $retryCount = 1;
    while($uploadStatus -eq 'InProgress') {
        if($retryCount -gt $RetryLimit) {
            Exit-PSSession
        }
        $uploadStatusResponse = Invoke-WebRequest "$ApiEndpoint/v1/products/$ProductID/submissions/draft/package/operations/$UploadOperationId" -Headers $UploadHeaders -Method 'GET'
        $retryCount = $retryCount + 1
        Start-Sleep -Seconds $RetryAfterPeriod
        $uploadStatus = ReadKeyFromJSON($uploadStatusResponse.Content, 'status')
    }
}

$publishResponse = Invoke-WebRequest "$ApiEndpoint/v1/products/$productID/submissions" -Headers $UploadHeaders -Method 'POST' -Body $PublishNotesBody

$publishResponse

$PublishOperationId = ''

if($publishResponse.StatusCode -eq 202) {
    "Published Successfully"
    $PublishOperationId = ReadLocationFromRawContent($publishResponse.RawContent)
}

$PublishOperationId

$publishStatusResponse = Invoke-WebRequest "$ApiEndpoint/v1/products/$ProductID/submissions/operations/$PublishOperationId" -Headers $UploadHeaders -Method 'GET'

$publishStatusResponse

$publishStatus = 'InProgress'

$publishStatusResponse.Content

if($publishStatusResponse.StatusCode -eq 202) {
    "Publish Status Received Successfully"
    $retryCount = 1;
    while($publishStatus -eq 'InProgress') {
        if($retryCount -gt $RetryLimit) {
            Exit-PSSession
        }
        $publishStatusResponse = Invoke-WebRequest "$ApiEndpoint/v1/products/$ProductID/submissions/operations/$PublishOperationId" -Headers $UploadHeaders -Method 'GET'
        $retryCount = $retryCount + 1
        Start-Sleep -Seconds $RetryAfterPeriod
        $publishStatus = ReadKeyFromJSON($publishStatusResponse.Content, 'status')
    }
}

$publishStatus

另请参阅

GitHub:

  • Microsoft Edge 开发人员文档的存储库中edge-developer的问题

Microsoft 标识平台: