{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: JihuLab.com,私有化部署

{{< /details >}}

这是NuGet软件包的 API 文档。

{{< alert type=”warning” >}}

此 API 由NuGet软件包管理器客户端使用,通常不适用于手动操作。

{{< /alert >}}

有关如何从极狐GitLab软件包注册表上传和安装 NuGet 软件包的说明,请参阅NuGet软件包注册表文档

{{< alert type=”note” >}}

这些端点不遵循标准 API 认证方法。有关支持的请求头和令牌类型的详细信息,请参阅NuGet软件包注册表文档。未记录的认证方法可能会在未来被移除。

{{< /alert >}}

软件包索引

返回给定软件包的索引,其中包括可用版本列表:

GET projects/:id/packages/nuget/download/:package_name/index
属性 类型 必需 描述
id string 项目的 ID 或完整路径。
package_name string 软件包的名称。
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/index"

示例响应:

{
  "versions": [
    "1.3.0.17"
  ]
}

下载软件包文件

下载 NuGet 软件包文件。元数据服务提供此 URL。

GET projects/:id/packages/nuget/download/:package_name/:package_version/:package_filename
属性 类型 必需 描述
id string 项目的 ID 或完整路径。
package_name string 软件包的名称。
package_version string 软件包的版本。
package_filename string 文件的名称。
curl --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"

将输出写入文件:

curl --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:

    PUT projects/:id/packages/nuget
    
  • 对于 NuGet V2 feed:

    PUT projects/:id/packages/nuget/v2
    
属性 类型 必需 描述
id string 项目的 ID 或完整路径。
package_name string 软件包的名称。
package_version string 软件包的版本。
package_filename string 文件的名称。
  • 对于 NuGet v3 feed:

    curl --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:

    curl --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):

PUT projects/:id/packages/nuget/symbolpackage
属性 类型 必需 描述
id string 项目的 ID 或完整路径。
package_name string 软件包的名称。
package_version string 软件包的版本。
package_filename string 文件的名称。
curl --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"

路由前缀

对于剩余的路由,有两组相同的路由,每组在不同的范围内进行请求:

  • 使用群组级前缀在群组的范围内进行请求。
  • 使用项目级前缀在单个项目的范围内进行请求。

本文档中的示例均使用项目级前缀。

群组级

/groups/:id/-/packages/nuget
属性 类型 必需 描述
id string 群组 ID 或完整群组路径。

项目级

/projects/:id/packages/nuget
属性 类型 必需 描述
id string 项目 ID 或完整项目路径。

服务索引

V2 源 feed/协议

返回表示 v2 NuGet 源 feed 服务索引的 XML 文档。不需要认证:

GET <route-prefix>/v2

示例请求:

curl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2"

示例响应:

<?xml version="1.0" encoding="utf-8"?>
<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">
  <workspace>
    <atom:title type="text">Default</atom:title>
    <collection href="Packages">
      <atom:title type="text">Packages</atom:title>
    </collection>
  </workspace>
</service>

V3 源 feed/协议

返回可用 API 资源的列表。不需要认证:

GET <route-prefix>/index

示例请求:

curl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/index"

示例响应:

{
  "version": "3.0.0",
  "resources": [
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query",
      "@type": "SearchQueryService",
      "comment": "Filter and search for packages by keyword."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query",
      "@type": "SearchQueryService/3.0.0-beta",
      "comment": "Filter and search for packages by keyword."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query",
      "@type": "SearchQueryService/3.0.0-rc",
      "comment": "Filter and search for packages by keyword."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata",
      "@type": "RegistrationsBaseUrl",
      "comment": "Get package metadata."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata",
      "@type": "RegistrationsBaseUrl/3.0.0-beta",
      "comment": "Get package metadata."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata",
      "@type": "RegistrationsBaseUrl/3.0.0-rc",
      "comment": "Get package metadata."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download",
      "@type": "PackageBaseAddress/3.0.0",
      "comment": "Get package content (.nupkg)."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget",
      "@type": "PackagePublish/2.0.0",
      "comment": "Push and delete (or unlist) packages."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolpackage",
      "@type": "SymbolPackagePublish/4.9.0",
      "comment": "Push symbol packages."
    }
  ]
}

响应中的 URL 使用了与请求它们相同的路由前缀。如果您使用群组级路由进行请求,返回的 URL 包含 /groups/:id/-

元数据服务

返回软件包的元数据:

GET <route-prefix>/metadata/:package_name/index
属性 类型 必需 描述
package_name string 软件包的名称。
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/index"

示例响应:

{
  "count": 1,
  "items": [
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json",
      "lower": "1.3.0.17",
      "upper": "1.3.0.17",
      "count": 1,
      "items": [
        {
          "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json",
          "packageContent": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/helloworld.1.3.0.17.nupkg",
          "catalogEntry": {
            "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json",
            "authors": "Author1, Author2",
            "dependencyGroups": [],
            "id": "MyNuGetPkg",
            "version": "1.3.0.17",
            "tags": "",
            "packageContent": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/helloworld.1.3.0.17.nupkg",
            "description": "Description of the package",
            "summary": "Description of the package",
            "published": "2023-05-08T17:23:25Z",
          }
        }
      ]
    }
  ]
}

版本元数据服务

返回特定软件包版本的元数据:

GET <route-prefix>/metadata/:package_name/:package_version
属性 类型 必需 描述
package_name string 软件包的名称。
package_version string 软件包的版本。
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17"

示例响应:

{
  "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json",
  "packageContent": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/helloworld.1.3.0.17.nupkg",
  "catalogEntry": {
    "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json",
    "authors": "Author1, Author2",
    "dependencyGroups": [],
    "id": "MyNuGetPkg",
    "version": "1.3.0.17",
    "tags": "",
    "packageContent": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/helloworld.1.3.0.17.nupkg",
    "description": "Description of the package",
    "summary": "Description of the package",
    "published": "2023-05-08T17:23:25Z",
  }
}

搜索服务

给定查询,在存储库中搜索 NuGet 软件包:

GET <route-prefix>/query
属性 类型 必需 描述
q string 搜索查询。
skip integer 要跳过的结果数量。
take integer 要返回的结果数量。
prerelease boolean 包括预发布版本。默认值为 true 如果未提供值。
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query?q=MyNuGet"

示例响应:

{
  "totalHits": 1,
  "data": [
    {
      "@type": "Package",
      "authors": "Author1, Author2",
      "id": "MyNuGetPkg",
      "title": "MyNuGetPkg",
      "description": "Description of the package",
      "summary": "Description of the package",
      "totalDownloads": 0,
      "verified": true,
      "version": "1.3.0.17",
      "versions": [
        {
          "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata/MyNuGetPkg/1.3.0.17.json",
          "version": "1.3.0.17",
          "downloads": 0
        }
      ],
      "tags": ""
    }
  ]
}

删除服务

删除 NuGet 软件包:

DELETE projects/:id/packages/nuget/:package_name/:package_version
属性 类型 必需 描述
id string 项目的 ID 或完整路径。
package_name string 软件包的名称。
package_version string 软件包的版本。
curl --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):

GET <route-prefix>/symbolfiles/:file_name/:signature/:file_name
属性 类型 必需 描述
file_name string 文件的名称。
signature string 文件的签名。
Symbolchecksum string 必需的请求头。文件的校验和。
curl --header "Symbolchecksum: SHA256:<file_checksum>" "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolfiles/:file_name/:signature/:file_name"

将输出写入文件:

curl --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 元数据:

GET <route-prefix>/v2/$metadata
curl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/$metadata"

示例响应:

<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" Version="1.0">
  <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="2.0" m:MaxDataServiceVersion="2.0">
    <Schema xmlns="http://schemas.microsoft.com/ado/2006/04/edm" Namespace="NuGetGallery.OData">
      <EntityType Name="V2FeedPackage" m:HasStream="true">
        <Key>
          <PropertyRef Name="Id"/>
          <PropertyRef Name="Version"/>
        </Key>
        <Property Name="Id" Type="Edm.String" Nullable="false"/>
        <Property Name="Version" Type="Edm.String" Nullable="false"/>
        <Property Name="Authors" Type="Edm.String"/>
        <Property Name="Dependencies" Type="Edm.String"/>
        <Property Name="Description" Type="Edm.String"/>
        <Property Name="DownloadCount" Type="Edm.Int64" Nullable="false"/>
        <Property Name="IconUrl" Type="Edm.String"/>
        <Property Name="Published" Type="Edm.DateTime" Nullable="false"/>
        <Property Name="ProjectUrl" Type="Edm.String"/>
        <Property Name="Tags" Type="Edm.String"/>
        <Property Name="Title" Type="Edm.String"/>
        <Property Name="LicenseUrl" Type="Edm.String"/>
      </EntityType>
    </Schema>
    <Schema xmlns="http://schemas.microsoft.com/ado/2006/04/edm" Namespace="NuGetGallery">
      <EntityContainer Name="V2FeedContext" m:IsDefaultEntityContainer="true">
        <EntitySet Name="Packages" EntityType="NuGetGallery.OData.V2FeedPackage"/>
        <FunctionImport Name="FindPackagesById" ReturnType="Collection(NuGetGallery.OData.V2FeedPackage)" EntitySet="Packages">
          <Parameter Name="id" Type="Edm.String" FixedLength="false" Unicode="false"/>
        </FunctionImport>
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</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 文档。
curl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/Packages(Id='mynugetpkg',Version='1.0.0')"

示例响应:

<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">
    <id>https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/Packages(Id='mynugetpkg',Version='1.0.0')</id>
    <category term="V2FeedPackage" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
    <title type="text">mynugetpkg</title>
    <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"/>
    <m:properties>
      <d:Version>1.0.0</d:Version>
    </m:properties>
 </entry>

{{< alert type=”note” >}}

极狐GitLab不会为Packages()FindPackagesByID()端点接收认证令牌,因此无法返回软件包的最新版本。您必须在使用 NuGet v2 feed 安装或升级软件包时提供版本。

{{< /alert >}}

curl "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/Packages()?$filter=(tolower(Id) eq 'mynugetpkg')"

示例响应:

<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">
    <id>https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2/Packages(Id='mynugetpkg',Version='')</id>
    <category term="V2FeedPackage" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
    <title type="text">mynugetpkg</title>
    <content type="application/zip" src="https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2"/>
    <m:properties>
      <d:Version></d:Version>
    </m:properties>
 </entry>