Semaine 11
This commit is contained in:
@@ -0,0 +1,306 @@
|
||||
# Exo 3.4 "Consommer l'API" - BOICHÉ Gauvain
|
||||
|
||||
## Requêtes type
|
||||
|
||||
### Lister
|
||||
|
||||
```
|
||||
# Liste complète
|
||||
curl -i http://127.0.0.1:5000/api/equipments
|
||||
|
||||
# Equipement précis
|
||||
curl -i http://127.0.0.1:5000/api/equipments/1
|
||||
|
||||
# Equipement inexistant
|
||||
curl -i http://127.0.0.1:5000/api/equipments/9999
|
||||
|
||||
# Sortie formatée
|
||||
curl -s http://127.0.0.1:5000/api/equipments | python -m json.tool
|
||||
|
||||
# Compter les équipements
|
||||
curl -s http://127.0.0.1:5000/api/equipments | python -c "import json,sys; print(len(json.load(sys.stdin)))"
|
||||
|
||||
# Filtrage par champ
|
||||
curl -s http://127.0.0.1:5000/api/equipments | jq '.[] | select(.is_active==true) | {id, hostname}'
|
||||
```
|
||||
|
||||
### Créer
|
||||
|
||||
```
|
||||
# Normal
|
||||
curl -i -X POST http://127.0.0.1:5000/api/equipments \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"hostname":"curl-test-01","type":"router","ip_address":"10.0.50.1","is_active":true,"latency":12.5}'
|
||||
|
||||
# Mal formaté
|
||||
curl -i -X POST http://127.0.0.1:5000/api/equipments \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{hostname: "sans-guillemets"}'
|
||||
|
||||
# Avec mentions obligatoires manquantes
|
||||
curl -i -X POST http://127.0.0.1:5000/api/equipments \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"router"}'
|
||||
```
|
||||
|
||||
### Patch partiel (actif <-> inactif)
|
||||
|
||||
```
|
||||
curl -i -X PATCH http://127.0.0.1:5000/api/equipments/1/toggle
|
||||
```
|
||||
|
||||
### Mise à jour
|
||||
|
||||
```
|
||||
curl -i -X PUT http://127.0.0.1:5000/api/equipments/1 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"hostname":"serveur-prod-01","type":"server","ip_address":"10.0.10.1","is_active":true,"latency":8.3}'
|
||||
```
|
||||
|
||||
### Supprimer
|
||||
|
||||
```
|
||||
# Autorisé
|
||||
curl -i -X DELETE http://127.0.0.1:5000/api/equipments/1
|
||||
|
||||
# Interdit
|
||||
curl -i -X DELETE http://127.0.0.1:5000/api/equipments
|
||||
```
|
||||
|
||||
## Réponses
|
||||
|
||||
### Lister
|
||||
|
||||
```
|
||||
> curl -i http://127.0.0.1:5000/api/equipments
|
||||
HTTP/1.1 200 OK
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 12:58:59 GMT
|
||||
Content-Type: application/json
|
||||
Content-Length: 6850
|
||||
Connection: close
|
||||
|
||||
[
|
||||
{
|
||||
"hostname": "bird-dawn-peas-031",
|
||||
"id": 1,
|
||||
"interfaces": [
|
||||
{
|
||||
"id": 1,
|
||||
"port": 25,
|
||||
"service": "SMTP"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"port": 21,
|
||||
"service": "FTP"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"port": 80,
|
||||
"service": "HTTP"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"port": 21,
|
||||
"service": "FTP"
|
||||
}
|
||||
],
|
||||
"ip_address": "242.48.158.201",
|
||||
"is_active": true,
|
||||
"latency": 33.6,
|
||||
"type": "Router"
|
||||
}, [...]
|
||||
|
||||
> curl -i http://127.0.0.1:5000/api/equipments/12
|
||||
HTTP/1.1 200 OK
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 13:21:47 GMT
|
||||
Content-Type: application/json
|
||||
Content-Length: 314
|
||||
Connection: close
|
||||
|
||||
{
|
||||
"hostname": "barn-lamps-bottle-151",
|
||||
"id": 12,
|
||||
"interfaces": [
|
||||
{
|
||||
"id": 42,
|
||||
"port": 53,
|
||||
"service": "DNS"
|
||||
},
|
||||
{
|
||||
"id": 43,
|
||||
"port": 139,
|
||||
"service": "NetBIOS"
|
||||
}
|
||||
],
|
||||
"ip_address": "76.143.32.122",
|
||||
"is_active": true,
|
||||
"latency": 42.1,
|
||||
"type": "Server"
|
||||
}
|
||||
|
||||
> curl -i http://127.0.0.1:5000/api/equipments/1267
|
||||
HTTP/1.1 404 NOT FOUND
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 13:22:01 GMT
|
||||
Content-Type: application/json
|
||||
Content-Length: 46
|
||||
Connection: close
|
||||
|
||||
{
|
||||
"error": "\u00c9quipement introuvable."
|
||||
}
|
||||
|
||||
> curl -s http://127.0.0.1:5000/api/equipments | python -c "import json,sys; print(len(json.load(sys.stdin)))"
|
||||
15
|
||||
```
|
||||
|
||||
### Créer
|
||||
|
||||
```
|
||||
> curl -i -X POST http://127.0.0.1:5000/api/equipments -H "Content-Type: application/json" -d '{"hostname":"curl-test-01","type":"Router","ip_address":"10.0.50.1","is_active":true,"latency":12.5}'
|
||||
HTTP/1.1 201 CREATED
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 13:23:15 GMT
|
||||
Content-Type: application/json
|
||||
Content-Length: 154
|
||||
Connection: close
|
||||
|
||||
{
|
||||
"hostname": "curl-test-01",
|
||||
"id": 16,
|
||||
"interfaces": [],
|
||||
"ip_address": "10.0.50.1",
|
||||
"is_active": true,
|
||||
"latency": 12.5,
|
||||
"type": "Router"
|
||||
}
|
||||
|
||||
> curl -i -X POST http://127.0.0.1:5000/api/equipments -H "Content-Type: application/json" -d '{"hostname":"curl-test-01","type":"router","ip_address":"10.0.50.1","is_active":true,"latency":12.5}'
|
||||
HTTP/1.1 400 BAD REQUEST
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 13:23:04 GMT
|
||||
Content-Type: application/json
|
||||
Content-Length: 41
|
||||
Connection: close
|
||||
|
||||
{
|
||||
"error": "Type invalide : router."
|
||||
}
|
||||
|
||||
> curl -i -X POST http://127.0.0.1:5000/api/equipments -H "Content-Type: application/json" -d '{"type":"Router"}'
|
||||
HTTP/1.1 400 BAD REQUEST
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 13:23:58 GMT
|
||||
Content-Type: application/json
|
||||
Content-Length: 34
|
||||
Connection: close
|
||||
|
||||
{
|
||||
"error": "Hostname requis."
|
||||
}
|
||||
```
|
||||
|
||||
### Patch partiel (actif <-> inactif)
|
||||
|
||||
```
|
||||
> curl -i -X PATCH http://127.0.0.1:5000/api/equipments/2/toggle
|
||||
HTTP/1.1 200 OK
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 13:46:11 GMT
|
||||
Content-Type: application/json
|
||||
Content-Length: 387
|
||||
Connection: close
|
||||
|
||||
{
|
||||
"hostname": "gulf-manage-order-022",
|
||||
"id": 2,
|
||||
"interfaces": [
|
||||
{
|
||||
"id": 3,
|
||||
"port": 21,
|
||||
"service": "FTP"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"port": 139,
|
||||
"service": "NetBIOS"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"port": 143,
|
||||
"service": "IMAP"
|
||||
}
|
||||
],
|
||||
"ip_address": "183.139.112.112",
|
||||
"is_active": false,
|
||||
"latency": 28.1,
|
||||
"type": "Database"
|
||||
}
|
||||
```
|
||||
|
||||
### Mise à jour
|
||||
|
||||
```
|
||||
> curl -i -X PUT http://127.0.0.1:5000/api/equipments/1 -H "Content-Type: application/json" -d '{"hostname":"serveur-prod-01","type":"Server","ip_address":"10.0.10.1","is_active":true,"latency":8.3}'
|
||||
HTTP/1.1 200 OK
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 13:49:06 GMT
|
||||
Content-Type: application/json
|
||||
Content-Length: 297
|
||||
Connection: close
|
||||
|
||||
{
|
||||
"hostname": "serveur-prod-01",
|
||||
"id": 1,
|
||||
"interfaces": [
|
||||
{
|
||||
"id": 1,
|
||||
"port": 53,
|
||||
"service": "DNS"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"port": 3389,
|
||||
"service": "RDP"
|
||||
}
|
||||
],
|
||||
"ip_address": "10.0.10.1",
|
||||
"is_active": true,
|
||||
"latency": 8.3,
|
||||
"type": "Server"
|
||||
}
|
||||
```
|
||||
|
||||
### Supprimer
|
||||
|
||||
```
|
||||
> curl -i -X DELETE http://127.0.0.1:5000/api/equipments/1
|
||||
HTTP/1.1 200 OK
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 13:49:49 GMT
|
||||
Content-Type: application/json
|
||||
Content-Length: 80
|
||||
Connection: close
|
||||
|
||||
{
|
||||
"message": "\u00c9quipement \u00ab serveur-prod-01 \u00bb supprim\u00e9."
|
||||
}
|
||||
|
||||
> curl -i -X DELETE http://127.0.0.1:5000/api/equipments
|
||||
HTTP/1.1 405 METHOD NOT ALLOWED
|
||||
Server: Werkzeug/3.1.8 Python/3.14.6
|
||||
Date: Wed, 08 Jul 2026 13:50:04 GMT
|
||||
Content-Type: text/html; charset=utf-8
|
||||
Allow: OPTIONS, POST, HEAD, GET
|
||||
Content-Length: 153
|
||||
Connection: close
|
||||
|
||||
<!doctype html>
|
||||
<html lang=en>
|
||||
<title>405 Method Not Allowed</title>
|
||||
<h1>Method Not Allowed</h1>
|
||||
<p>The method is not allowed for the requested URL.</p>
|
||||
```
|
||||
Reference in New Issue
Block a user