正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

NuGet API

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

これは、NuGetパッケージのAPIドキュメントです。

このAPIは、NuGetパッケージマネージャークライアントで使用され、通常は手動での使用を目的としていません。

GitLabパッケージレジストリからNuGetパッケージをアップロードおよびインストールする方法については、NuGetパッケージレジストリのドキュメントを参照してください。

これらのエンドポイントは、標準のAPI認証方式に準拠していません。どのヘッダーとトークンタイプがサポートされているかの詳細については、NuGetパッケージレジストリドキュメントを参照してください。記載されていない認証方法は、将来削除される可能性があります。

パッケージインデックス

指定されたパッケージのインデックスを返します。これには、利用可能なバージョンのリストが含まれます:

GET projects/:id/packages/nuget/download/:package_name/index
属性必須説明
id文字列はいプロジェクトのIDまたはフルパス。
package_name文字列はいパッケージの名前。
curl --user <username>:<personal_access_token> \
  --url "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文字列はいプロジェクトのIDまたはフルパス。
package_name文字列はいパッケージの名前。
package_version文字列はいパッケージのバージョン。
package_filename文字列はいファイルの名前。
curl --user <username>:<personal_access_token> \
  --url "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> \
  --url "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に書き込まれます。

グループエンドポイントを使用すると、このAPIは404ステータスを返します。このエラーを回避するには、NuGetパッケージマネージャーCLIを使用して、グループエンドポイントでパッケージをインストールします。

パッケージファイルをアップロード

NuGetパッケージファイルをアップロードします:

  • NuGet v3フィードの場合:

    PUT projects/:id/packages/nuget
  • NuGet V2フィードの場合:

    PUT projects/:id/packages/nuget/v2
属性必須説明
id文字列はいプロジェクトのIDまたはフルパス。
package_name文字列はいパッケージの名前。
package_version文字列はいパッケージのバージョン。
package_filename文字列はいファイルの名前。
  • NuGet v3フィードの場合:

    curl --request PUT \
        --form 'package=@path/to/mynugetpkg.1.3.0.17.nupkg' \
        --user <username>:<personal_access_token> \
        --url "https://gitlab.example.com/api/v4/projects/1/packages/nuget/"
  • NuGet v2フィードの場合:

    curl --request PUT \
        --form 'package=@path/to/mynugetpkg.1.3.0.17.nupkg' \
        --user <username>:<personal_access_token> \
        --url "https://gitlab.example.com/api/v4/projects/1/packages/nuget/v2"

シンボルパッケージファイルをアップロード

NuGetシンボルパッケージファイルをアップロードします(.snupkg):

PUT projects/:id/packages/nuget/symbolpackage
属性必須説明
id文字列はいプロジェクトのIDまたはフルパス。
package_name文字列はいパッケージの名前。
package_version文字列はいパッケージのバージョン。
package_filename文字列はいファイルの名前。
curl --request PUT \
     --form 'package=@path/to/mynugetpkg.1.3.0.17.snupkg' \
     --user <username>:<personal_access_token> \
     --url "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolpackage"

ルートプレフィックス

残りのルートでは、それぞれ異なるスコープでリクエストを行う、同一のルートの2つのセットがあります:

  • グループレベルのプレフィックスを使用して、グループのスコープでリクエストを行います。
  • プロジェクトレベルのプレフィックスを使用して、単一のプロジェクトのスコープでリクエストを行います。

このドキュメントの例ではすべて、プロジェクトレベルのプレフィックスを使用しています。

グループレベル

/groups/:id/-/packages/nuget
属性必須説明
id文字列はいグループIDまたは完全なグループパス。

プロジェクトレベル

/projects/:id/packages/nuget
属性必須説明
id文字列はいプロジェクトIDまたは完全なプロジェクトパス。

サービスインデックス

V2ソースフィード/プロトコル

v2 NuGetソースフィードのサービスインデックスを表す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ソースフィード/プロトコル

利用可能なAPIリソースのリストを返します。認証は必須ではありません:

GET <route-prefix>/index

リクエスト例:

curl --url "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文字列はいパッケージの名前。
curl --user <username>:<personal_access_token> \
  --url "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文字列はいパッケージの名前。
package_version文字列はいパッケージのバージョン。
curl --user <username>:<personal_access_token> \
  --url "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文字列はい検索クエリ。
skip整数いいえスキップする結果の数。
take整数いいえ返す結果の数。
prereleaseブール値いいえプレリリースバージョンを含めます。値が指定されていない場合は、trueにデフォルト設定されます。
curl --user <username>:<personal_access_token> \
  --url "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文字列はいプロジェクトのIDまたはフルパス。
package_name文字列はいパッケージの名前。
package_version文字列はいパッケージのバージョン。
curl --request DELETE \
     --user <username>:<personal_access_token> \
     --url "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文字列はいファイルの名前。
signature文字列はいファイルの署名。
Symbolchecksum文字列はい必須ヘッダー。ファイルのチェックサム。
curl --header "Symbolchecksum: SHA256:<file_checksum>" \
  --url "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolfiles/:file_name/:signature/:file_name"

出力をファイルに書き込みます:

curl --header "Symbolchecksum: SHA256:<file_checksum>" \
  --url "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolfiles/mynugetpkg.pdb/k813f89485474661234z7109cve5709eFFFFFFFF/mynugetpkg.pdb" > mynugetpkg.pdb

リクエストに対する考えられるレスポンス:

ステータス説明
200ファイルがダウンロードされました
400無効なリクエスト
403禁止されています
404見つかりません

V2フィードメタデータエンドポイント

$metadataエンドポイント

認証は必須ではありません。V2フィードで使用可能なエンドポイントのメタデータを返します:

GET <route-prefix>/v2/$metadata
curl --url "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 --url "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>

GitLabは、Packages()およびFindPackagesByID()エンドポイントの認証トークンを受信しないため、パッケージの最新バージョンを返すことができません。NuGet v2フィードを使用してパッケージをインストールまたはバージョンアップグレードする場合は、バージョンを指定する必要があります。

curl --url "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>