NuGet API

NuGet PackagesのAPIドキュメントです。

caution
このAPIはNuGetパッケージ・マネージャ・クライアントによって使用され、一般的に手動で使用することは意図されていません。

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

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

パッケージインデックス

GitLab 12.8 で導入されました。

利用可能なバージョンのリストを含む、指定したパッケージのインデックスを返します:

GET projects/:id/packages/nuget/download/:package_name/index
属性種類必須説明
id文字列です。yesプロジェクトのIDまたはフルパス。
package_name文字列です。yesパッケージ名。
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/index"

応答例

{
  "versions": [
    "1.3.0.17"
  ]
}

パッケージファイルのダウンロード

GitLab 12.8 で導入されました。

NuGetパッケージファイルをダウンロードします。メタデータサービスはこのURLを提供します。

GET projects/:id/packages/nuget/download/:package_name/:package_version/:package_filename
属性種類必須説明
id文字列です。yesプロジェクトのIDまたはフルパス。
package_name文字列です。yesパッケージ名。
package_version文字列です。yesパッケージのバージョン。
package_filename文字列です。yesファイル名
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 に書き込みます。

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

  • GitLab 12.8 で NuGet v3 フィード用に導入されました。
  • GitLab 16.2 で NuGet v2 フィード用に導入

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

  • NuGet v3 フィードの場合:

     PUT projects/:id/packages/nuget
    
  • NuGet V2 フィード用:

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

     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 フィード用:

     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"
    

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

GitLab 12.8 で導入されました。

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

PUT projects/:id/packages/nuget/symbolpackage
属性種類必須説明
id文字列です。yesプロジェクトのIDまたはフルパス。
package_name文字列です。yesパッケージ名。
package_version文字列です。yesパッケージのバージョン。
package_filename文字列です。yesファイル名
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"

ルートプレフィックス

残りのルートについては、それぞれ異なるスコープでリクエストする2つの同じルートセットがあります:

  • グループのスコープでリクエストを行うにはグループレベルの接頭辞を使います。
  • プロジェクトレベルの接頭辞は、単一のプロジェクトのスコープにリクエストするときに使います。

このドキュメントの例では、すべてプロジェクトレベルの接頭辞を使っています。

グループレベル

 /groups/:id/-/packages/nuget`
属性種類必須説明
id文字列です。yesグループIDまたはフルグループパス。

プロジェクトレベル

 /projects/:id/packages/nuget`
属性種類必須説明
id文字列です。yesプロジェクト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 ソースフィード/プロトコル

  • GitLab 12.6 で導入されました。
  • GitLab 16.1で公開に変更

利用可能な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/-.

メタデータサービス

GitLab 12.8 で導入されました。

パッケージのメタデータを返します:

GET <route-prefix>/metadata/:package_name/index
属性種類必須説明
package_name文字列です。yesパッケージ名。
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",
          }
        }
      ]
    }
  ]
}

バージョンメタデータサービス

GitLab 12.8 で導入されました。

特定のパッケージバージョンのメタデータを返します:

GET <route-prefix>/metadata/:package_name/:package_version
属性種類必須説明
package_name文字列です。yesパッケージ名。
package_version文字列です。yesパッケージのバージョン。
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",
  }
}

検索サービス

GitLab 12.8 で導入されました。

クエリが与えられると、リポジトリ内のNuGetパッケージを検索します:

GET <route-prefix>/query
属性種類必須説明
q文字列です。yes検索クエリ。
skip整数。いいえスキップする結果の数。
take整数。いいえ返す結果の数
prereleasebooleanいいえプレリリース・バージョンを含めます。値を指定しなかった場合のデフォルトは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": ""
    }
  ]
}

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

GitLab 16.3で導入されました。

認証は不要です。V2 フィードの利用可能なエンドポイントのメタデータを返します:

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>