Katalog
Katalog adalah sumber daya yang merekam semua operasi paket pada sumber paket, seperti pembuatan dan penghapusan. Sumber daya katalog memiliki Catalog
jenis dalam indeks layanan. Anda dapat menggunakan sumber daya ini untuk mengkueri semua paket yang diterbitkan.
Catatan
Karena katalog tidak digunakan oleh klien NuGet resmi, tidak semua sumber paket mengimplementasikan katalog.
Catatan
Saat ini, katalog nuget.org tidak tersedia di Tiongkok. Untuk detail selengkapnya, lihat NuGet/NuGetGallery#4949.
Nilai berikut @type
digunakan:
@type nilai | Catatan |
---|---|
Katalog/3.0.0 | Rilis awal |
URL titik entri untuk API berikut adalah nilai properti yang @id
terkait dengan nilai sumber daya @type
yang disebutkan di atas. Topik ini menggunakan URL {@id}
tempat penampung .
Semua URL yang ditemukan di sumber daya katalog hanya mendukung metode GET
HTTP dan HEAD
.
Indeks katalog adalah dokumen di lokasi terkenal yang memiliki daftar item katalog, diurutkan secara kronologis. Ini adalah titik masuk sumber daya katalog.
Indeks terdiri dari halaman katalog. Setiap halaman katalog berisi item katalog. Setiap item katalog mewakili peristiwa mengenai satu paket pada satu titik waktu. Item katalog dapat mewakili paket yang dibuat, tidak dilisensikan, dialihkan, atau dihapus dari sumber paket. Dengan memproses item katalog dalam urutan kronologis, klien dapat membangun tampilan terbaru dari setiap paket yang ada di sumber paket V3.
Singkatnya, blob katalog memiliki struktur hierarkis berikut:
- Indeks: titik masuk untuk katalog.
- Halaman: pengelompokan item katalog.
- Daun: dokumen yang mewakili item katalog, yang merupakan rekam jepret dari status satu paket.
Setiap objek katalog memiliki properti yang commitTimeStamp
disebut mewakili kapan item ditambahkan ke katalog. Item katalog ditambahkan ke halaman katalog dalam batch yang disebut penerapan. Semua item katalog dalam penerapan yang sama memiliki tanda waktu penerapan yang sama (commitTimeStamp
) dan ID penerapan (commitId
). Item katalog yang ditempatkan dalam penerapan yang sama mewakili peristiwa yang terjadi di sekitar titik waktu yang sama pada sumber paket. Tidak ada pemesanan dalam penerapan katalog.
Karena setiap ID paket dan versi unik, tidak akan pernah ada lebih dari satu item katalog dalam penerapan. Ini memastikan bahwa item katalog untuk satu paket selalu dapat diurutkan secara tidak ambigu sehubungan dengan penerapan tanda waktu.
Tidak pernah ada lebih dari satu penerapan ke katalog per commitTimeStamp
. Dengan kata lain, commitId
redundan dengan commitTimeStamp
.
Berbeda dengan sumber daya metadata paket, yang diindeks oleh ID paket, katalog diindeks (dan dapat dikueri) hanya berdasarkan waktu.
Item katalog selalu ditambahkan ke katalog dalam urutan kronologis yang meningkat secara monoton. Ini berarti bahwa jika penerapan katalog ditambahkan pada saat X maka tidak ada penerapan katalog yang akan ditambahkan dengan waktu kurang dari atau sama dengan X.
Permintaan berikut mengambil indeks katalog.
GET {@id}
Indeks katalog adalah dokumen JSON yang berisi objek dengan properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
commitId | string | yes | ID unik yang terkait dengan penerapan terbaru |
commitTimeStamp | string | yes | Tanda waktu penerapan terbaru |
jumlah | Integer | yes | Jumlah halaman dalam indeks |
item | array objek | yes | Array objek, setiap objek yang mewakili halaman |
Setiap elemen dalam items
array adalah objek dengan beberapa detail minimal tentang setiap halaman. Objek halaman ini tidak berisi daun katalog (item). Urutan elemen dalam array ini tidak ditentukan. Halaman dapat diurutkan oleh klien dalam memori menggunakan propertinya commitTimeStamp
.
Saat halaman baru diperkenalkan, count
akan ditahbiskan dan objek baru akan muncul dalam items
array.
Saat item ditambahkan ke katalog, indeks commitId
akan berubah dan commitTimeStamp
akan meningkat. Kedua properti ini pada dasarnya adalah ringkasan di semua halaman commitId
dan commitTimeStamp
nilai dalam items
array.
Objek halaman katalog yang ditemukan di properti indeks items
katalog memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
@id | string | yes | URL untuk mengambil halaman katalog |
commitId | string | yes | ID unik yang terkait dengan penerapan terbaru di halaman ini |
commitTimeStamp | string | yes | Tanda waktu penerapan terbaru di halaman ini |
jumlah | Integer | yes | Jumlah item di halaman katalog |
Berbeda dengan sumber daya metadata paket yang dalam beberapa kasus sebaris pergi ke dalam indeks, daun katalog tidak pernah di-inlin ke dalam indeks dan harus selalu diambil dengan menggunakan URL halaman @id
.
GET https://api.nuget.org/v3/catalog0/index.json
{
"commitId": "3d698852-eefb-48ed-8f55-9ee357540d20",
"commitTimeStamp": "2017-10-31T23:33:17.0954363Z",
"count": 3,
"items": [
{
"@id": "https://api.nuget.org/v3/catalog0/page0.json",
"commitId": "3a4df280-3d86-458e-a713-4c91ca261fef",
"commitTimeStamp": "2015-02-01T06:30:11.7477681Z",
"count": 540
},
{
"@id": "https://api.nuget.org/v3/catalog0/page1.json",
"commitId": "8bcd3cbf-74f0-47a2-a7ae-b7ecc50005d3",
"commitTimeStamp": "2015-02-01T06:39:53.9553899Z",
"count": 540
},
{
"@id": "https://api.nuget.org/v3/catalog0/page2.json",
"commitId": "3d698852-eefb-48ed-8f55-9ee357540d20",
"commitTimeStamp": "2017-10-31T23:33:17.0954363Z",
"count": 47
}
]
}
Halaman katalog adalah kumpulan item katalog. Ini adalah dokumen yang diambil menggunakan salah satu nilai yang @id
ditemukan dalam indeks katalog. URL ke halaman katalog tidak dimaksudkan untuk dapat diprediksi dan harus ditemukan hanya menggunakan indeks katalog.
Item katalog baru ditambahkan ke halaman dalam indeks katalog hanya dengan tanda waktu penerapan tertinggi atau ke halaman baru. Setelah halaman dengan tanda waktu penerapan yang lebih tinggi ditambahkan ke katalog, halaman yang lebih lama tidak pernah ditambahkan atau diubah.
Dokumen halaman katalog adalah objek JSON dengan properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
commitId | string | yes | ID unik yang terkait dengan penerapan terbaru di halaman ini |
commitTimeStamp | string | yes | Tanda waktu penerapan terbaru di halaman ini |
jumlah | Integer | yes | Jumlah item di halaman |
item | array objek | yes | Item katalog di halaman ini |
induk | string | yes | URL ke indeks katalog |
Setiap elemen dalam items
array adalah objek dengan beberapa detail minimal tentang item katalog. Objek item ini tidak berisi semua data item katalog. Urutan item dalam array halaman items
tidak ditentukan. Item dapat diurutkan oleh klien dalam memori menggunakan properti mereka commitTimeStamp
.
Jumlah item katalog dalam halaman ditentukan oleh implementasi server. Untuk nuget.org, paling banyak ada 550 item di setiap halaman, meskipun jumlah aktual mungkin lebih kecil untuk beberapa halaman tergantung pada ukuran batch penerapan berikutnya pada titik waktu.
Saat item baru diperkenalkan, count
objek item katalog baru dan dinaikkan dan muncul dalam items
array.
Saat item ditambahkan ke halaman, commitId
perubahan dan commitTimeStamp
peningkatannya. Kedua properti ini pada dasarnya adalah ringkasan atas semua commitId
nilai dan commitTimeStamp
dalam items
array.
Objek item katalog yang ditemukan di properti halaman items
katalog memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
@id | string | yes | URL untuk mengambil item katalog |
@type | string | yes | Jenis item katalog |
commitId | string | yes | ID penerapan yang terkait dengan item katalog ini |
commitTimeStamp | string | yes | Tanda waktu penerapan item katalog ini |
nuget:id | string | yes | ID paket yang terkait dengan daun ini |
nuget:version | string | yes | Versi paket yang terkait dengan daun ini |
Nilainya @type
akan menjadi salah satu dari dua nilai berikut:
nuget:PackageDetails
: ini sesuai denganPackageDetails
jenis dalam dokumen daun katalog.nuget:PackageDelete
: ini sesuai denganPackageDelete
jenis dalam dokumen daun katalog.
Untuk detail selengkapnya tentang arti setiap jenis, lihat jenis item yang sesuai di bawah ini.
GET https://api.nuget.org/v3/catalog0/page2926.json
{
"commitId": "616117f5-d9dd-4664-82b9-74d87169bbe9",
"commitTimeStamp": "2017-10-31T23:30:32.4197849Z",
"count": 5,
"parent": "https://api.nuget.org/v3/catalog0/index.json",
"items": [
{
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.23.30.32/util.biz.payments.0.0.4-preview.json",
"@type": "nuget:PackageDetails",
"commitId": "616117f5-d9dd-4664-82b9-74d87169bbe9",
"commitTimeStamp": "2017-10-31T23:30:32.4197849Z",
"nuget:id": "Util.Biz.Payments",
"nuget:version": "0.0.4-preview"
},
{
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.23.28.02/util.biz.0.0.4-preview.json",
"@type": "nuget:PackageDetails",
"commitId": "820340b2-97e3-4f93-b82e-bc85550a6560",
"commitTimeStamp": "2017-10-31T23:28:02.788239Z",
"nuget:id": "Util.Biz",
"nuget:version": "0.0.4-preview"
},
{
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.22.31.22/sourcecode.clay.data.1.0.0-preview1-00258.json",
"@type": "nuget:PackageDetails",
"commitId": "cae34527-ffc7-4e96-884f-7cf95a32dbdd",
"commitTimeStamp": "2017-10-31T22:31:22.5169519Z",
"nuget:id": "SourceCode.Clay.Data",
"nuget:version": "1.0.0-preview1-00258"
},
{
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.22.31.22/sourcecode.clay.1.0.0-preview1-00258.json",
"@type": "nuget:PackageDetails",
"commitId": "cae34527-ffc7-4e96-884f-7cf95a32dbdd",
"commitTimeStamp": "2017-10-31T22:31:22.5169519Z",
"nuget:id": "SourceCode.Clay",
"nuget:version": "1.0.0-preview1-00258"
},
{
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.22.31.22/sourcecode.clay.json.1.0.0-preview1-00258.json",
"@type": "nuget:PackageDetails",
"commitId": "cae34527-ffc7-4e96-884f-7cf95a32dbdd",
"commitTimeStamp": "2017-10-31T22:31:22.5169519Z",
"nuget:id": "SourceCode.Clay.Json",
"nuget:version": "1.0.0-preview1-00258"
}
]
}
Daun katalog berisi metadata tentang ID paket dan versi tertentu pada beberapa titik waktu. Ini adalah dokumen yang diambil menggunakan nilai yang @id
ditemukan di halaman katalog. URL ke daun katalog tidak dimaksudkan untuk dapat diprediksi dan harus ditemukan hanya menggunakan halaman katalog.
Dokumen daun katalog adalah objek JSON dengan properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
@type | string atau array string | yes | Jenis item katalog |
catalog:commitId | string | yes | ID penerapan yang terkait dengan item katalog ini |
catalog:commitTimeStamp | string | yes | Tanda waktu penerapan item katalog ini |
id | string | yes | ID paket item katalog |
Diterbitkan | string | yes | Tanggal yang diterbitkan dari item katalog paket |
versi | string | yes | Versi paket item katalog |
Properti @type
adalah string atau array string. Untuk kenyamanan, jika @type
nilainya adalah string, nilai tersebut harus diperlakukan sebagai array ukuran apa pun. Tidak semua nilai yang mungkin untuk @type
didokumenkan. Namun, setiap item katalog memiliki salah satu dari dua nilai jenis string berikut:
PackageDetails
: mewakili rekam jepret metadata paketPackageDelete
: mewakili paket yang dihapus
Item katalog dengan jenis PackageDetails
berisi rekam jepret metadata paket untuk paket tertentu (kombinasi ID dan versi). Item katalog detail paket diproduksi saat sumber paket menemukan salah satu skenario berikut:
- Sebuah paket didorong.
- Paket diandalkan.
- Paket tidak terdata.
- Paket tidak digunakan lagi.
- Paket tidak digunakan lagi.
- Paket dialirkan kembali.
- Status kerentanan paket diperbarui.
Reflow paket adalah gerakan administratif yang pada dasarnya menghasilkan dorongan palsu dari paket yang ada tanpa perubahan pada paket itu sendiri. Pada nuget.org, reflow digunakan setelah memperbaiki bug di salah satu pekerjaan latar belakang yang menggunakan katalog.
Klien yang menggunakan item katalog tidak boleh mencoba menentukan skenario mana yang menghasilkan item katalog. Sebagai gantinya, klien hanya harus memperbarui tampilan atau indeks yang dipertahankan dengan metadata yang terkandung dalam item katalog. Selain itu, item katalog duplikat atau berlebihan harus ditangani dengan anggun (secara idempotensi).
Item katalog detail paket memiliki properti berikut selain yang disertakan di semua daun katalog.
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
penulis | string | no | |
Dibuat | string | no | Tanda waktu kapan paket pertama kali dibuat. Properti fallback: published . |
dependencyGroups | array objek | no | Dependensi paket, dikelompokkan menurut kerangka kerja target (format yang sama dengan sumber daya metadata paket) |
penghentian | object | no | Penghentian yang terkait dengan paket (format yang sama dengan sumber daya metadata paket) |
description | string | no | |
iconUrl | string | no | |
isPrerelease | Boolean | no | Apakah versi paket telah dilewati sebelumnya atau tidak. Dapat dideteksi dari version . |
bahasa | string | no | |
licenseUrl | string | no | |
terdaftar | Boolean | no | Apakah paket terdaftar atau tidak |
minClientVersion | string | no | |
packageHash | string | yes | Hash paket, pengodean menggunakan dasar standar 64 |
packageHashAlgorithm | string | yes | |
packageSize | Integer | yes | Ukuran paket .nupkg dalam byte |
packageTypes | array objek | no | Jenis paket yang ditentukan oleh penulis. |
projectUrl | string | no | |
releaseNotes | string | no | |
requireLicenseAgreement | Boolean | no | Asumsikan false jika dikecualikan |
ringkasan | string | no | |
tag | array string | no | |
title | string | no | |
verbatimVersion | string | no | String versi seperti yang awalnya ditemukan di .nuspec |
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.
Tanda created
waktu adalah ketika paket pertama kali diterima oleh sumber paket, yang biasanya singkat sebelum tanda waktu penerapan item katalog.
packageHashAlgorithm
adalah string yang ditentukan oleh implementasi server yang mewakili algoritma hashing yang digunakan untuk menghasilkan packageHash
. nuget.org selalu menggunakan packageHashAlgorithm
nilai SHA512
.
Properti packageTypes
hanya akan ada jika jenis paket ditentukan oleh penulis. Jika ada, itu akan selalu memiliki setidaknya satu (1) entri. Setiap item dalam packageTypes
array adalah objek JSON dengan properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
nama | string | yes | Nama jenis paket. |
versi | string | no | Versi jenis paket. Hanya ada jika penulis secara eksplisit menentukan versi dalam nuspec. |
Tanda published
waktu adalah waktu ketika paket terakhir dicantumkan.
Catatan
Pada nuget.org, published
nilai diatur ke tahun 1900 ketika paket tidak terdata.
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 |
severity
Jika properti berisi nilai selain yang tercantum di sini, tingkat keparahan saran akan diperlakukan sebagai Rendah.
GET https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json
{
"@type": [
"PackageDetails",
"catalog:Permalink"
],
"authors": "NuGet.org Team",
"catalog:commitId": "49fe04d8-5694-45a5-9822-3be61bda871b",
"catalog:commitTimeStamp": "2015-02-01T11:18:40.8589193Z",
"created": "2011-12-02T20:21:23.74Z",
"description": "This package is an example for the V3 protocol.",
"deprecation": {
"reasons": [
"Legacy",
"HasCriticalBugs",
"Other"
],
"message": "This package is an example--it should not be used!",
"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",
"isPrerelease": false,
"language": "en-US",
"licenseUrl": "http://www.opensource.org/licenses/ms-pl",
"packageHash": "2edCwKLcbcgFJpsAwa883BLtOy8bZpWwbQpiIb71E74k5t2f2WzXEGWbPwntRleUEgSrcxJrh9Orm/TAmgO4NQ==",
"packageHashAlgorithm": "SHA512",
"packageSize": 118348,
"packageTypes": [
{
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#packagetypes/DotnetTool",
"@type": "PackageType",
"name": "DotnetTool"
}
],
"projectUrl": "https://github.com/NuGet/NuGetGallery",
"published": "1900-01-01T00:00:00Z",
"requireLicenseAcceptance": false,
"title": "NuGet V3 Protocol Example",
"version": "1.0.0",
"dependencyGroups": [
{
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup",
"@type": "PackageDependencyGroup",
"dependencies": [
{
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup/aspnet.suppressformsredirect",
"@type": "PackageDependency",
"id": "aspnet.suppressformsredirect",
"range": "[0.0.1.4, )"
},
{
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup/webactivator",
"@type": "PackageDependency",
"id": "WebActivator",
"range": "[1.4.4, )"
},
{
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup/webapi.all",
"@type": "PackageDependency",
"id": "WebApi.All",
"range": "[0.5.0, )"
}
],
"targetFramework": ".NETFramework4.6"
}
],
"tags": [
"NuGet",
"V3",
"Protocol",
"Example"
],
"vulnerabilities": [
{
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#vulnerability/GitHub/999",
"@type": "Vulnerability",
"advisoryUrl": "https://github.com/advisories/ABCD-1234-5678-9012",
"severity": "2"
}
]
}
Item katalog dengan jenis PackageDelete
berisi sekumpulan informasi minimal yang menunjukkan kepada klien katalog bahwa paket telah dihapus dari sumber paket dan tidak lagi tersedia untuk operasi paket apa pun (seperti pemulihan).
Catatan
Dimungkinkan bagi paket untuk dihapus dan kemudian diterbitkan ulang menggunakan ID paket dan versi yang sama. Pada nuget.org, ini adalah kasus yang sangat jarang terjadi karena merusak asumsi klien resmi bahwa ID paket dan versi menyiratkan konten paket tertentu. Untuk informasi selengkapnya tentang penghapusan paket di nuget.org, lihat kebijakan kami.
Item katalog penghapusan paket tidak memiliki properti tambahan selain yang disertakan di semua daun katalog.
Properti version
adalah string versi asli yang ditemukan dalam paket .nuspec.
Properti published
adalah waktu ketika paket dihapus, yang biasanya sebagai waktu singkat sebelum tanda waktu penerapan item katalog.
GET https://api.nuget.org/v3/catalog0/data/2017.11.02.00.40.00/netstandard1.4_lib.1.0.0-test.json
{
"@type": [
"PackageDelete",
"catalog:Permalink"
],
"catalog:commitId": "19fec5b4-9335-4e4b-bd50-8d5d3f734597",
"catalog:commitTimeStamp": "2017-11-02T00:40:00.1969812Z",
"id": "netstandard1.4_lib",
"originalId": "netstandard1.4_lib",
"published": "2017-11-02T00:37:43.7181952Z",
"version": "1.0.0-test"
}
Bagian ini menjelaskan konsep klien yang, meskipun belum tentu diamanatkan oleh protokol, harus menjadi bagian dari implementasi klien katalog praktis apa pun.
Karena katalog adalah struktur data khusus tambahan yang diindeks menurut waktu, klien harus menyimpan kursor secara lokal, mewakili hingga titik waktu apa klien telah memproses item katalog. Perhatikan bahwa nilai kursor ini tidak boleh dihasilkan menggunakan jam komputer klien. Sebagai gantinya, nilai harus berasal dari nilai objek commitTimestamp
katalog.
Setiap kali klien ingin memproses peristiwa baru pada sumber paket, klien hanya perlu mengkueri katalog untuk semua item katalog dengan tanda waktu penerapan yang lebih besar dari kursor yang disimpan. Setelah klien berhasil memproses semua item katalog baru, klien merekam tanda waktu penerapan terbaru item katalog yang baru saja diproses sebagai nilai kursor barunya.
Dengan menggunakan pendekatan ini, klien dapat yakin untuk tidak pernah melewatkan peristiwa paket apa pun yang terjadi pada sumber paket. Selain itu, klien tidak perlu memproses ulang peristiwa lama sebelum tanda waktu penerapan kursor yang direkam.
Konsep kursor yang kuat ini digunakan untuk banyak pekerjaan latar belakang nuget.org dan digunakan untuk menjaga API V3 itu sendiri tetap terbarui.
Ketika klien katalog dimulai untuk pertama kalinya (dan karena itu tidak memiliki nilai kursor), klien harus menggunakan nilai kursor default . NET atau System.DateTimeOffset.MinValue
beberapa gagasan analog seperti tanda waktu minimum yang dapat diwakili.
Untuk mengkueri kumpulan item katalog berikutnya yang akan diproses, klien harus:
- Ambil nilai kursor yang direkam dari penyimpanan lokal.
- Unduh dan deserialisasi indeks katalog.
- Temukan semua halaman katalog dengan tanda waktu penerapan yang lebih besar dari kursor.
- Deklarasikan daftar kosong item katalog untuk diproses.
- Untuk setiap halaman katalog yang cocok di langkah 3:
- Unduh dan deserialisasi halaman katalog.
- Temukan semua item katalog dengan tanda waktu penerapan yang lebih besar dari kursor.
- Tambahkan semua item katalog yang cocok ke daftar yang dinyatakan di langkah 4.
- Urutkan daftar item katalog menurut tanda waktu penerapan.
- Proses setiap item katalog secara berurutan:
- Unduh dan deserialisasi item katalog.
- Bereaksi dengan tepat terhadap jenis item katalog.
- Proses dokumen item katalog dengan cara khusus klien.
- Rekam tanda waktu penerapan item katalog terakhir sebagai nilai kursor baru.
Dengan algoritma dasar ini, implementasi klien dapat membangun tampilan lengkap semua paket yang tersedia di sumber paket. Klien hanya perlu menjalankan algoritma ini secara berkala untuk selalu mengetahui perubahan terbaru pada sumber paket.
Catatan
Ini adalah algoritma yang nuget.org gunakan untuk menjaga Metadata Paket, Konten Paket, Pencarian, dan Sumber daya Lengkapi Otomatis diperbarui.
Misalkan ada dua klien katalog yang memiliki dependensi yang melekat di mana output satu klien tergantung pada output klien lain.
Misalnya, pada nuget.org paket yang baru diterbitkan tidak boleh muncul di sumber daya pencarian sebelum muncul di sumber daya metadata paket. Ini karena operasi "pemulihan" yang dilakukan oleh klien NuGet resmi menggunakan sumber daya metadata paket. Jika pelanggan menemukan paket menggunakan layanan pencarian, mereka harus berhasil memulihkan paket tersebut menggunakan sumber daya metadata paket. Dengan kata lain, sumber daya pencarian bergantung pada sumber daya metadata paket. Setiap sumber daya memiliki pekerjaan latar belakang klien katalog yang memperbarui sumber daya tersebut. Setiap klien memiliki kursornya sendiri.
Karena kedua sumber daya dibangun dari katalog, kursor klien katalog yang memperbarui sumber daya pencarian tidak boleh melampaui kursor klien katalog metadata paket.
Untuk menerapkan pembatasan ini, cukup ubah algoritma di atas menjadi:
- Ambil nilai kursor yang direkam dari penyimpanan lokal.
- Unduh dan deserialisasi indeks katalog.
- Temukan semua halaman katalog dengan tanda waktu penerapan yang lebih besar dari kursor kurang dari atau sama dengan kursor dependensi.
- Deklarasikan daftar kosong item katalog untuk diproses.
- Untuk setiap halaman katalog yang cocok di langkah 3:
- Unduh dan deserialisasi halaman katalog.
- Temukan semua item katalog dengan tanda waktu penerapan yang lebih besar dari kursor kurang dari atau sama dengan kursor dependensi.
- Tambahkan semua item katalog yang cocok ke daftar yang dinyatakan di langkah 4.
- Urutkan daftar item katalog menurut tanda waktu penerapan.
- Proses setiap item katalog secara berurutan:
- Unduh dan deserialisasi item katalog.
- Bereaksi dengan tepat terhadap jenis item katalog.
- Proses dokumen item katalog dengan cara khusus klien.
- Rekam tanda waktu penerapan item katalog terakhir sebagai nilai kursor baru.
Dengan menggunakan algoritma yang dimodifikasi ini, Anda dapat membangun sistem klien katalog dependen yang semuanya menghasilkan indeks, artefak, dll spesifik mereka sendiri.