Dokos supporte désormais la méthode HTTP QUERY, définie dans la RFC 10008. Cette méthode combine les avantages des méthodes GET et POST :
Cette méthode est particulièrement utile pour les requêtes complexes nécessitant des filtres avancés ou des paramètres structurés, sans risquer de modifier les données.
La méthode QUERY est idéale pour :
Pour utiliser la méthode QUERY, votre fonction doit être whitelistée dans Dokos. Voici comment procéder :
Ajoutez le décorateur @frappe.whitelist() à votre fonction Python :
@frappe.whitelist()
def ma_fonction_query(param1, param2):
# Logique de la fonction
return frappe.get_all("Client", filters={"territory": param1})
Utilisez la méthode HTTP QUERY avec un corps de requête JSON :
QUERY /api/method/ma_fonction_query HTTP/1.1
Content-Type: application/json
{
"param1": "France",
"param2": "2023-01-01"
}
Fonction Python (dans un fichier .py de votre application) :
@frappe.whitelist()
def get_clients_by_territory(territory):
"""Récupère la liste des clients pour un territoire donné."""
return frappe.get_all(
"Client",
filters={"territory": territory},
fields=["name", "customer_name", "territory"]
)
Requête QUERY :
QUERY /api/method/get_clients_by_territory HTTP/1.1
Host: votre-site.dokos.cloud
Authorization: token api_key:api_secret
Content-Type: application/json
{
"territory": "France"
}
Réponse attendue :
{
"message": [
{
"name": "CUST-00001",
"customer_name": "Maison Verte SARL",
"territory": "France"
},
{
"name": "CUST-00002",
"customer_name": "Bureau Moderne",
"territory": "France"
}
]
}
Voici comment la méthode QUERY est traitée dans Dokos :
| Caractéristique | GET | POST | QUERY |
|---|---|---|---|
| Corps de requête | ❌ Non | ✅ Oui | ✅ Oui |
| Sécurité (safe) | ✅ Oui | ❌ Non | ✅ Oui |
| Transactions persistantes | ✅ Oui | ✅ Oui | ❌ Annulées |
| Vérification CSRF | ❌ Non | ✅ Oui | ❌ Non |
Non. Toutes les modifications de la base de données effectuées pendant une requête QUERY sont annulées. Utilisez POST pour les opérations qui nécessitent des modifications persistantes.
Les erreurs sont gérées de la même manière que pour les autres méthodes HTTP. Utilisez des codes de statut appropriés (ex: 404 Not Found, 403 Forbidden) et des messages d'erreur clairs dans le corps de la réponse.
La méthode QUERY n'est pas standardisée dans HTTP/1.1 ou HTTP/2. Certains clients ou bibliothèques HTTP peuvent ne pas la supporter nativement. Dans ce cas, vous pouvez utiliser POST avec un en-tête X-HTTP-Method-Override: QUERY comme solution de contournement.
Non. Comme pour GET, la méthode QUERY ne supporte pas l'envoi de fichiers joints. Utilisez POST pour les requêtes nécessitant des fichiers.