# Bibliothèques clientes

> Les clients officiels de WoWDB, d’un seul fichier et sans dépendance, et la génération de clients par OpenAPI.

Documentation de l’API de WoWDB des Défias : https://docs.wowdb.assemblee-defias.fr/bibliotheques

## Bibliothèques officielles

Chaque client tient en **un seul fichier sans dépendance** : copiez-le dans votre projet. Tous suivent la même interface : une méthode par ressource, la pagination automatique (`iterate`), une erreur typée avec le `code` de l’API, et une nouvelle tentative après `Retry-After` sur un `429`.

> **Bon à savoir** : Ces bibliothèques ne sont pas (encore) publiées sur npm, PyPI, Packagist, RubyGems ou Maven : téléchargez-les ci-dessous, et vérifiez leur somme SHA-256. Le fichier [SHA256SUMS](https://docs.wowdb.assemblee-defias.fr/clients/SHA256SUMS) les réunit (`sha256sum -c SHA256SUMS`).

**Avec un client officiel**

#### JavaScript

```js
import { WowDb } from "./wowdb.mjs";

const wowdb = new WowDb({ userAgent: "bot-de-ma-guilde/1.0" });
const lame = await wowdb.items.retrieve("classic", 5191);
console.log(lame.name, lame.weapon.dps);

for await (const dague of wowdb.items.iterate("classic", { type: "dagger", rogue: true })) {
  console.log(dague.name);
}
```

#### Python

```python
from wowdb import WowDb

wowdb = WowDb(user_agent="bot-de-ma-guilde/1.0")
lame = wowdb.items.retrieve("classic", 5191)
print(lame["name"], lame["weapon"]["dps"])

for dague in wowdb.items.iterate("classic", type="dagger", rogue=True):
    print(dague["name"])
```

#### PHP

```php
<?php
require 'WowDb.php';

$wowdb = new WowDb\Client('bot-de-ma-guilde/1.0');
$lame = $wowdb->retrieve('classic', 'items', 5191);
echo $lame['name'], PHP_EOL;

foreach ($wowdb->iterate('/classic/items', ['type' => 'dagger', 'rogue' => 'true']) as $dague) {
    echo $dague['name'], PHP_EOL;
}
```

#### Ruby

```ruby
require_relative "wowdb"

wowdb = WowDb::Client.new(user_agent: "bot-de-ma-guilde/1.0")
lame = wowdb.retrieve("classic", "items", 5191)
puts lame["name"]

wowdb.iterate("/classic/items", type: "dagger", rogue: true) { |dague| puts dague["name"] }
```

#### Go

```go
client := wowdb.New("bot-de-ma-guilde/1.0")
lame, err := client.Retrieve(ctx, "classic", "items", 5191)
if err != nil {
	log.Fatal(err)
}
fmt.Println(lame["name"])

err = client.Iterate(ctx, "/classic/items", url.Values{"type": {"dagger"}, "rogue": {"true"}},
	func(dague map[string]any) error {
		fmt.Println(dague["name"])
		return nil
	})
```

#### Java

```java
WowDb wowdb = new WowDb("bot-de-ma-guilde/1.0");
Map<String, Object> lame = wowdb.retrieve("classic", "items", 5191);
System.out.println(lame.get("name"));

for (Map<String, Object> dague : wowdb.iterate("/classic/items", Map.of("type", "dagger", "rogue", "true"))) {
    System.out.println(dague.get("name"));
}
```

#### .NET

```csharp
var wowdb = new WowDb.Client("bot-de-ma-guilde/1.0");
var lame = await wowdb.RetrieveAsync("classic", "items", 5191);
Console.WriteLine(lame.GetProperty("name").GetString());

await foreach (var dague in wowdb.IterateAsync("/classic/items", new() { ["type"] = "dagger", ["rogue"] = "true" }))
    Console.WriteLine(dague.GetProperty("name").GetString());
```

## Téléchargements

| Fichier | Langage | Plateformes | Version | Taille | SHA-256 |
| --- | --- | --- | --- | --- | --- |
| [wowdb.mjs](https://docs.wowdb.assemblee-defias.fr/clients/wowdb.mjs) | JavaScript / TypeScript | Navigateur, Node.js 18+, Deno, Bun (ESM) | 1.0.0 | 6573 octets | `a7b00fe9cf204a05c23ab5f3eaef5607730755d1c40577dff2129d5397c378fb` |
| [wowdb.d.ts](https://docs.wowdb.assemblee-defias.fr/clients/wowdb.d.ts) | Types TypeScript | Pour wowdb.mjs | 1.0.0 | 4376 octets | `628c7e3222dedc5b4cfd9bce128303bc07943981651b2d4bc6c341b0a64831de` |
| [wowdb.py](https://docs.wowdb.assemblee-defias.fr/clients/wowdb.py) | Python | Python 3.8+, bibliothèque standard | 1.0.0 | 6404 octets | `e6c997523786fc301d38525f0c44ca49fe02bf5eb225a60459882a2d8e2ea100` |
| [WowDb.php](https://docs.wowdb.assemblee-defias.fr/clients/WowDb.php) | PHP | PHP 8.1+, extension json | 1.0.0 | 5453 octets | `3ce312657cd8295f76b02101b0836e07ec3b0ebe15caa078ca144820d9d22a0a` |
| [wowdb.rb](https://docs.wowdb.assemblee-defias.fr/clients/wowdb.rb) | Ruby | Ruby 3.0+, bibliothèque standard | 1.0.0 | 4214 octets | `b4ce1c7f5971bd4c9852738e32e6951c20dab52bcbd2ec719a165d88239f071a` |
| [wowdb.go](https://docs.wowdb.assemblee-defias.fr/clients/wowdb.go) | Go | Go 1.18+, bibliothèque standard | 1.0.0 | 5311 octets | `4c5d45843a156ec6d71b73443b5ca7c0d362d50a7cec3eb5c0681c788c76da80` |
| [WowDb.java](https://docs.wowdb.assemblee-defias.fr/clients/WowDb.java) | Java | Java 11+, java.net.http, lecteur JSON intégré | 1.0.0 | 12010 octets | `ac84d831bb2b7a5a0d82b8ef0f76b4cd29f9e43ddabf0aa26573ecf6cc3e02d1` |
| [WowDb.cs](https://docs.wowdb.assemblee-defias.fr/clients/WowDb.cs) | C# / .NET | .NET 6+, System.Text.Json | 1.0.0 | 7049 octets | `1e3d47affb44aaf06a51f6ad1046029bcf3c5226166cc392542817d9cedbcaff` |

Les clients marqués « testé » sont exécutés contre l’API à chaque série de tests de WoWDB ; les autres suivent la même interface et les mêmes règles (erreurs, pagination, `Retry-After`). Un souci, une amélioration ? Dites-le sur le [forum](https://forum.assemblee-defias.fr/).

## Générer un client depuis OpenAPI

Pour un client typé dans un autre langage, ou avec vos conventions, générez-le depuis la [spécification OpenAPI 3.1](https://docs.wowdb.assemblee-defias.fr/openapi). Quelques générateurs connus :

| Langage | Outil | Commande |
| --- | --- | --- |
| TypeScript (types) | openapi-typescript | `npx openapi-typescript https://api.wowdb.assemblee-defias.fr/v1/openapi.json -o wowdb.d.ts` |
| TypeScript (client fetch) | OpenAPI Generator | `openapi-generator-cli generate -i https://api.wowdb.assemblee-defias.fr/v1/openapi.json -g typescript-fetch -o wowdb-ts` |
| Python | openapi-python-client | `openapi-python-client generate --url https://api.wowdb.assemblee-defias.fr/v1/openapi.json` |
| Go | oapi-codegen | `oapi-codegen -package wowdb -generate types,client openapi.json > wowdb.gen.go` |
| Java | OpenAPI Generator | `openapi-generator-cli generate -i https://api.wowdb.assemblee-defias.fr/v1/openapi.json -g java -o wowdb-java` |
| C# | NSwag | `nswag openapi2csclient /input:https://api.wowdb.assemblee-defias.fr/v1/openapi.json /namespace:WowDb /output:WowDb.cs` |
| PHP | OpenAPI Generator | `openapi-generator-cli generate -i https://api.wowdb.assemblee-defias.fr/v1/openapi.json -g php -o wowdb-php` |
| Ruby | OpenAPI Generator | `openapi-generator-cli generate -i https://api.wowdb.assemblee-defias.fr/v1/openapi.json -g ruby -o wowdb-ruby` |
| Rust | OpenAPI Generator | `openapi-generator-cli generate -i https://api.wowdb.assemblee-defias.fr/v1/openapi.json -g rust -o wowdb-rust` |
| Kotlin, Swift, Dart… | OpenAPI Generator | `openapi-generator-cli list` donne les 50 générateurs de clients |

> **Bon à savoir** : Pour oapi-codegen, téléchargez d’abord le fichier : `curl -o openapi.json https://api.wowdb.assemblee-defias.fr/v1/openapi.json`.

---

API de WoWDB des Défias, v1 (2026-10-01). Adresse de base : https://api.wowdb.assemblee-defias.fr/v1. Index : https://docs.wowdb.assemblee-defias.fr/llms.txt.
