NuGet API
- Tier: 基础版,专业版,旗舰版
- Offering: JihuLab.com,私有化部署
这是NuGet软件包的 API 文档。
此 API 由[NuGet软件包管理器客户端](https://www.nuget.org/)使用,通常不适用于手动操作。
有关如何从极狐GitLab软件包注册表上传和安装 NuGet 软件包的说明,请参阅NuGet软件包注册表文档。
这些端点不遵循标准 API 认证方法。有关支持的请求头和令牌类型的详细信息,请参阅[NuGet软件包注册表文档](../../user/packages/nuget_repository/_index.md)。未记录的认证方法可能会在未来被移除。
软件包索引
返回给定软件包的索引,其中包括可用版本列表:
plaintextGET projects/:id/packages/nuget/download/:package_name/index
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| id | string | 是 | 项目的 ID 或完整路径。 |
| package_name | string | 是 | 软件包的名称。 |
shellcurl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/index"
示例响应:
json{ "versions": [ "1.3.0.17" ] }
下载软件包文件
下载 NuGet 软件包文件。元数据服务提供此 URL。
plaintextGET projects/:id/packages/nuget/download/:package_name/:package_version/:package_filename
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| id | string | 是 | 项目的 ID 或完整路径。 |
| package_name | string | 是 | 软件包的名称。 |
| package_version | string | 是 | 软件包的版本。 |
| package_filename | string | 是 | 文件的名称。 |
shellcurl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/mynugetpkg.1.3.0.17.nupkg"
将输出写入文件:
shellcurl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/mynugetpkg.1.3.0.17.nupkg" > MyNuGetPkg.1.3.0.17.nupkg
这会将下载的文件写入当前目录下的 MyNuGetPkg.1.3.0.17.nupkg。
上传软件包文件
上传 NuGet 软件包文件:
-
对于 NuGet v3 feed:
plaintextPUT projects/:id/packages/nuget -
对于 NuGet V2 feed:
plaintextPUT projects/:id/packages/nuget/v2
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| id | string | 是 | 项目的 ID 或完整路径。 |
| package_name | string | 是 | 软件包的名称。 |
| package_version | string | 是 | 软件包的版本。 |
| package_filename | string | 是 | 文件的名称。 |
-
对于 NuGet v3 feed:
shellcurl --request PUT \ --form 'package=@path/to/mynugetpkg.1.3.0.17.nupkg' \ --user <username>:<personal_access_token> \ "https://gitlab.example.com/api/v4/projects/1/packages/nuget/" -
对于 NuGet v2 feed:
shellcurl --request PUT \ --form 'package=@path/to/mynugetpkg.1.3.0.17.nupkg' \ --user <username>:<personal_access_token> \ "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2"
上传符号软件包文件
上传 NuGet 符号软件包文件 (.snupkg):
plaintextPUT projects/:id/packages/nuget/symbolpackage
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| id | string | 是 | 项目的 ID 或完整路径。 |
| package_name | string | 是 | 软件包的名称。 |
| package_version | string | 是 | 软件包的版本。 |
| package_filename | string | 是 | 文件的名称。 |
shellcurl --request PUT \ --form 'package=@path/to/mynugetpkg.1.3.0.17.snupkg' \ --user <username>:<personal_access_token> \ "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolpackage"
路由前缀
对于剩余的路由,有两组相同的路由,每组在不同的范围内进行请求:
- 使用群组级前缀在群组的范围内进行请求。
- 使用项目级前缀在单个项目的范围内进行请求。
本文档中的示例均使用项目级前缀。
群组级
plaintext/groups/:id/-/packages/nuget
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| id | string | 是 | 群组 ID 或完整群组路径。 |
项目级
plaintext/projects/:id/packages/nuget
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| id | string | 是 | 项目 ID 或完整项目路径。 |
服务索引
V2 源 feed/协议
返回表示 v2 NuGet 源 feed 服务索引的 XML 文档。不需要认证:
plaintextGET <route-prefix>/v2
示例请求:
shellcurl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2"
示例响应:
xml1<?xml version="1.0" encoding="utf-8"?> 2<service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xml:base="https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2"> 3 <workspace> 4 <atom:title type="text">Default</atom:title> 5 <collection href="Packages"> 6 <atom:title type="text">Packages</atom:title> 7 </collection> 8 </workspace> 9</service>
V3 源 feed/协议
返回可用 API 资源的列表。不需要认证:
plaintextGET <route-prefix>/index
示例请求:
shellcurl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/index"
示例响应:
json1{ 2 "version": "3.0.0", 3 "resources": [ 4 { 5 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query", 6 "@type": "SearchQueryService", 7 "comment": "Filter and search for packages by keyword." 8 }, 9 { 10 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query", 11 "@type": "SearchQueryService/3.0.0-beta", 12 "comment": "Filter and search for packages by keyword." 13 }, 14 { 15 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query", 16 "@type": "SearchQueryService/3.0.0-rc", 17 "comment": "Filter and search for packages by keyword." 18 }, 19 { 20 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata", 21 "@type": "RegistrationsBaseUrl", 22 "comment": "Get package metadata." 23 }, 24 { 25 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata", 26 "@type": "RegistrationsBaseUrl/3.0.0-beta", 27 "comment": "Get package metadata." 28 }, 29 { 30 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata", 31 "@type": "RegistrationsBaseUrl/3.0.0-rc", 32 "comment": "Get package metadata." 33 }, 34 { 35 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download", 36 "@type": "PackageBaseAddress/3.0.0", 37 "comment": "Get package content (.nupkg)." 38 }, 39 { 40 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget", 41 "@type": "PackagePublish/2.0.0", 42 "comment": "Push and delete (or unlist) packages." 43 }, 44 { 45 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolpackage", 46 "@type": "SymbolPackagePublish/4.9.0", 47 "comment": "Push symbol packages." 48 } 49 ] 50}
响应中的 URL 使用了与请求它们相同的路由前缀。如果您使用群组级路由进行请求,返回的 URL 包含 /groups/:id/-。
元数据服务
返回软件包的元数据:
plaintextGET <route-prefix>/metadata/:package_name/index
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| package_name | string | 是 | 软件包的名称。 |
shellcurl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/index"
示例响应:
json1{ 2 "count": 1, 3 "items": [ 4 { 5 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json", 6 "lower": "1.3.0.17", 7 "upper": "1.3.0.17", 8 "count": 1, 9 "items": [ 10 { 11 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json", 12 "packageContent": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/helloworld.1.3.0.17.nupkg", 13 "catalogEntry": { 14 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json", 15 "authors": "Author1, Author2", 16 "dependencyGroups": [], 17 "id": "MyNuGetPkg", 18 "version": "1.3.0.17", 19 "tags": "", 20 "packageContent": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/helloworld.1.3.0.17.nupkg", 21 "description": "Description of the package", 22 "summary": "Description of the package", 23 "published": "2023-05-08T17:23:25Z", 24 } 25 } 26 ] 27 } 28 ] 29}
版本元数据服务
返回特定软件包版本的元数据:
plaintextGET <route-prefix>/metadata/:package_name/:package_version
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| package_name | string | 是 | 软件包的名称。 |
| package_version | string | 是 | 软件包的版本。 |
shellcurl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17"
示例响应:
json1{ 2 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json", 3 "packageContent": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/helloworld.1.3.0.17.nupkg", 4 "catalogEntry": { 5 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json", 6 "authors": "Author1, Author2", 7 "dependencyGroups": [], 8 "id": "MyNuGetPkg", 9 "version": "1.3.0.17", 10 "tags": "", 11 "packageContent": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/helloworld.1.3.0.17.nupkg", 12 "description": "Description of the package", 13 "summary": "Description of the package", 14 "published": "2023-05-08T17:23:25Z", 15 } 16}
搜索服务
给定查询,在存储库中搜索 NuGet 软件包:
plaintextGET <route-prefix>/query
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| q | string | 是 | 搜索查询。 |
| skip | integer | 否 | 要跳过的结果数量。 |
| take | integer | 否 | 要返回的结果数量。 |
| prerelease | boolean | 否 | 包括预发布版本。默认值为 true 如果未提供值。 |
shellcurl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query?q=MyNuGet"
示例响应:
json1{ 2 "totalHits": 1, 3 "data": [ 4 { 5 "@type": "Package", 6 "authors": "Author1, Author2", 7 "id": "MyNuGetPkg", 8 "title": "MyNuGetPkg", 9 "description": "Description of the package", 10 "summary": "Description of the package", 11 "totalDownloads": 0, 12 "verified": true, 13 "version": "1.3.0.17", 14 "versions": [ 15 { 16 "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json", 17 "version": "1.3.0.17", 18 "downloads": 0 19 } 20 ], 21 "tags": "" 22 } 23 ] 24}
删除服务
删除 NuGet 软件包:
plaintextDELETE projects/:id/packages/nuget/:package_name/:package_version
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| id | string | 是 | 项目的 ID 或完整路径。 |
| package_name | string | 是 | 软件包的名称。 |
| package_version | string | 是 | 软件包的版本。 |
shellcurl --request DELETE \ --user <username>:<personal_access_token> \ "https://gitlab.example.com/api/v4/projects/1/packages/nuget/MyNuGetPkg/1.3.0.17"
可能的请求响应:
| 状态 | 描述 |
|---|---|
| 204 | 软件包已删除 |
| 401 | 未授权 |
| 403 | 禁止 |
| 404 | 未找到 |
下载调试符号文件 .pdb
下载调试符号文件 (.pdb):
plaintextGET <route-prefix>/symbolfiles/:file_name/:signature/:file_name
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
| file_name | string | 是 | 文件的名称。 |
| signature | string | 是 | 文件的签名。 |
| Symbolchecksum | string | 是 | 必需的请求头。文件的校验和。 |
shellcurl --header "Symbolchecksum: SHA256:<file_checksum>" "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolfiles/:file_name/:signature/:file_name"
将输出写入文件:
shellcurl --header "Symbolchecksum: SHA256:<file_checksum>" "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolfiles/mynugetpkg.pdb/k813f89485474661234z7109cve5709eFFFFFFFF/mynugetpkg.pdb" > mynugetpkg.pdb
可能的请求响应:
| 状态 | 描述 |
|---|---|
| 200 | 文件已下载 |
| 400 | 错误请求 |
| 403 | 禁止 |
| 404 | 未找到 |
V2 Feed 元数据端点
$metadata 端点
不需要认证。返回可用端点的 V2 feed 元数据:
plaintextGET <route-prefix>/v2/$metadata
shellcurl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/$metadata"
示例响应:
xml1<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" Version="1.0"> 2 <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="2.0" m:MaxDataServiceVersion="2.0"> 3 <Schema xmlns="http://schemas.microsoft.com/ado/2006/04/edm" Namespace="NuGetGallery.OData"> 4 <EntityType Name="V2FeedPackage" m:HasStream="true"> 5 <Key> 6 <PropertyRef Name="Id"/> 7 <PropertyRef Name="Version"/> 8 </Key> 9 <Property Name="Id" Type="Edm.String" Nullable="false"/> 10 <Property Name="Version" Type="Edm.String" Nullable="false"/> 11 <Property Name="Authors" Type="Edm.String"/> 12 <Property Name="Dependencies" Type="Edm.String"/> 13 <Property Name="Description" Type="Edm.String"/> 14 <Property Name="DownloadCount" Type="Edm.Int64" Nullable="false"/> 15 <Property Name="IconUrl" Type="Edm.String"/> 16 <Property Name="Published" Type="Edm.DateTime" Nullable="false"/> 17 <Property Name="ProjectUrl" Type="Edm.String"/> 18 <Property Name="Tags" Type="Edm.String"/> 19 <Property Name="Title" Type="Edm.String"/> 20 <Property Name="LicenseUrl" Type="Edm.String"/> 21 </EntityType> 22 </Schema> 23 <Schema xmlns="http://schemas.microsoft.com/ado/2006/04/edm" Namespace="NuGetGallery"> 24 <EntityContainer Name="V2FeedContext" m:IsDefaultEntityContainer="true"> 25 <EntitySet Name="Packages" EntityType="NuGetGallery.OData.V2FeedPackage"/> 26 <FunctionImport Name="FindPackagesById" ReturnType="Collection(NuGetGallery.OData.V2FeedPackage)" EntitySet="Packages"> 27 <Parameter Name="id" Type="Edm.String" FixedLength="false" Unicode="false"/> 28 </FunctionImport> 29 </EntityContainer> 30 </Schema> 31 </edmx:DataServices> 32</edmx:Edmx>
OData 软件包条目端点
| 端点 | 描述 |
|---|---|
| GET projects/:id/packages/nuget/v2/Packages()?$filter=(tolower(Id) eq '<package_name>') | 返回包含给定名称软件包信息的 OData XML 文档。 |
| GET projects/:id/packages/nuget/v2/FindPackagesById()?id='<package_name>' | 返回包含给定名称软件包信息的 OData XML 文档。 |
| GET projects/:id/packages/nuget/v2/Packages(Id='<package_name>',Version='<package_version>') | 返回包含给定名称和版本软件包信息的 OData XML 文档。 |
shellcurl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/Packages(Id='mynugetpkg',Version='1.0.0')"
示例响应:
xml1<entry xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xml:base="https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2"> 2 <id>https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/Packages(Id='mynugetpkg',Version='1.0.0')</id> 3 <category term="V2FeedPackage" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> 4 <title type="text">mynugetpkg</title> 5 <content type="application/zip" src="https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/mynugetpkg/1.0.0/mynugetpkg.1.0.0.nupkg"/> 6 <m:properties> 7 <d:Version>1.0.0</d:Version> 8 </m:properties> 9 </entry>
极狐GitLab不会为`Packages()`和`FindPackagesByID()`端点接收认证令牌,因此无法返回软件包的最新版本。您必须在使用 NuGet v2 feed 安装或升级软件包时提供版本。
shellcurl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/Packages()?$filter=(tolower(Id) eq 'mynugetpkg')"
示例响应:
xml1<entry xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xml:base="https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2"> 2 <id>https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/Packages(Id='mynugetpkg',Version='')</id> 3 <category term="V2FeedPackage" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> 4 <title type="text">mynugetpkg</title> 5 <content type="application/zip" src="https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2"/> 6 <m:properties> 7 <d:Version></d:Version> 8 </m:properties> 9 </entry>