Metadata paket
Dimungkinkan untuk mengambil metadata tentang paket yang tersedia pada sumber paket menggunakan API NuGet V3. Metadata ini dapat diambil menggunakan sumber daya yang RegistrationsBaseUrl
ditemukan dalam indeks layanan.
Pengumpulan dokumen yang ditemukan di bawah RegistrationsBaseUrl
sering disebut "pendaftaran" atau "blob pendaftaran". Kumpulan dokumen di bawah satu RegistrationsBaseUrl
disebut sebagai "sarang pendaftaran". Sarang pendaftaran berisi metadata tentang setiap paket yang tersedia di sumber paket.
Catatan
Sumber daya metadata paket tidak berisi semua metadata untuk paket. Gunakan sumber daya pencarian untuk menemukan pemilik paket, unduhan, atau status reservasi awalan.
Penerapan versi
Nilai berikut @type
digunakan:
@type nilai | Catatan |
---|---|
RegistrationsBaseUrl | Rilis awal |
RegistrationsBaseUrl/3.0.0-beta | Alias dari RegistrationsBaseUrl |
RegistrationsBaseUrl/3.0.0-rc | Alias dari RegistrationsBaseUrl |
RegistrationsBaseUrl/3.4.0 | Respons gzipped |
RegistrationsBaseUrl/3.6.0 | Termasuk paket SemVer 2.0.0 |
Ini mewakili tiga sarang pendaftaran berbeda yang tersedia untuk berbagai versi klien.
RegistrationsBaseUrl
Pendaftaran ini tidak dikompresi (artinya mereka menggunakan tersirat Content-Encoding: identity
). Paket SemVer 2.0.0 dikecualikan dari sarang ini.
RegistrationsBaseUrl/3.4.0
Pendaftaran ini dikompresi menggunakan Content-Encoding: gzip
. Paket SemVer 2.0.0 dikecualikan dari sarang ini.
RegistrationsBaseUrl/3.6.0
Pendaftaran ini dikompresi menggunakan Content-Encoding: gzip
. Paket SemVer 2.0.0 disertakan dalam sarang ini.
Untuk informasi selengkapnya tentang SemVer 2.0.0, lihat Dukungan SemVer 2.0.0 untuk nuget.org.
URL Dasar
URL dasar untuk API berikut adalah nilai properti yang @id
terkait dengan nilai sumber daya @type
yang disebutkan di atas. Dalam dokumen berikut, URL {@id}
dasar tempat penampung akan digunakan. URL dasar dapat berubah berdasarkan implementasi atau perubahan infrastruktur dalam sumber paket sehingga harus diambil secara dinamis dari indeks layanan oleh perangkat lunak klien.
Metode HTTP
Semua URL yang ditemukan di sumber daya pendaftaran mendukung metode GET
HTTP dan HEAD
.
Indeks pendaftaran
Metadata paket grup sumber daya pendaftaran berdasarkan ID paket. Tidak dimungkinkan untuk mendapatkan data tentang lebih dari satu ID paket pada satu waktu. Sumber daya ini tidak menyediakan cara untuk menemukan ID paket. Sebaliknya, klien diasumsikan sudah mengetahui ID paket yang diinginkan. Metadata yang tersedia tentang setiap versi paket bervariasi menurut implementasi server. Blob pendaftaran paket memiliki struktur hierarkis berikut:
- Indeks: titik masuk untuk metadata paket, dibagikan oleh semua paket pada sumber dengan ID paket yang sama.
- Halaman: pengelompokan versi paket. Jumlah versi paket dalam halaman ditentukan oleh implementasi server.
- Daun: dokumen khusus untuk versi paket tunggal.
URL indeks pendaftaran dapat diprediksi dan dapat ditentukan oleh klien yang diberi ID paket dan nilai sumber daya @id
pendaftaran dari indeks layanan. URL untuk halaman pendaftaran dan daun ditemukan dengan memeriksa indeks pendaftaran.
Halaman pendaftaran dan daun
Meskipun tidak benar-benar diperlukan untuk implementasi server untuk menyimpan daun pendaftaran dalam dokumen halaman pendaftaran terpisah, ini adalah praktik yang disarankan untuk menghemat memori sisi klien. Alih-alih menginlining semua daun pendaftaran dalam indeks atau segera menyimpan daun dalam dokumen halaman, disarankan agar implementasi server menentukan beberapa heuristik untuk memilih antara dua pendekatan berdasarkan jumlah versi paket atau ukuran kumulatif daun paket.
Menyimpan semua versi paket (daun) dalam indeks pendaftaran menghemat jumlah permintaan HTTP yang diperlukan untuk mengambil metadata paket tetapi berarti bahwa dokumen yang lebih besar harus diunduh dan lebih banyak memori klien harus dialokasikan. Di sisi lain, jika implementasi server segera menyimpan pendaftaran meninggalkan dokumen halaman terpisah, klien harus melakukan lebih banyak permintaan HTTP untuk mendapatkan informasi yang dibutuhkan.
Heuristik yang nuget.org gunakan adalah sebagai berikut: jika ada 128 atau lebih versi paket, pecahkan daun menjadi halaman berukuran 64. Jika ada kurang dari 128 versi, sebaris semua pergi ke indeks pendaftaran. Perhatikan bahwa ini berarti paket dengan versi 65 hingga 127 akan memiliki dua halaman dalam indeks tetapi kedua halaman akan di-inlin.
GET {@id}/{LOWER_ID}/index.json
Parameter permintaan
Nama | Dalam | Jenis | Diperlukan | Catatan |
---|---|---|---|---|
LOWER_ID | URL | string | yes | ID paket, huruf kecil |
Nilainya LOWER_ID
adalah ID paket yang diinginkan yang diturunkan menggunakan aturan yang diterapkan oleh . System.String.ToLowerInvariant()
Metode NET.
Respons
Responsnya adalah dokumen JSON yang memiliki objek akar dengan properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
jumlah | Integer | yes | Jumlah halaman pendaftaran dalam indeks |
item | array objek | yes | Array halaman pendaftaran |
Setiap item dalam array objek items
indeks adalah objek JSON yang mewakili halaman pendaftaran.
Objek halaman pendaftaran
Objek halaman pendaftaran yang ditemukan dalam indeks pendaftaran memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
@id | string | yes | URL ke halaman pendaftaran |
jumlah | Integer | yes | Jumlah pendaftaran yang tersisa di halaman |
item | array objek | no | Array daun pendaftaran dan metadata asosiasinya |
lower | string | yes | Versi SemVer 2.0.0 terendah di halaman (inklusif) |
induk | string | no | URL ke indeks pendaftaran |
upper | string | yes | Versi SemVer 2.0.0 tertinggi di halaman (inklusif) |
Batas lower
dan upper
objek halaman berguna ketika metadata untuk versi halaman tertentu diperlukan.
Batas ini dapat digunakan untuk mengambil satu-satunya halaman pendaftaran yang diperlukan. String versi mematuhi aturan versi NuGet. String versi dinormalisasi dan tidak menyertakan metadata build. Seperti semua versi dalam ekosistem NuGet, perbandingan string versi diimplementasikan menggunakan aturan prioritas versi SemVer 2.0.0.
Properti parent
hanya akan muncul jika objek halaman pendaftaran memiliki items
properti .
items
Jika properti tidak ada di objek halaman pendaftaran, URL yang ditentukan dalam @id
harus digunakan untuk mengambil metadata tentang versi paket individual. Array items
terkadang dikecualikan dari objek halaman sebagai pengoptimalan. Jika jumlah versi ID paket tunggal sangat besar, maka dokumen indeks pendaftaran akan sangat besar dan boros untuk diproses untuk klien yang hanya peduli dengan versi tertentu atau berbagai versi kecil.
Perhatikan bahwa jika items
properti ada, @id
properti tidak perlu digunakan, karena semua data halaman sudah di-inlin di items
properti .
Setiap item dalam array objek items
halaman adalah objek JSON yang mewakili daun pendaftaran dan metadata terkait.
Objek daun pendaftaran di halaman
Objek daun pendaftaran yang ditemukan di halaman pendaftaran memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
@id | string | yes | URL ke daun pendaftaran |
catalogEntry | object | yes | Entri katalog yang berisi metadata paket |
packageContent | string | yes | URL ke konten paket (.nupkg) |
Setiap objek daun pendaftaran mewakili data yang terkait dengan versi paket tunggal.
Entri katalog
catalogEntry
Properti di objek daun pendaftaran memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
@id | string | yes | URL ke dokumen yang digunakan untuk menghasilkan objek ini |
penulis | string atau array string | no | |
dependencyGroups | array objek | no | Dependensi paket, dikelompokkan menurut kerangka kerja target |
penghentian | object | no | Penghentian yang terkait dengan paket |
description | string | no | |
iconUrl | string | no | |
id | string | yes | ID paket |
bahasa | string | no | |
licenseUrl | string | no | |
licenseExpression | string | no | |
terdaftar | Boolean | no | Harus dianggap sebagai tercantum jika tidak ada |
minClientVersion | string | no | |
packageContent | string | no | Duplikat properti yang sama dalam objek induk, hanya disertakan karena alasan warisan |
projectUrl | string | no | |
Diterbitkan | string | no | String yang berisi tanda waktu ISO 8601 saat paket diterbitkan |
readmeUrl | string | no | URL untuk tampilan yang dirender (halaman web HTML) dari paket README |
requireLicenseAcceptance | Boolean | no | |
ringkasan | string | no | |
tag | string atau array string | no | |
title | string | no | |
versi | string | yes | String versi lengkap setelah normalisasi |
kerentanan | array objek | no | Kerentanan keamanan paket |
Properti paket version
adalah string versi lengkap setelah normalisasi. Ini berarti bahwa data build SemVer 2.0.0 dapat disertakan di sini.
Properti dependencyGroups
adalah array objek yang mewakili dependensi paket, dikelompokkan menurut kerangka kerja target. Jika paket tidak memiliki dependensi, dependencyGroups
properti hilang, array kosong, atau dependencies
properti semua grup kosong atau hilang.
Nilai licenseExpression
properti mematuhi sintaks ekspresi lisensi NuGet.
Catatan
Pada nuget.org, published
nilai diatur ke tahun 1900 ketika paket tidak dilisensikan.
Grup dependensi paket
Setiap objek grup dependensi memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
targetFramework | string | no | Kerangka kerja target yang berlaku untuk dependensi ini |
dependensi | array objek | no |
String targetFramework
menggunakan format yang diimplementasikan oleh pustaka .NET NuGet NuGet NuGet.Frameworks. Jika tidak targetFramework
ada yang ditentukan, grup dependensi berlaku untuk semua kerangka kerja target.
Properti dependencies
adalah array objek, masing-masing mewakili dependensi paket dari paket saat ini.
Dependensi paket
Setiap dependensi paket memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
id | string | yes | ID dependensi paket |
rentang | object | no | Rentang versi dependensi yang diizinkan |
registrasi | string | no | URL ke indeks pendaftaran untuk dependensi ini |
range
Jika properti dikecualikan atau string kosong, klien harus default ke rentang (, )
versi . Artinya, versi dependensi apa pun diizinkan. Nilai *
tidak diperbolehkan untuk range
properti .
Penghentian paket
Setiap penghentian paket memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
Alasan | array string | yes | Alasan mengapa paket tidak digunakan lagi |
pesan | string | no | Detail tambahan tentang penghentian ini |
alternatePackage | object | no | Paket alternatif yang harus digunakan sebagai gantinya |
Properti reasons
harus berisi setidaknya satu string dan hanya boleh berisi string dari tabel berikut:
Alasan | Deskripsi |
---|---|
Warisan | Paket tidak lagi dipertahankan |
CriticalBugs | Paket memiliki bug yang membuatnya tidak cocok untuk penggunaan |
Lainnya | Paket tidak digunakan lagi karena alasan tidak ada dalam daftar ini |
reasons
Jika properti berisi string yang bukan dari set yang diketahui, properti tersebut harus diabaikan. String tidak peka huruf besar/kecil, jadi legacy
harus diperlakukan sama dengan Legacy
. Tidak ada batasan pengurutan pada array, sehingga string dapat diatur dalam urutan arbitrer apa pun. Selain itu, jika properti hanya berisi string yang bukan dari set yang diketahui, properti harus diperlakukan seolah-olah hanya berisi string "Lainnya".
Paket alternatif
Objek paket alternatif memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
id | string | yes | ID paket alternatif |
rentang | object | no | Rentang versi yang diizinkan, atau * jika ada versi yang diizinkan |
Kerentanan
Array vulnerability
objek. Setiap kerentanan memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
advisoryUrl | string | yes | Lokasi saran keamanan untuk paket |
keparahan | string | yes | Tingkat keparahan saran: "0" = Rendah, "1" = Sedang, "2" = Tinggi, "3" = Kritis |
Permintaan sampel
GET https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json
Pastikan untuk mengambil URL dasar (https://api.nuget.org/v3/registration-sample/
dalam sampel ini) dari indeks layanan seperti yang disebutkan di bagian URL dasar.
Respon sampel
{
"count": 1,
"items": [
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json#page/3.0.0-beta/3.0.0-beta",
"count": 1,
"items": [
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.server.core/3.0.0-beta.json",
"catalogEntry": {
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.05.18.41.33/nuget.server.core.3.0.0-beta.json",
"authors": ".NET Foundation",
"dependencyGroups": [
{
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.05.18.41.33/nuget.server.core.3.0.0-beta.json#dependencygroup",
"dependencies": [
{
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.05.18.41.33/nuget.server.core.3.0.0-beta.json#dependencygroup/nuget.core",
"id": "NuGet.Core",
"range": "[2.14.0, )",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.core/index.json"
}
]
}
],
"description": "Core library for creating a Web Application used to host a simple NuGet feed",
"iconUrl": "",
"id": "NuGet.Server.Core",
"language": "",
"licenseUrl": "https://raw.githubusercontent.com/NuGet/NuGet.Server/dev/LICENSE.txt",
"listed": true,
"minClientVersion": "2.6",
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.server.core/3.0.0-beta/nuget.server.core.3.0.0-beta.nupkg",
"projectUrl": "https://github.com/NuGet/NuGet.Server",
"published": "2017-10-05T18:40:32.43+00:00",
"requireLicenseAcceptance": false,
"summary": "",
"tags": [ "" ],
"title": "",
"version": "3.0.0-beta",
"vulnerabilities": [
{
"advisoryUrl": "https://github.com/advisories/ABCD-1234-5678-9012",
"severity": "2"
}
]
},
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.server.core/3.0.0-beta/nuget.server.core.3.0.0-beta.nupkg",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json"
}
],
"lower": "3.0.0-beta",
"upper": "3.0.0-beta"
}
]
}
Dalam kasus khusus ini, indeks pendaftaran memiliki halaman pendaftaran yang di-inlin sehingga tidak ada permintaan tambahan yang diperlukan untuk mengambil metadata tentang versi paket individual.
Halaman pendaftaran
Halaman pendaftaran berisi daun pendaftaran. URL untuk mengambil halaman pendaftaran ditentukan oleh @id
properti di objek halaman pendaftaran yang disebutkan di atas. URL tidak dimaksudkan untuk dapat diprediksi dan harus selalu ditemukan dengan cara dokumen indeks.
Peringatan
Pada nuget.org, URL untuk dokumen halaman pendaftaran secara kebetulan berisi batas bawah dan atas halaman. Namun asumsi ini tidak boleh dibuat oleh klien karena implementasi server bebas untuk mengubah bentuk URL selama dokumen indeks memiliki tautan yang valid.
items
Ketika array tidak disediakan dalam indeks pendaftaran, permintaan HTTP GET dari @id
nilai akan mengembalikan dokumen JSON yang memiliki objek sebagai akarnya. Objek memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
@id | string | yes | URL ke halaman pendaftaran |
jumlah | Integer | yes | Jumlah pendaftaran yang tersisa di halaman |
item | array objek | yes | Array daun pendaftaran dan metadata asosiasinya |
lower | string | yes | Versi SemVer 2.0.0 terendah di halaman (inklusif) |
induk | string | yes | URL ke indeks pendaftaran |
upper | string | yes | Versi SemVer 2.0.0 tertinggi di halaman (inklusif) |
Bentuk objek daun pendaftaran sama seperti pada indeks pendaftaran di atas.
Permintaan sampel
GET https://api.nuget.org/v3/registration-sample/ravendb.client/page/1.0.531/1.0.729-unstable.json
Pastikan untuk mengambil URL dasar (https://api.nuget.org/v3/registration-sample/
dalam sampel ini) dari indeks layanan seperti yang disebutkan di bagian URL dasar.
Respon sampel
{
"count": 2,
"lower": "1.0.531",
"parent": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/index.json",
"upper": "1.0.729-unstable",
"items": [
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/1.0.531.json",
"@type": "Package",
"commitId": "e0b9ca79-75b5-414f-9e3e-de9534b5cfd1",
"commitTimeStamp": "2017-10-26T14:12:19.3439088Z",
"catalogEntry": {
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.38.37/nuget.protocol.v3.example.1.0.531.json",
"@type": "PackageDetails",
"authors": "NuGet.org Team",
"iconUrl": "https://www.nuget.org/Content/gallery/img/default-package-icon.svg",
"id": "NuGet.Protocol.V3.Example",
"licenseUrl": "http://www.opensource.org/licenses/ms-pl",
"listed": false,
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.531/nuget.protocol.v3.example.1.0.531.nupkg",
"projectUrl": "https://github.com/NuGet/NuGetGallery",
"published": "1900-01-01T00:00:00+00:00",
"requireLicenseAcceptance": true,
"title": "NuGet V3 Protocol Example",
"version": "1.0.531"
},
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.531/nuget.protocol.v3.example.1.0.531.nupkg",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/index.json"
},
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/1.0.729-unstable.json",
"@type": "Package",
"commitId": "e0b9ca79-75b5-414f-9e3e-de9534b5cfd1",
"commitTimeStamp": "2017-10-26T14:12:19.3439088Z",
"catalogEntry": {
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.18.22.05/nuget.protocol.v3.example.1.0.729-unstable.json",
"@type": "PackageDetails",
"authors": "NuGet.org Team",
"deprecation": {
"reasons": [
"CriticalBugs"
],
"message": "This package is unstable and broken!",
"alternatePackage": {
"id": "Newtonsoft.JSON",
"range": "12.0.2"
}
},
"iconUrl": "https://www.nuget.org/Content/gallery/img/default-package-icon.svg",
"id": "NuGet.Protocol.V3.Example",
"licenseUrl": "http://www.opensource.org/licenses/ms-pl",
"listed": false,
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.729-unstable/nuget.protocol.v3.example.1.0.729-unstable.nupkg",
"projectUrl": "https://github.com/NuGet/NuGetGallery",
"published": "1900-01-01T00:00:00+00:00",
"requireLicenseAcceptance": true,
"summary": "This package is an example for the V3 protocol.",
"title": "NuGet V3 Protocol Example",
"version": "1.0.729-Unstable"
},
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.729-unstable/nuget.protocol.v3.example.1.0.729-unstable.nupkg",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/index.json"
}
]
}
Daun pendaftaran
Daun pendaftaran berisi informasi tentang ID dan versi paket tertentu. Metadata tentang versi tertentu mungkin tidak tersedia dalam dokumen ini. Metadata paket harus diambil dari indeks pendaftaran atau halaman pendaftaran (yang ditemukan menggunakan indeks pendaftaran).
URL untuk mengambil daun pendaftaran diperoleh dari @id
properti objek daun pendaftaran baik di indeks pendaftaran atau halaman pendaftaran. Seperti halnya dokumen halaman. URL tidak dimaksudkan untuk dapat diprediksi dan harus selalu ditemukan dengan cara objek halaman pendaftaran.
Peringatan
Pada nuget.org, URL untuk dokumen daun pendaftaran secara kebetulan berisi versi paket. Namun asumsi ini tidak boleh dibuat oleh klien karena implementasi server bebas untuk mengubah bentuk URL selama dokumen induk memiliki tautan yang valid.
Daun pendaftaran adalah dokumen JSON dengan objek akar dengan properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
@id | string | yes | URL ke daun pendaftaran |
catalogEntry | string | no | URL ke entri katalog yang menghasilkan daun ini |
terdaftar | Boolean | no | Harus dianggap sebagai tercantum jika tidak ada |
packageContent | string | no | URL ke konten paket (.nupkg) |
Diterbitkan | string | no | String yang berisi tanda waktu ISO 8601 saat paket diterbitkan |
registrasi | string | no | URL ke indeks pendaftaran |
Catatan
Pada nuget.org, published
nilai diatur ke tahun 1900 ketika paket tidak dilisensikan.
Permintaan sampel
GET https://api.nuget.org/v3/registration-sample/nuget.versioning/4.3.0.json
Pastikan untuk mengambil URL dasar (https://api.nuget.org/v3/registration-sample/
dalam sampel ini) dari indeks layanan seperti yang disebutkan di bagian URL dasar.
Respon sampel
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.versioning/4.3.0.json",
"catalogEntry": "https://api.nuget.org/v3/catalog0/data/2017.08.11.18.24.22/nuget.versioning.4.3.0.json",
"listed": true,
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.versioning/4.3.0/nuget.versioning.4.3.0.nupkg",
"published": "2017-08-11T18:24:14.36+00:00",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.versioning/index.json"
}