Baca dalam bahasa Inggris

Bagikan melalui


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.

Penerapan versi

Nilai berikut @type digunakan:

@type nilai Catatan
Katalog/3.0.0 Rilis awal

URL Dasar

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 .

Metode HTTP

Semua URL yang ditemukan di sumber daya katalog hanya mendukung metode GET HTTP dan HEAD.

Indeks katalog

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 dalam indeks

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 .

Permintaan sampel

GET https://api.nuget.org/v3/catalog0/index.json

Respon sampel

{
  "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

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 dalam halaman

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:

  1. nuget:PackageDetails: ini sesuai dengan PackageDetails jenis dalam dokumen daun katalog.
  2. nuget:PackageDelete: ini sesuai dengan PackageDelete jenis dalam dokumen daun katalog.

Untuk detail selengkapnya tentang arti setiap jenis, lihat jenis item yang sesuai di bawah ini.

Permintaan sampel

GET https://api.nuget.org/v3/catalog0/page2926.json

Respon sampel

{
  "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

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

Tipe item

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:

  1. PackageDetails: mewakili rekam jepret metadata paket
  2. PackageDelete: mewakili paket yang dihapus

Item katalog detail paket

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:

  1. Sebuah paket didorong.
  2. Paket diandalkan.
  3. Paket tidak terdata.
  4. Paket tidak digunakan lagi.
  5. Paket tidak digunakan lagi.
  6. Paket dialirkan kembali.
  7. 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.

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

severity Jika properti berisi nilai selain yang tercantum di sini, tingkat keparahan saran akan diperlakukan sebagai Rendah.

Permintaan sampel

GET https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json

Respon sampel

{
  "@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 penghapusan paket

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.

Permintaan sampel

GET https://api.nuget.org/v3/catalog0/data/2017.11.02.00.40.00/netstandard1.4_lib.1.0.0-test.json

Respon sampel

{
  "@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"
}

Kursor

Gambaran Umum

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.

Nilai awal

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.

Iterasi melalui item katalog

Untuk mengkueri kumpulan item katalog berikutnya yang akan diproses, klien harus:

  1. Ambil nilai kursor yang direkam dari penyimpanan lokal.
  2. Unduh dan deserialisasi indeks katalog.
  3. Temukan semua halaman katalog dengan tanda waktu penerapan yang lebih besar dari kursor.
  4. Deklarasikan daftar kosong item katalog untuk diproses.
  5. Untuk setiap halaman katalog yang cocok di langkah 3:
    1. Unduh dan deserialisasi halaman katalog.
    2. Temukan semua item katalog dengan tanda waktu penerapan yang lebih besar dari kursor.
    3. Tambahkan semua item katalog yang cocok ke daftar yang dinyatakan di langkah 4.
  6. Urutkan daftar item katalog menurut tanda waktu penerapan.
  7. Proses setiap item katalog secara berurutan:
    1. Unduh dan deserialisasi item katalog.
    2. Bereaksi dengan tepat terhadap jenis item katalog.
    3. Proses dokumen item katalog dengan cara khusus klien.
  8. 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.

Kursor dependen

Misalkan ada dua klien katalog yang memiliki dependensi yang melekat di mana output satu klien tergantung pada output klien lain.

Contoh

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.

Algoritma

Untuk menerapkan pembatasan ini, cukup ubah algoritma di atas menjadi:

  1. Ambil nilai kursor yang direkam dari penyimpanan lokal.
  2. Unduh dan deserialisasi indeks katalog.
  3. Temukan semua halaman katalog dengan tanda waktu penerapan yang lebih besar dari kursor kurang dari atau sama dengan kursor dependensi.
  4. Deklarasikan daftar kosong item katalog untuk diproses.
  5. Untuk setiap halaman katalog yang cocok di langkah 3:
    1. Unduh dan deserialisasi halaman katalog.
    2. Temukan semua item katalog dengan tanda waktu penerapan yang lebih besar dari kursor kurang dari atau sama dengan kursor dependensi.
    3. Tambahkan semua item katalog yang cocok ke daftar yang dinyatakan di langkah 4.
  6. Urutkan daftar item katalog menurut tanda waktu penerapan.
  7. Proses setiap item katalog secara berurutan:
    1. Unduh dan deserialisasi item katalog.
    2. Bereaksi dengan tepat terhadap jenis item katalog.
    3. Proses dokumen item katalog dengan cara khusus klien.
  8. 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.