NuGet 服务器 API

NuGet 服务器 API 是一组 HTTP 终结点,可用于下载包、提取元数据、发布新包,以及执行官方 NuGet 客户端中可用的大多数其他作。

Visual Studio、nuget.exe和 .NET CLI 中的 NuGet 客户端使用此 API 来执行 NuGet作,例如 dotnet restore、在 Visual Studio UI 中搜索和 nuget.exe push

请注意,在某些情况下,nuget.org 具有其他包源不强制实施的其他要求。 nuget.org 协议记录了这些差异。

有关可用 nuget.exe 版本的简单枚举和下载,请参阅 tools.json 终结点。

如果要实现 NuGet 包存储库,另请参阅 实现指南 了解其他要求和建议。

服务索引

API 的入口点是已知位置中的 JSON 文档。 本文档称为 服务索引。 nuget.org 的服务索引的位置 https://api.nuget.org/v3/index.json

此 JSON 文档包含 资源列表,这些资源提供不同的功能并满足不同的用例。

支持 API 的客户端应接受其中一个或多个服务索引 URL 作为连接到相应包源的方法。

有关服务索引的详细信息,请参阅 其 API 参考

版本控制

API 是 NuGet 的 HTTP 协议版本 3。 此协议有时称为“V3 API”。 这些参考文档将此版本的协议称为“API”。

服务索引架构版本由服务索引中的 version 属性指示。 API 要求版本字符串具有主版本号 3。 由于对服务索引架构进行了非重大更改,因此版本字符串的次要版本将增加。

旧客户端(如 nuget.exe 2.x)不支持 V3 API,仅支持此处未记录的旧 V2 API。

NuGet V3 API 命名为此类 API,因为它是 V2 API 的后续版本,它是由官方 NuGet 客户端的 2.x 版本实现的基于 OData 的协议。 V3 API 首先受官方 NuGet 客户端的 3.0 版本支持,仍然是 NuGet 客户端支持的最新主要协议版本,4.0 及版本。

自 API 首次发布以来,对 API 进行了非中断性协议更改。

资源和架构

服务索引 描述各种资源。 当前支持的一组资源如下所示:

资源名称 必填 描述
目录 所有包事件的完整记录。
PackageBaseAddress 是的 获取包内容(.nupkg)。
PackageDetailsUriTemplate 构造 URL 以访问包详细信息网页。
PackagePublish 是的 推送和删除(或取消列出)包。
ReadmeUriTemplate 构造 URL 以访问包的自述文件。
RegistrationsBaseUrl 是的 获取包元数据。
ReportAbuseUriTemplate 构造 URL 以访问报告滥用网页。
RepositorySignatures 获取用于存储库签名的证书。
SearchAutocompleteService 通过子字符串发现包 ID 和版本。
SearchQueryService 是的 按关键字筛选和搜索包。
SymbolPackagePublish 推送符号包。
VulnerabilityInfo 具有已知漏洞的包。

通常,API 资源返回的所有非二进制数据都使用 JSON 进行序列化。 服务索引中每个资源返回的响应架构是针对该资源单独定义的。 有关每个资源的详细信息,请参阅上面列出的主题。

将来,随着协议的发展,新属性可能会添加到 JSON 响应中。 要使客户端成为未来证明,实现不应假定响应架构是最终的,并且不能包含额外的数据。 应忽略实现无法理解的所有属性。

注意

当源未实现 SearchAutocompleteService 应正常禁用任何自动完成行为。 如果未实现 ReportAbuseUriTemplate,官方 NuGet 客户端将回退到 nuget.org 的报告滥用 URL(由 NuGet/Home#4924跟踪)。 其他客户端可能选择不向用户显示报告滥用 URL。

nuget.org 上的未记录资源

nuget.org 上的 V3 服务索引具有上面未记录的某些资源。 由于没有记录资源,有几个原因。

首先,我们不会记录用作 nuget.org 实现详细信息的资源。SearchGalleryQueryService 属于此类别。 NuGetGallery 使用此资源将一些 V2 (OData) 查询委托给我们的搜索索引,而不是使用数据库。 由于可伸缩性原因引入了此资源,不适合外部使用。

其次,我们不会记录从未在官方客户端的 RTM 版本中交付的资源。 PackageDisplayMetadataUriTemplatePackageVersionDisplayMetadataUriTemplate 属于此类别。

第三,我们不会记录与 V2 协议紧密耦合的资源,而 V2 协议本身是故意撤消的。 LegacyGallery 资源属于此类别。 此资源允许 V3 服务索引指向相应的 V2 源 URL。 此资源支持 nuget.exe list

如果未在此处记录资源,我们 强烈 建议不要依赖它们。 我们可能会删除或更改这些未记录的资源的行为,这可能会以意外的方式破坏实现。

时间 戳

API 返回的所有时间戳都是 UTC,或者使用 ISO 8601 表示形式 指定。

HTTP 方法

动词
获取 执行只读作,通常检索数据。
获取相应 GET 请求的响应标头。
创建不存在的资源,或者如果资源确实存在,请更新它。 某些资源可能不支持更新。
删除 删除或取消列出资源。

HTTP 状态代码

法典 描述
200 成功,并且有一个响应正文。
201 成功,并创建了资源。
202 成功后,请求已接受,但某些工作可能仍不完整且异步完成。
204 成功,但没有响应正文。
301 永久重定向。
302 临时重定向。
400 URL 或请求正文中的参数无效。
401 提供的凭据无效。
403 给定提供的凭据后,不允许执行该作。
404 请求的资源不存在。
409 请求与现有资源冲突。
500 服务遇到意外错误。
503 服务暂时不可用。

对 API 终结点发出的任何 GET 请求都可能会返回 HTTP 重定向(301 或 302)。 客户端应通过观察 Location 标头并发出后续 GET来正常处理此类重定向。 有关特定终结点的文档不会显式标注可以使用重定向的位置。

对于 500 级状态代码,客户端可以实现合理的重试机制。 当遇到任何 500 级状态代码或 TCP/DNS 错误时,官方 NuGet 客户端重试三次。

HTTP 请求标头

名字 描述
X-NuGet-ApiKey 推送和删除需要,请参阅 PackagePublish 资源
X-NuGet-Client-Version 弃用 并替换为 X-NuGet-Protocol-Version
X-NuGet-Protocol-Version 在某些情况下,仅在 nuget.org 上是必需的,请参阅 nuget.org 协议
X-NuGet-Session-Id 可选。 NuGet 客户端 v4.7+ 标识属于同一 NuGet 客户端会话的 HTTP 请求。

对于与 PackageReference中的单个还原相关的所有作,X-NuGet-Session-Id 都有单个值。 对于其他方案(例如自动完成和 packages.config 还原),由于代码的分解方式,可能会有多个不同的会话 ID。

认证

身份验证将留给要定义的包源实现。 对于 nuget.org,只有 PackagePublish 资源需要通过特殊的 API 密钥标头进行身份验证。 有关详细信息,请参阅 PackagePublish 资源