Sdílet prostřednictvím


Rozhraní API serveru NuGet

Rozhraní API serveru NuGet je sada koncových bodů HTTP, které lze použít ke stahování balíčků, načítání metadat, publikování nových balíčků a provádění většiny dalších operací dostupných v oficiálních klientech NuGet.

Toto rozhraní API používá klient NuGet v sadě Visual Studio, nuget.exea rozhraní příkazového řádku .NET k provádění operací NuGet, jako je dotnet restore, vyhledávání v uživatelském rozhraní sady Visual Studio a nuget.exe push.

V některých případech nuget.org má další požadavky, které jiné zdroje balíčků nevynucují. Tyto rozdíly jsou zdokumentované protokoly nuget.org.

Jednoduchý výčet a stažení dostupných verzí nuget.exe najdete v koncovém bodu tools.json.

Pokud implementujete úložiště balíčků NuGet, projděte si také průvodce implementací další požadavky a doporučení.

Index služby

Vstupním bodem pro rozhraní API je dokument JSON ve známém umístění. Tento dokument se nazývá index služby . Umístění indexu služby pro nuget.org je https://api.nuget.org/v3/index.json.

Tento dokument JSON obsahuje seznam prostředků, které poskytují různé funkce a splňují různé případy použití.

Klienti, kteří podporují rozhraní API, by měli jako prostředek připojení k příslušným zdrojům balíčků přijmout jednu nebo více z těchto adres URL indexu služby.

Další informace o indexu služby najdete v tématu referenčnírozhraní API .

Správa verzí

Rozhraní API je verze 3 protokolu HTTP NuGet. Tento protokol se někdy označuje jako "rozhraní API V3". Tyto referenční dokumenty budou odkazovat na tuto verzi protokolu jednoduše jako "rozhraní API".

Verze schématu indexu služby je označena vlastností version v indexu služby. Rozhraní API vyžaduje, aby řetězec verze má číslo hlavní verze 3. Vzhledem k tomu, že ve schématu indexu služby se neprovedou změny způsobující chybu, zvýší se podverze řetězce verze.

Starší klienti (například nuget.exe 2.x) nepodporují rozhraní API V3 a podporují pouze starší rozhraní API V2, které zde není zdokumentované.

Rozhraní API NuGet v3 je pojmenované jako takové, protože se jedná o následníka rozhraní API v2, což byl protokol založený na OData implementovaný verzí 2.x oficiálního klienta NuGet. Rozhraní API v3 bylo poprvé podporováno verzí 3.0 oficiálního klienta NuGet a je stále nejnovější hlavní verzí protokolu podporovanou klientem NuGet, 4.0 a zapnutým.

Změny protokolu, které nejsou zásadní, byly provedeny v rozhraní API od prvního vydání.

Prostředky a schéma

Index služby popisuje různé prostředky. Aktuální sada podporovaných prostředků je následující:

Název prostředku Požadovaný Popis
katalogu Ne Úplný záznam všech událostí balíčku.
PackageBaseAddress Ano Získání obsahu balíčku (.nupkg)
PackageDetailsUriTemplate Ne Vytvořte adresu URL pro přístup k webové stránce podrobností balíčku.
PackagePublish Ano Nasdílení a odstranění (nebo zrušení seznamu) balíčků
ReadmeUriTemplate Ne Vytvořte adresu URL pro přístup k souboru README balíčku.
RegistrationsBaseUrl Ano Získejte metadata balíčku.
reportAbuseUriTemplate Ne Vytvořte adresu URL pro přístup k webové stránce zneužití sestavy.
repositorySignatures Ne Získejte certifikáty používané k podepisování úložiště.
SearchAutocompleteService Ne Zjišťování ID a verzí balíčků pomocí podřetězece
SearchQueryService Ano Filtrování a vyhledávání balíčků podle klíčových slov
SymbolPackagePublish Ne Nasdílení balíčků symbolů
VulnerabilityInfo Ne Balíčky se známými ohroženími zabezpečení

Obecně platí, že všechna nebinární data vrácená prostředkem rozhraní API se serializují pomocí json. Schéma odpovědí vrácené jednotlivými prostředky v indexu služby je definováno jednotlivě pro daný prostředek. Další informace o jednotlivých prostředcích najdete v tématech uvedených výše.

V budoucnu se s vývojem protokolu můžou do odpovědí JSON přidat nové vlastnosti. Aby klient byl v budoucnu důkazem, implementace by neměla předpokládat, že schéma odpovědi je konečné a nemůže obsahovat další data. Všechny vlastnosti, kterým implementace nerozumí, by se měly ignorovat.

Poznámka

Pokud zdroj neimplementuje SearchAutocompleteService jakékoli chování automatického dokončování by mělo být řádně zakázáno. Pokud ReportAbuseUriTemplate není implementováno, oficiální klient NuGet se vrátí na adresu URL zneužití sestavy nuget.org (sleduje NuGet/Home#4924). Jiní klienti se můžou rozhodnout, že se uživateli jednoduše nezobrazí adresa URL pro zneužití sestavy.

Nezdokumentované prostředky na nuget.org

Index služby V3 na nuget.org obsahuje některé prostředky, které nejsou popsané výše. Existuje několik důvodů, proč prostředek nezdokumentovat.

Nejprve nezadokumentujeme prostředky používané jako podrobnosti implementace nuget.org. SearchGalleryQueryService spadá do této kategorie. NuGetGallery tento prostředek používá k delegování některých dotazů V2 (OData) do našeho vyhledávacího indexu namísto použití databáze. Tento prostředek byl zaveden z důvodů škálovatelnosti a není určen pro externí použití.

Za druhé, nezadokumentujeme prostředky, které se nikdy nedoručily ve verzi RTM oficiálního klienta. PackageDisplayMetadataUriTemplate a PackageVersionDisplayMetadataUriTemplate spadají do této kategorie.

Za třetí, nezadokumentujeme prostředky, které jsou úzce propojené s protokolem V2, který sám je záměrně nezdokumentován. Zdroj LegacyGallery spadá do této kategorie. Tento prostředek umožňuje indexu služby V3 odkazovat na odpovídající zdrojovou adresu URL V2. Tento prostředek podporuje nuget.exe list.

Pokud zde není zdokumentovaný prostředek, důrazně doporučujeme, abyste na nich nezávisli. Můžeme odebrat nebo změnit chování těchto nezdokumentovaných prostředků, které by mohly narušit vaši implementaci neočekávanými způsoby.

Časová razítka

Všechna časová razítka vrácená rozhraním API jsou UTC nebo jsou jinak zadána pomocí reprezentace ISO 8601.

Metody HTTP

Sloveso Používat
DOSTAT Provádí operaci jen pro čtení, která obvykle načítá data.
HLAVA Načte hlavičky odpovědi pro odpovídající požadavek GET.
DÁT Vytvoří prostředek, který neexistuje nebo pokud existuje, aktualizuje ho. Některé prostředky nemusí podporovat aktualizaci.
VYMAZAT Odstraní nebo zruší seznam prostředků.

Stavové kódy HTTP

Kód Popis
200 Úspěch a existuje tělo odpovědi.
201 Úspěch a prostředek byl vytvořen.
202 Žádost byla přijata úspěšně, ale některé práce můžou být stále neúplné a dokončené asynchronně.
204 Úspěch, ale neexistuje žádný text odpovědi.
301 Trvalé přesměrování.
302 Dočasné přesměrování.
400 Parametry v adrese URL nebo v textu požadavku nejsou platné.
401 Zadané přihlašovací údaje jsou neplatné.
403 Akce není povolena pro zadané přihlašovací údaje.
404 Požadovaný prostředek neexistuje.
409 Požadavek je v konfliktu s existujícím prostředkem.
500 Služba zjistila neočekávanou chybu.
503 Služba je dočasně nedostupná.

Jakýkoli GET požadavek na koncový bod rozhraní API může vrátit přesměrování HTTP (301 nebo 302). Klienti by měli řádně zpracovávat takové přesměrování sledováním hlavičky Location a vydáním následného GET. Dokumentace týkající se konkrétních koncových bodů explicitně nevyvolá, kde se můžou používat přesměrování.

V případě stavového kódu na úrovni 500 může klient implementovat rozumný mechanismus opakování. Oficiální klient NuGet třikrát opakuje pokusy při výskytu jakéhokoli stavového kódu na úrovni 500 nebo chyby TCP/DNS.

Hlavičky požadavků HTTP

Jméno Popis
X-NuGet-ApiKey Požadováno pro nabízení a odstranění, viz prostředkůPackagePublish
X-NuGet–Client-Version zastaralé a nahrazené X-NuGet-Protocol-Version
X-NuGet–Protocol-Version Povinné pouze v některých případech pouze na nuget.org, viz nuget.org protokoly
X-NuGet–Session-Id volitelné. Klienti NuGet verze 4.7+ identifikují požadavky HTTP, které jsou součástí stejné relace klienta NuGet.

X-NuGet-Session-Id má jednu hodnotu pro všechny operace související s jedním obnovením v PackageReference. V jiných scénářích, jako je automatické dokončování a packages.config obnovení, může být kvůli faktoru kódu několik různých ID relace.

Autentizace

Ověřování je ponecháno až na implementaci zdroje balíčku, která se definuje. Pro nuget.org vyžaduje ověřování pouze prostředek PackagePublish prostřednictvím speciální hlavičky klíče rozhraní API. Podrobnosti najdete v PackagePublish prostředku.