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 版本中交付的资源。
PackageDisplayMetadataUriTemplate
和 PackageVersionDisplayMetadataUriTemplate
属于此类别。
第三,我们不会记录与 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
资源。