NuGet API
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
이 API를 사용하여 NuGet 패키지 관리자 클라이언트와 상호 작용합니다. 이 API는 NuGet 패키지 관리자 클라이언트에서 사용되며 일반적으로 수동 사용을 위한 것이 아닙니다. 이 엔드포인트는 표준 API 인증 방법을 따르지 않습니다.
이 API를 사용하여 NuGet 패키지 관리자 클라이언트와 상호 작용합니다.
이 API는 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를 사용하여 그룹 엔드포인트로 패키지를 설치하세요.
패키지 파일 업로드#
히스토리
- 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> \ --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"
라우트 접두사#
나머지 라우트의 경우 각각 다른 범위에서 요청을 만드는 두 세트의 동일한 라우트가 있습니다:
- 그룹 수준 접두사를 사용하여 그룹 범위에서 요청을 만듭니다.
- 프로젝트 수준 접두사를 사용하여 단일 프로젝트 범위에서 요청을 만듭니다.
이 문서의 예시는 모두 프로젝트 수준 접두사를 사용합니다.
그룹 수준#
/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 소스 피드/프로토콜#
히스토리
- GitLab 16.1에서 공개로 변경됨.
사용 가능한 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": ""
}
]
}
패키지 삭제#
히스토리
- GitLab 16.5에서 도입됨.
지정된 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 다운로드#
히스토리
- GitLab 16.7에서 도입됨.
지정된 디버깅 심볼 파일(.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 피드 메타데이터 엔드포인트#
히스토리
- GitLab 16.3에서 도입됨.
$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 패키지 항목 엔드포인트#
히스토리
- GitLab 16.4에서 도입됨.
| 엔드포인트 | 설명 |
|---|---|
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>
