Catalogue
Le catalogue est une ressource qui enregistre toutes les opérations de package sur une source de package, telles que les créations et les suppressions. La ressource de catalogue a le type Catalog
dans l’index de service. Vous pouvez utiliser cette ressource pour rechercher tous les packages publiés.
Notes
Étant donné que le catalogue n’est pas utilisé par le client NuGet officiel, toutes les sources de package implémentent le catalogue.
Notes
Actuellement, le catalogue nuget.org n’est pas disponible en Chine. Pour plus d’informations, consultez NuGet/NuGetGallery#4949.
La valeur suivante @type
est utilisée :
Valeur @type | Notes |
---|---|
Catalogue/3.0.0 | La version initiale |
L’URL de point d'entrée pour les API suivantes est la valeur de la propriété @id
associée aux valeurs de ressource @type
mentionnées ci-dessus. Ce sujet utilise l’URL de l’espace réservé {@id}
.
Toutes les URL trouvées dans la ressource de catalogue prennent en charge les méthodes HTTP GET
et HEAD
.
L’index de catalogue est un document dans un emplacement bien connu qui a une liste d’articles de catalogue, classés chronologiquement. Il s’agit du point d’entrée de la ressource de catalogue.
L’index est composé de pages de catalogue. Chaque page de catalogue contient des articles de catalogue. Chaque article de catalogue représente un événement concernant un package unique à un moment donné. Un article de catalogue peut représenter un package qui a été créé, non répertorié, répertorié de nouveau ou supprimé de la source du package. En traitant les articles de catalogue dans l’ordre chronologique, le client peut créer une vue à jour de chaque package existant sur la source du package V3.
En bref, les objets blob de catalogue ont la structure hiérarchique suivante :
- Index : point d’entrée du catalogue.
- Page : regroupement d’articles de catalogue.
- Feuille : document représentant un article de catalogue, qui est une instantané de l’état d’un package unique.
Chaque objet catalogue a une propriété appelée commitTimeStamp
représentant lorsque l’article a été ajouté au catalogue. Les articles de catalogue sont ajoutés à une page de catalogue par lots appelés validations. Tous les articles de catalogue de la même validation ont le même horodatage de validation (commitTimeStamp
) et le même ID de validation (commitId
). Les articles de catalogue placés dans la même validation représentent les événements qui se sont produits à un moment donné dans le temps sur la source du package. Il n’existe aucun ordre dans une validation de catalogue.
Étant donné que chaque ID de package et chaque version sont uniques, il n’y aura jamais plus d’un article de catalogue dans une validation. Cela garantit que les articles de catalogue d’un seul package peuvent toujours être triés sans ambiguïté en ce qui concerne l’horodatage de validation.
Il n’y a jamais plus d’une validation dans le catalogue par commitTimeStamp
. En d’autres termes, le commitId
est redondant avec le commitTimeStamp
.
Contrairement à la ressource de métadonnées de package, indexée par ID de package, le catalogue est indexé (et interrogeable) uniquement par heure.
Les articles de catalogue sont toujours ajoutés au catalogue dans un ordre monotonique croissant et chronologique. Cela signifie que si une validation de catalogue est ajoutée au moment X, aucune validation de catalogue n’est jamais ajoutée avec une heure inférieure ou égale à X.
La requête suivante récupère l’index du catalogue.
GET {@id}
L’index de catalogue est un document JSON qui contient un objet avec les propriétés suivantes :
Nom | Type | Requise | Notes |
---|---|---|---|
commitID | string | Oui | Un ID unique associé à la validation la plus récente |
commitTimeStamp | string | Oui | Un horodatage de la validation la plus récente |
count | entier | Oui | Le nombre de pages dans l'index |
items | tableau d'objets | Oui | Tableau d’objets, chaque objet représentant une page |
Chaque élément du tableau items
est un objet avec des détails minimaux sur chaque page. Ces objets de page ne contiennent pas les feuilles de catalogue (articles). L’ordre des éléments de ce tableau n’est pas défini. Les pages peuvent être triées par le client en mémoire à l’aide de sa propriété commitTimeStamp
.
À mesure que de nouvelles pages sont introduites, le count
sera incrémenté et de nouveaux objets apparaîtront dans le tableau items
.
À mesure que les articles sont ajoutés au catalogue, les index commitId
changent et augmenteront commitTimeStamp
. Ces deux propriétés sont essentiellement un résumé sur toutes les valeurs commitId
et commitTimeStamp
de page dans le tableau items
.
Les objets de page de catalogue trouvés dans la propriété de l’index de items
du catalogue ont les propriétés suivantes :
Nom | Type | Requise | Notes |
---|---|---|---|
@id | string | Oui | URL de récupération de la page catalogue |
commitID | string | Oui | Un ID unique associé à la validation la plus récente dans cette page |
commitTimeStamp | string | Oui | Un horodatage de la validation la plus récente dans cette page |
count | entier | Oui | Nombre total d’articles dans la page de catalogue. |
Contrairement à la ressource de métadonnées de package qui, dans certains cas, inclut des feuilles dans l’index, les feuilles de catalogue ne sont jamais insérées dans l’index et doivent toujours être récupérées à l’aide de l’URL @id
de la page.
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
}
]
}
La page de catalogue est une collection d’articles de catalogue. Il s’agit d’un document récupéré à l’aide de l’une des valeurs @id
trouvées dans l’index du catalogue. L’URL d’une page de catalogue n’est pas destinée à être prévisible et doit être découverte uniquement à l’aide de l’index du catalogue.
Les nouveaux articles de catalogue sont ajoutés à la page dans l’index de catalogue uniquement avec l’horodatage de validation le plus élevé ou dans une nouvelle page. Une fois qu’une page avec un horodatage de validation plus élevé est ajoutée au catalogue, les pages plus anciennes ne sont jamais ajoutées ou modifiées.
Le document de page de catalogue est un objet JSON avec les propriétés suivantes :
Nom | Type | Requise | Notes |
---|---|---|---|
commitID | string | Oui | Un ID unique associé à la validation la plus récente dans cette page |
commitTimeStamp | string | Oui | Un horodatage de la validation la plus récente dans cette page |
count | entier | Oui | Le nombre d'articles dans la page. |
items | tableau d'objets | Oui | Articles de catalogue dans cette page |
parent | string | Oui | Une URL de l’index de catalogue |
Chaque article du tableau items
est un objet avec des détails minimaux sur l’article de catalogue. Ces objets d’article ne contiennent pas toutes les données de l’article de catalogue. L’ordre des articles du tableau items
de la page n’est pas défini. Les articles peuvent être commandés par le client en mémoire à l’aide de leur propriété commitTimeStamp
.
Le nombre d’articles de catalogue dans une page est défini par l’implémentation du serveur. Pour nuget.org, il y a au maximum 550 articles dans chaque page, bien que le nombre réel puisse être plus petit pour certaines pages en fonction de la taille du lot de validation suivant au point dans le temps.
À mesure que de nouveaux articles sont introduits, le count
est incrémenté et les nouveaux objets d’article de catalogue apparaissent dans le tableau items
.
À mesure que les articles sont ajoutés à la page, le commitId
est modifié et le commitTimeStamp
augmente. Ces deux propriétés sont essentiellement un résumé sur toutes les valeurs commitId
et commitTimeStamp
dans le tableau items
.
Les objets d’article de catalogue trouvés dans la propriété items
de la page de catalogue ont les propriétés suivantes :
Nom | Type | Requise | Notes |
---|---|---|---|
@id | string | Oui | URL permettant de récupérer l’article de catalogue |
@type | string | Oui | Le type d’article de catalogue |
commitID | string | Oui | ID de validation associé à cet article de catalogue |
commitTimeStamp | string | Oui | L’horodatage de validation de cet article de catalogue |
nuget:id | string | Oui | ID de package auquel cette feuille est liée |
nuget:version | string | Oui | Version du package à laquelle cette feuille est liée |
Les valeurs @type
possibles sont l’une des deux valeurs suivantes :
nuget:PackageDetails
: cela correspond au typePackageDetails
dans le document feuille de catalogue.nuget:PackageDelete
: cela correspond au typePackageDelete
dans le document feuille de catalogue.
Pour plus d’informations sur ce que signifie chaque type, consultez le type d’articles correspondant ci-dessous.
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"
}
]
}
La feuille de catalogue contient des métadonnées sur un ID de package et une version spécifiques à un moment donné. Il s’agit d’un document récupéré à l’aide de la valeur @id
trouvée dans une page de catalogue. L’URL d’une feuille de catalogue n’est pas destinée à être prévisible et doit être découverte à l’aide d’une page de catalogue uniquement.
Le document feuille de catalogue est un objet JSON avec les propriétés suivantes :
Nom | Type | Requise | Notes |
---|---|---|---|
@type | chaîne ou tableau de chaînes | Oui | Le ou les types d’articles de catalogue |
catalog:commitId | string | Oui | ID de validation associé à cet article de catalogue |
catalog:commitTimeStamp | string | Oui | L’horodatage de validation de cet article de catalogue |
id | string | Oui | L’ID de package de l’article du catalogue |
published | string | Oui | Date de publication de l’article de catalogue de packages |
version | chaîne | Oui | Version du package de l’article de catalogue |
La propriété @type
est une chaîne ou un tableau de chaînes. Par souci de commodité, si la valeur @type
est une chaîne, elle doit être traitée comme n’importe quel tableau de taille 1. Toutes les valeurs possibles pour @type
sont documentées. Toutefois, chaque article de catalogue a exactement l’une des deux valeurs de type de chaîne suivantes :
PackageDetails
: représente une instantané de métadonnées de packagePackageDelete
: représente un package qui a été supprimé
Les articles de catalogue avec le type PackageDetails
contiennent un instantané de métadonnées de package pour un ID de package spécifique (combinaison d’ID et de version). Un article de catalogue de détails de package est généré lorsqu’une source de package rencontre l’un des scénarios suivants :
- Un package est envoyé.
- Un package est répertorié de nouveau.
- Un package est retiré de la liste.
- Un package est déconseillé.
- Un package n’est pas déconseillé.
- Un package est ajusté dynamiquement.
- L’état des vulnérabilités d’un package est mis à jour.
Un ajustement dynamique de package est un mouvement administratif qui génère essentiellement un faux envoi d’un package existant sans aucune modification du package lui-même. Sur nuget.org, un ajustement dynamique est utilisé après avoir corrigé un bogue dans l’un des travaux en arrière-plan qui consomment le catalogue.
Les clients qui consomment les articles de catalogue ne doivent pas tenter de déterminer quels scénarios ont produit l’article de catalogue. Au lieu de cela, le client doit simplement mettre à jour toute vue ou index maintenu avec les métadonnées contenues dans l’article de catalogue. De plus, les articles de catalogue dupliqués ou redondants doivent être gérés correctement (de manière idempotente).
Les articles de catalogue de détails du package ont les propriétés suivantes en plus de celles incluses dans toutes les feuilles de catalogue.
Nom | Type | Requise | Notes |
---|---|---|---|
authors | string | non | |
created | string | non | Horodatage du moment où le package a été créé pour la première fois. Propriété de secours : published . |
dependencyGroups | tableau d'objets | non | Dépendances du package, regroupées par version cible de .Net Framework (même format que la ressource de métadonnées de package) |
abandon | object | non | Abandon associé au package (même format que la ressource de métadonnées du package) |
description | string | non | |
iconUrl | string | non | |
isPrerelease | booléen | non | Indique si la version du package est préversion ou non. Peut être détecté à partir de version . |
langue | string | non | |
licenseUrl | string | non | |
liste | booléen | non | Indique si le package est répertorié ou non |
minClientVersion | string | non | |
packageHash | string | Oui | Code de hachage du package, encodage à l’aide de la base 64 standard |
packageHashAlgorithm | string | Oui | |
packageSize | entier | Oui | La taille en octets du package .nupkg |
packageTypes | tableau d'objets | non | Types de package spécifiés par l’auteur. |
projectUrl | string | non | |
releaseNotes | string | non | |
requireLicenseAgreement | booléen | non | Supposer si false est exclu |
résumé | string | non | |
tags | tableau de chaînes | non | |
title | string | non | |
verbatimVersion | string | non | Chaîne de version telle qu’elle est trouvée à l’origine dans le .nuspec |
vulnerabilities | tableau d'objets | non | Les vulnérabilités de sécurité du package |
La propriété du package version
est la chaîne de version complète après la normalisation. Cela signifie que les données de version SemVer 2.0.0 peuvent être incluses ici.
L’horodatage created
est le moment où le package a été reçu pour la première fois par la source du package, ce qui est généralement un court délai avant l’horodatage de validation de l’article de catalogue.
Le packageHashAlgorithm
est une chaîne définie par l’implémentation du serveur représentant l’algorithme de hachage utilisé pour produire le packageHash
. nuget.org toujours utilisé la packageHashAlgorithm
valeur de SHA512
.
La propriété packageTypes
ne sera présente que si un type de package a été spécifié par l’auteur. Si elle est présente, elle aura toujours au moins une (1) entrée. Chaque article du tableau packageTypes
est un objet JSON avec les propriétés suivantes :
Nom | Type | Requise | Notes |
---|---|---|---|
name | string | Oui | Le nom du type de package. |
version | chaîne | non | La version du type de package. Présente uniquement si l’auteur a spécifié explicitement une version dans le nuspec. |
L’horodatage published
est l’heure à laquelle le package a été répertorié pour la dernière fois.
Notes
Sur nuget.org, la valeur published
est définie sur l’année 1900 lorsque le package n’est pas répertorié.
Tableau d'objets vulnerability
. Chaque vulnérabilité contient les propriétés suivantes :
Nom | Type | Requise | Notes |
---|---|---|---|
advisoryUrl | string | Oui | Emplacement de l’avis de sécurité pour le package |
severity | string | Oui | Gravité de l’avis : « 0 » = Faible, « 1 » = Modéré, « 2 » = Élevé, « 3 » = Critique |
Si la propriété severity
contient des valeurs autres que celles répertoriées ici, la gravité de l’avis doit être traitée comme Faible.
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"
}
]
}
Les articles de catalogue avec le type PackageDelete
contiennent un ensemble minimal d’informations indiquant aux clients catalogue qu’un package a été supprimé de la source du package et qu’il n’est plus disponible pour une opération de package (comme par exemple la restauration).
Notes
Il est possible qu’un package soit supprimé et republié ultérieurement à l’aide du même ID de package et de la même version. Sur nuget.org, il s’agit d’un cas très rare, car il interrompt l’hypothèse officielle du client qu’un ID de package et une version impliquent un contenu de package spécifique. Pour plus d’informations sur la suppression de package sur nuget.org, consultez notre politique.
Les articles de catalogue de suppression de package n’ont pas de propriétés supplémentaires en plus de celles incluses sur toutes les feuilles de catalogue.
La propriété version
est la chaîne de version d’origine trouvée dans le package .nuspec.
La propriété published
est l’heure à laquelle le package a été supprimé, ce qui est généralement aussi court avant l’horodatage de validation de l’article de catalogue.
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"
}
Cette section décrit un concept client qui, même s’il n’est pas nécessairement mandaté par le protocole, doit faire partie de toute implémentation pratique du catalogue par le client.
Étant donné que le catalogue est une structure de données d’ajout uniquement indexée par le temps, le client doit stocker un curseur localement ; il représente jusqu’à quel point dans le temps le client a traité des articles de catalogue. Notez que cette valeur de curseur ne doit jamais être générée à l’aide de l’horloge de l’ordinateur du client. Au lieu de cela, la valeur doit provenir de la valeur commitTimestamp
d’un objet catalogue.
Chaque fois que le client souhaite traiter de nouveaux événements sur la source du package, il doit uniquement interroger le catalogue pour tous les articles du catalogue avec un horodatage de validation supérieur à son curseur stocké. Une fois que le client a correctement traité tous les nouveaux articles de catalogue, il enregistre le dernier horodatage de validation des articles de catalogue simplement traité comme sa nouvelle valeur de curseur.
À l’aide de cette approche, le client peut ne jamais manquer d’événements de package qui se sont produits sur la source du package. De plus, le client n’a jamais à retraiter les anciens événements avant l’horodatage de validation enregistré du curseur.
Ce concept puissant de curseurs est utilisé pour de nombreux travaux en arrière-plan nuget.org et est utilisé pour conserver l’API V3 elle-même à jour.
Lorsque le client de catalogue démarre pour la première fois (et n’a donc aucune valeur de curseur), il doit utiliser une valeur de curseur par défaut de System.DateTimeOffset.MinValue
de .NET ou une telle notion analogue d’horodatage pouvant être représenté au minimum.
Pour rechercher l’ensemble suivant d’articles de catalogue à traiter, le client doit :
- Récupérez la valeur de curseur enregistrée à partir d’un magasin local.
- Téléchargez et désérialisez l’index du catalogue.
- Recherchez toutes les pages de catalogue avec un horodatage de validation supérieur au curseur.
- Déclarez une liste vide d’articles de catalogue à traiter.
- Pour chaque page de catalogue mise en correspondance à l’étape 3 :
- Téléchargez et désérialisez la page du catalogue.
- Recherchez tous les articles de catalogue avec un horodatage de validation supérieur au curseur.
- Ajoutez tous les articles de catalogue correspondants à la liste déclarée à l’étape 4.
- Triez la liste des articles de catalogue par horodatage de validation.
- Traitez chaque article de catalogue en séquence :
- Téléchargez et désérialisez l’article de catalogue.
- Réagissez de manière appropriée au type de l’article de catalogue.
- Traitez le document d’article de catalogue de manière spécifique au client.
- Enregistrez l’horodatage de validation du dernier article de catalogue comme nouvelle valeur de curseur.
Avec cet algorithme de base, l’implémentation du client peut créer une vue complète de tous les packages disponibles sur la source du package. Le client n’a besoin que d’exécuter cet algorithme régulièrement pour toujours connaître les dernières modifications apportées à la source du package.
Notes
Il s’agit de l’algorithme que nuget.org utilise pour maintenir à jour les ressources de métadonnées de package, de contenu de package, de recherche et d’autocomplétion.
Supposons qu’il existe deux clients de catalogue qui ont une dépendance inhérente où la sortie d’un client dépend de la sortie d’un autre client.
Par exemple, sur nuget.org un package récemment publié ne doit pas apparaître dans la ressource de recherche avant d’apparaître dans la ressource de métadonnées du package. Cela est dû au fait que l’opération de « restauration » effectuée par le client NuGet officiel utilise la ressource de métadonnées de package. Si un client découvre un package à l’aide du service Search, il doit pouvoir restaurer correctement ce package à l’aide de la ressource de métadonnées du package. En d’autres termes, la ressource de recherche dépend de la ressource de métadonnées du package. Chaque ressource a un travail en arrière-plan client catalogue qui met à jour cette ressource. Chaque client a son propre curseur.
Étant donné que les deux ressources sont générées à partir du catalogue, le curseur du client de catalogue qui met à jour la ressource de recherche ne doit pas dépasser le curseur du client du catalogue de métadonnées du package.
Pour implémenter cette restriction, modifiez simplement l’algorithme ci-dessus pour être :
- Récupérez la valeur de curseur enregistrée à partir d’un magasin local.
- Téléchargez et désérialisez l’index du catalogue.
- Recherchez toutes les pages de catalogue avec un horodatage de validation supérieur au curseur inférieur ou égal au curseur de la dépendance.
- Déclarez une liste vide d’articles de catalogue à traiter.
- Pour chaque page de catalogue mise en correspondance à l’étape 3 :
- Téléchargez et désérialisez la page du catalogue.
- Recherchez tous les articles de catalogue avec un horodatage de validation supérieur au curseur inférieur ou égal au curseur de la dépendance.
- Ajoutez tous les articles de catalogue correspondants à la liste déclarée à l’étape 4.
- Triez la liste des articles de catalogue par horodatage de validation.
- Traitez chaque article de catalogue en séquence :
- Téléchargez et désérialisez l’article de catalogue.
- Réagissez de manière appropriée au type de l’article de catalogue.
- Traitez le document d’article de catalogue de manière spécifique au client.
- Enregistrez l’horodatage de validation du dernier article de catalogue comme nouvelle valeur de curseur.
À l’aide de cet algorithme modifié, vous pouvez créer un système de clients de catalogue dépendants qui produisent tous leurs propres index, artefacts, etc.