- 패키지 인덱스
- 패키지 파일 다운로드
- 패키지 파일 업로드
- 심볼 패키지 파일 업로드
- 라우트 접두어
- 서비스 인덱스
- 메타데이터 서비스
- 버전 메타데이터 서비스
- 검색 서비스
- 삭제 서비스
- 디버깅 심볼 파일
.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 <사용자명>:<개인_액세스_토큰> "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 <사용자명>:<개인_액세스_토큰> "https://gitlab.example.com/api/v4/projects/1/packages/nuget/download/MyNuGetPkg/1.3.0.17/mynugetpkg.1.3.0.17.nupkg"
파일로 출력 작성:
curl --user <사용자명>:<개인_액세스_토큰> "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 <사용자명>:<개인_액세스_토큰> \ "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 <사용자명>:<개인_액세스_토큰> \ "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 <사용자명>:<개인_액세스_토큰> \
"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 "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 | 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에서 도입되었습니다.
Endpoint | Description |
---|---|
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()
엔드포인트에 대해 인증 토큰을받지 않으므로 패키지의 최신 버전을 반환할 수 없습니다. 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>