- 패키지 색인
- 패키지 파일 다운로드
- 패키지 파일 업로드
- 심볼 패키지 파일 업로드
- 라우트 접두어
- 서비스 인덱스
- 메타데이터 서비스
- 버전 메타데이터 서비스
- 검색 서비스
- 삭제 서비스
- 디버깅 심볼 파일
.pdb
다운로드 - V2 피드 메타데이터 엔드포인트
NuGet API
이 문서는 NuGet Packages에 대한 API 문서입니다.
GitLab 패키지 레지스트리에서 NuGet 패키지를 업로드하고 설치하는 방법은 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": ""
}
]
}
삭제 서비스
- GitLab 16.5에서 도입되었습니다.
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
다운로드
- GitLab 16.7에서 도입되었습니다.
디버깅 심볼 파일 (.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 패키지 엔드포인트
- 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>
참고:
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>