- Package index
- Download a package file
- Upload a package file
- 심볼 패키지 파일 업로드
- 경로 접두어
- 서비스 인덱스
- 메타데이터 서비스
- 버전 메타데이터 서비스
- 검색 서비스
- 삭제 서비스
- 디버깅 심볼 파일
.pdb
다운로드 - V2 피드 메타데이터 엔드포인트
NuGet API
이 문서는 NuGet 패키지에 대한 API 문서입니다.
GitLab 패키지 레지스트리에서 NuGet 패키지를 업로드하고 설치하는 방법에 대한 지침은 NuGet 패키지 레지스트리 문서를 참조하세요.
어떤 헤더와 토큰 유형이 지원되는지에 대한 자세한 내용은 NuGet 패키지 레지스트리 문서를 참조하세요.
문서화되지 않은 인증 방법은 향후 제거될 수 있습니다.
Package index
주어진 패키지에 대한 인덱스를 반환하며, 여기에는 사용 가능한 버전 목록이 포함됩니다:
GET projects/:id/packages/nuget/download/:package_name/index
Attribute | Type | Required | Description |
---|---|---|---|
id |
string | yes | 프로젝트의 ID 또는 전체 경로입니다. |
package_name |
string | 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"
]
}
Download a package file
NuGet 패키지 파일을 다운로드합니다. 메타데이터 서비스가 이 URL을 제공합니다.
GET projects/:id/packages/nuget/download/:package_name/:package_version/:package_filename
Attribute | Type | Required | Description |
---|---|---|---|
id |
string | yes | 프로젝트의 ID 또는 전체 경로입니다. |
package_name |
string | yes | 패키지의 이름입니다. |
package_version |
string | yes | 패키지의 버전입니다. |
package_filename |
string | 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
라는 이름으로 다운로드된 파일이 써집니다.
Upload a package file
- Introduced in GitLab 16.2 for NuGet v2 feed.
NuGet 패키지 파일을 업로드합니다:
-
NuGet v3 피드의 경우:
PUT projects/:id/packages/nuget
-
NuGet V2 피드의 경우:
PUT projects/:id/packages/nuget/v2
Attribute | Type | Required | Description |
---|---|---|---|
id |
string | yes | 프로젝트의 ID 또는 전체 경로입니다. |
package_name |
string | yes | 패키지의 이름입니다. |
package_version |
string | yes | 패키지의 버전입니다. |
package_filename |
string | 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"
심볼 패키지 파일 업로드
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 소스 피드/프로토콜
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은 /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": "패키지 설명",
"summary": "패키지 설명",
"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": "패키지 설명",
"summary": "패키지 설명",
"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": "패키지 설명",
"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": ""
}
]
}
삭제 서비스
- 도입됨 GitLab 16.5에서.
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
다운로드
- 도입됨 GitLab 16.7에서.
디버깅 심볼 파일(.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 피드 메타데이터 엔드포인트
- 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 패키지 항목 엔드포인트
- 도입됨 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 "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 "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>