NuGet API

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

이 문서는 NuGet Packages에 대한 API 문서입니다.

caution
이 API는 NuGet 패키지 관리자 클라이언트에서 사용되며 일반적으로 직접 사용하는 것이 아닙니다.

GitLab 패키지 레지스트리에서 NuGet 패키지를 업로드하고 설치하는 방법은 NuGet 패키지 레지스트리 문서를 참조하세요.

note
이 엔드포인트들은 표준 API 인증 방법을 따르지 않습니다. 지원되는 헤더 및 토큰 유형에 대한 자세한 내용은 NuGet 패키지 레지스트리 문서를 참조하세요. 문서화되지 않은 인증 방법은 향후 제거될 수 있습니다.

패키지 색인

특정 패키지에 대한 색인을 반환하며 사용 가능한 버전 목록을 포함합니다:

GET projects/:id/packages/nuget/download/:package_name/index
속성 유형 필수 설명
id 문자열 프로젝트의 ID 또는 전체 경로입니다.
package_name 문자열 패키지의 이름입니다.
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 문자열 프로젝트의 ID 또는 전체 경로입니다.
package_name 문자열 패키지의 이름입니다.
package_version 문자열 패키지의 버전입니다.
package_filename 문자열 파일의 이름입니다.
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 16.2에서 NuGet v2 피드에 도입되었습니다.

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> \
        "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"
    

심볼 패키지 파일 업로드

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> \
     "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolpackage"

라우트 접두어

나머지 라우트에는 각각 다른 범위에서 요청을 하는 두 개의 동일한 라우트 세트가 있습니다:

  • 그룹 범위 접두어를 사용하여 그룹 범위의 요청을합니다.
  • 프로젝트 범위 접두어를 사용하여 단일 프로젝트 범위의 요청을합니다.

이 문서의 예제는 모두 프로젝트 수준의 접두사를 사용합니다.

그룹 수준

/groups/:id/-/packages/nuget
속성 유형 필수 설명
id 문자열 그룹 ID 또는 전체 그룹 경로입니다.

프로젝트 수준

/projects/:id/packages/nuget
속성 타입 필수 여부 설명
id string 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 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": "키워드로 패키지 필터링 및 검색."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query",
      "@type": "SearchQueryService/3.0.0-beta",
      "comment": "키워드로 패키지 필터링 및 검색."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/query",
      "@type": "SearchQueryService/3.0.0-rc",
      "comment": "키워드로 패키지 필터링 및 검색."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata",
      "@type": "RegistrationsBaseUrl",
      "comment": "패키지 메타데이터 가져오기."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata",
      "@type": "RegistrationsBaseUrl/3.0.0-beta",
      "comment": "패키지 메타데이터 가져오기."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/metadata",
      "@type": "RegistrationsBaseUrl/3.0.0-rc",
      "comment": "패키지 메타데이터 가져오기."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download",
      "@type": "PackageBaseAddress/3.0.0",
      "comment": "패키지 내용(.nupkg) 가져오기."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget",
      "@type": "PackagePublish/2.0.0",
      "comment": "패키지 푸시 및 삭제(또는 비게시)하기."
    },
    {
      "@id": "https://gitlab.example.com/api/v4/projects/1/packages/nuget/symbolpackage",
      "@type": "SymbolPackagePublish/4.9.0",
      "comment": "심볼 패키지 푸시하기."
    }
  ]
}

응답에 있는 URL은 요청한 URL과 동일한 라우트 접두어를 가지고 있습니다. 그룹 수준 라우트로 요청하면 반환되는 URL에는 /groups/:id/-가 포함됩니다.

메타데이터 서비스

패키지에 대한 메타데이터를 반환합니다:

GET <route-prefix>/metadata/:package_name/index
속성 타입 필수 여부 설명
package_name string 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": "패키지 설명",
            "summary": "패키지 설명",
            "published": "2023-05-08T17:23:25Z",
          }
        }
      ]
    }
  ]
}

버전 메타데이터 서비스

특정 패키지 버전에 대한 메타데이터를 반환합니다:

GET <route-prefix>/metadata/:package_name/:package_version
속성 타입 필수 여부 설명
package_name string yes 패키지의 이름입니다.
package_version string 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": "패키지 설명",
    "summary": "패키지 설명",
    "published": "2023-05-08T17:23:25Z",
  }
}

검색 서비스

쿼리를 통해 저장소에서 NuGet 패키지를 검색합니다:

GET <route-prefix>/query
속성 타입 필수 여부 설명
q string yes 검색 쿼리입니다.
skip integer no 건너뛸 결과 수입니다.
take integer no 반환할 결과 수입니다.
prerelease boolean no 프리 릴리스 버전을 포함합니다. 값을 제공하지 않으면 기본적으로 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": "패키지 설명",
      "summary": "패키지 설명",
      "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 yes 프로젝트의 ID 또는 전체 경로입니다.
package_name string yes 패키지의 이름입니다.
package_version string yes 패키지의 버전입니다.
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 yes 파일 이름입니다.
signature string yes 파일의 서명입니다.
Symbolchecksum string yes 필수 헤더입니다. 파일의 체크섬입니다.
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 피드 메타데이터 엔드포인트

  • GitLab 16.3에서 도입되었습니다.

$metadata 엔드포인트

인증이 필요하지 않습니다. 이용 가능한 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>

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>

참고: Packages()FindPackagesByID() 엔드포인트에서 GitLab는 인증 토큰을 수신하지 않으므로 패키지의 최신 버전을 반환할 수 없습니다. NuGet v2 피드로 패키지를 설치하거나 업그레이드할 때 버전을 제공해야 합니다.

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>